| 구분 | 내용 |
|---|---|
| 프로젝트 이름 | Inflearn 클론코딩 프로젝트 |
| 핵심 목표 | 프론트/백엔드/인프라 기술 역량을 기르기 위한 목적으로 진행중인 인프런 웹사이트 클론코딩 프로젝트입니다. |
| 주요 기능 | 사용자 인증/인가, 강의(코스) 관리, 섹션/강의 관리, 카테고리 관리, 미디어 업로드(S3), 강사 대시보드 |
| 영역 | 기술 스택 | 비고 |
|---|---|---|
| Frontend | Next.js, TypeScript, NextAuth.js, Tailwind CSS | Turbopack 사용, OpenAPI 클라이언트 자동 생성 |
| Backend | NestJS, TypeScript, Passport.js, Swagger | RESTful API, JWT 인증 |
| Database/ORM | PostgreSQL, Prisma | Prisma Class Generator 사용 |
| Storage | AWS S3 | 미디어 파일 저장 |
| API 통신 | OpenAPI (Swagger) | 자동 클라이언트 코드 생성 |
프로젝트를 로컬 환경에서 실행하기 위한 필수 단계입니다.
- Node.js (v22.16.0 이상)
- pnpm (v10.11.0)
-
레포지토리 클론:
git clone https://github.com/sukyoungshin/inflearn-fullstack-clone cd inflearn -
의존성 설치:
# backend와 frontend 폴더에서 각각 실행 cd backend && pnpm install cd ../frontend && pnpm install
-
환경 변수 설정:
Backend (.env):
DATABASE_URL="postgresql://user:password@localhost:5432/inflearn" AUTH_SECRET="your-secret-key-here" PORT=8000 AWS_ACCESS_KEY_ID="your-aws-access-key" AWS_SECRET_ACCESS_KEY="your-aws-secret-key" AWS_REGION="ap-northeast-2" AWS_S3_BUCKET_NAME="your-bucket-name"
Frontend (.env):
DATABASE_URL="postgresql://user:password@localhost:5432/inflearn" AUTH_SECRET="your-secret-key-here" # Backend와 동일한 값 API_URL="http://localhost:8000" NEXTAUTH_URL="http://localhost:3000"
-
데이터베이스 설정:
# Backend에서 Prisma 마이그레이션 실행 cd backend pnpm prisma:generate pnpm prisma:push pnpm prisma:seed # 카테고리 시드 데이터 생성
-
OpenAPI 클라이언트 생성 (Frontend):
cd frontend pnpm openapi:generate참고: Backend 서버가 실행 중이어야 Swagger 문서에서 OpenAPI 스펙을 가져올 수 있습니다.
-
백엔드 실행:
cd backend pnpm run start:dev- 서버 실행:
http://localhost:8000 - Swagger 문서:
http://localhost:8000/docs
- 서버 실행:
-
프론트엔드 실행:
cd frontend pnpm run dev- 애플리케이션 실행:
http://localhost:3000
- 애플리케이션 실행:
프로젝트의 설계, 구현 이유, 트러블슈팅 등 상세 내용은 docs 폴더를 참고해주세요.
| 문서 | 내용 요약 | 링크 |
|---|---|---|
architecture.md |
Frontend/Backend 연동 구조 및 JWT 인증 흐름 (NextAuth.js + Passport.js) | architecture.md |
inflearn/
├── backend/ # NestJS 백엔드
│ ├── src/
│ │ ├── auth/ # JWT 인증 (Passport Strategy)
│ │ ├── courses/ # 강의 관리
│ │ ├── sections/ # 섹션 관리
│ │ ├── lectures/ # 강의 관리
│ │ ├── categories/ # 카테고리 관리
│ │ ├── media/ # 미디어 업로드 (S3)
│ │ └── users/ # 사용자 관리
│ └── prisma/ # Prisma 스키마 및 시드
│
├── frontend/ # Next.js 프론트엔드
│ ├── app/ # App Router
│ │ ├── (auth)/ # 인증 페이지
│ │ ├── course/ # 강의 상세/편집
│ │ ├── instructor/ # 강사 대시보드
│ │ └── ...
│ ├── components/ # React 컴포넌트
│ ├── generated/ # OpenAPI 자동 생성 클라이언트
│ └── config/ # OpenAPI 런타임 설정
│
├── README.md # 프로젝트 간략소개
└── docs/ # 프로젝트 문서
- NextAuth.js 기반 JWT 인증
- Passport.js 전략 패턴을 활용한 백엔드 인증
- Bearer 토큰 방식 API 보호
- 강의(코스) CRUD
- 섹션 및 강의(레슨) 계층 구조 관리
- 강의 미리보기 설정
- 카테고리 분류
- AWS S3 기반 파일 업로드
- 이미지/동영상 지원 (최대 300MB)
- 강사 대시보드
- 강의 생성/편집 인터페이스
- CKEditor 기반 강의 설명 편집
Backend API 스펙이 변경되면 Frontend에서 클라이언트를 재생성해야 합니다:
cd frontend
pnpm openapi:generate데이터베이스 데이터를 시각적으로 확인:
cd backend
pnpm prisma:studioBackend API 문서 확인:
- URL:
http://localhost:8000/docs - Bearer 토큰 인증 테스트 가능