외국인을 위한 한국 취업 로드맵과 채용 솔루션을 제공하는 종합 플랫폼
Korfit는 한국에서 취업을 희망하는 외국인들을 위한 종합 취업 지원 플랫폼입니다. 10단계 역량 검증 시스템, AI 기반 취업 내비게이션, 포트폴리오 공유, 그리고 기업과 구직자를 연결하는 채용 시스템을 제공합니다.
- 사용자 관리: 피고용인(Employee)과 고용인(Employer) 역할 기반 시스템
- 채용 공고: 다단계 공고 등록 및 관리 시스템
- 리뷰 시스템: 채용 후기 및 포트폴리오 공유
- 스터디: 취업 역량 강화를 위한 스터디 참여
- AI 코칭: 개인 맞춤형 취업 가이드 제공
- Next.js 14 (App Router) - React 기반 풀스택 프레임워크
- TypeScript - 타입 안전성과 개발 생산성
- Tailwind CSS - 유틸리티 기반 CSS 프레임워크
- Framer Motion - 애니메이션 라이브러리
- Custom Design System - 재사용 가능한 컴포넌트 시스템
- Zustand - 경량 상태 관리 라이브러리
- React Hook Form - 폼 상태 관리
- React Query (예정) - 서버 상태 관리
- Daum 우편번호 API - 주소 검색 서비스
- RESTCountries API - 국가 정보 조회
- AWS S3 - 파일 업로드 및 저장
src/
├── app/ # 페이지 라우팅 (Presentation Layer)
├── components/ # 재사용 가능한 UI 컴포넌트
│ ├── common/ # 공통 컴포넌트
│ ├── landing/ # 랜딩 페이지 컴포넌트
│ ├── recruit/ # 채용 관련 컴포넌트
│ ├── review/ # 리뷰 관련 컴포넌트
│ └── sign-up/ # 회원가입 관련 컴포넌트
├── store/ # 상태 관리 (Application Layer)
├── lib/ # API 통신 및 유틸리티 (Infrastructure Layer)
├── types/ # 타입 정의 (Domain Layer)
└── assets/ # 정적 자원
- Auth Domain: 인증, 회원가입, 사용자 관리
- Recruit Domain: 채용 공고 생성, 조회, 관리
- Review Domain: 후기 작성, 포트폴리오 공유
- Common Domain: 공통 컴포넌트 및 유틸리티
// 인증이 필요한 API 호출을 위한 공통 함수
export const authorizedFetch = async (input: RequestInfo, init: RequestInit = {}) => {
const accessToken = Cookies.get('accessToken')
// JWT 토큰 자동 갱신 로직 포함
}- JWT Access Token + Refresh Token 방식
- 토큰 만료 시 자동 갱신
- 역할 기반 라우팅 및 권한 관리
- Authentication:
/api/v2/member/* - Recruitment:
/api/v2/recruit/* - File Upload:
/api/v1/file/upload
- Node.js 18.x 이상
- npm 또는 yarn
# 의존성 설치
npm install
# 환경변수 설정
cp .env.example .env.localNEXT_PUBLIC_BASE_URL=http://localhost:8080
NEXT_PUBLIC_API_VERSION=v2npm run devnpm run build
npm run start/- 메인 페이지 (채용 공고 목록)/login- 로그인 페이지/sign-up- 회원가입 (다단계 폼)/recruit-form- 채용 공고 등록 (3단계 프로세스)/review- 채용 후기 목록/review/[id]- 후기 상세 페이지/[recruitId]- 채용 공고 상세 페이지
// 채용 공고 등록: 3단계 프로세스
// Step 1: 회사 정보
// Step 2: 공고 정보
// Step 3: 상세 정보- Page Components: 페이지별 컨테이너 컴포넌트
- Feature Components: 도메인별 기능 컴포넌트
- Common Components: 재사용 가능한 UI 컴포넌트
- Form Components: 폼 관련 특화 컴포넌트
// Zustand를 활용한 도메인별 상태 분리
interface AuthStore {
role: 'Employee' | 'Employer'
employeeSignUp: EmployeeSignUpType
setState: (params: SetAuthStoreType) => void
}
interface RecruitStore {
recruitPostData: RecruitInputDataType
s3CompanyLogoUrl: string | ArrayBuffer | null
setState: (params: SetRecruitStoreType) => void
}- 컴포넌트: PascalCase (예:
RecruitCard) - 파일명: PascalCase for components, camelCase for utilities
- 타입: Interface 또는 Type alias 사용
- 상태: Zustand store 패턴 준수
- 도메인별 컴포넌트 분리
- 공통 컴포넌트와 도메인 컴포넌트 구분
- 타입 정의의 명확한 분리
- Next.js Image 컴포넌트 활용
- 동적 임포트를 통한 코드 스플리팅
- 메모이제이션 패턴 적용
- 해당 도메인의 types 먼저 정의
- API 통신 함수를 lib 폴더에 작성
- Zustand store 설정
- 컴포넌트 개발 및 페이지 연동
- 개발 환경에서 상태 변화 로깅
- API 호출 결과 콘솔 출력
- 에러 바운더리 적용 (예정)
이 프로젝트는 [라이선스명]에 따라 라이선스가 부여됩니다.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
프로젝트 관련 문의사항이 있으시면 언제든 연락 주세요.
Korfit Team - 외국인의 성공적인 한국 취업을 위한 토탈 솔루션