NestJS 기반의 테니스 레슨 스케줄링 시스템 백엔드 프로젝트를 진행하며 작성한 포트폴리오 요약입니다.
---
## ✅ 프로젝트 개요
- **목표**: 사용자와 코치 간의 테니스 레슨 예약 시스템 개발
- **핵심 기능**:
- 사용자의 조건 기반 가능한 시간 탐색
- 요일/시간 반복 예약
- 코치별 스케줄 분리
- **기술 스택**: NestJS, TypeScript, PostgreSQL, TypeORM
---
## ⚙️ 기술 스택
- **Backend**: TypeScript, NestJS
- **Database**: PostgreSQL
- **ORM**: TypeORM
- **Testing**: Jest
- **DevTools**: ESLint, Prettier
- **기타**: dotenv 환경 설정, seed script
---
## 📡 주요 API 예시
### ✅ 가능한 레슨 시간 조회
- `GET /lesson/possibleList`
```
json
요청:
{
"name": "김민준",
"time": 60,
"number": 2
}
json
응답:
{
"success": true,
"data": [
"2024-04-13 07:00:00",
"2024-04-13 07:30:00"
]
}
🧩 ERD 요약
-
User
,Coach
,Lesson
,Schedule
,LessonTime
등의 엔티티가 관계형으로 연결 - 다양한 예약 조건 (요일, 시간, 반복 예약 등)을 처리하기 위한 모델링
ERD 시각화는 ERD.md (GitHub) 참고
🧱 서비스 계층 구조
[Client]
↓
[Controller] → [Service] → [Repository] → [PostgreSQL]
- NestJS의 계층 기반 아키텍처
- 도메인 단위 모듈 구조 (
lesson.module.ts
) - DI(의존성 주입) 패턴 중심 설계
🐛 트러블슈팅 요약
🔄 순환 참조 문제
-
Lesson ↔ Schedule
간forwardRef()
미사용 시 NestJS DI 에러 - →
forwardRef()
사용으로 해결
⏰ 시간대 불일치
- DB 저장은 UTC, 클라이언트 응답은 KST로 변환 처리
🧪 테스트 환경 충돌
- seed script가 실DB 덮어쓰는 문제 발생
- →
.env.test
환경 구분 및 테스트 전용 설정으로 분리
💭 회고
NestJS의 구조와 설계 철학을 직접 체험하면서, 단순한 CRUD를 넘어서 예약 로직, 시간 조건 처리, 관계형 DB 모델링 등을 경험할 수 있었습니다. 실무형 프로젝트를 구성하며 기술적 의사결정과 구조 설계 역량을 키울 수 있는 좋은 기회였습니다.
🔗 참고 링크
- 🔗 GitHub: https://github.com/Jin5540/lesson
- 📄 API 명세서 (Markdown): API.md 다운로드
-
📁 프로젝트 문서:
Top comments (0)