항공사 승무원 스케줄 스위칭 시스템에서 영감을 받아 만든 강사용 강의 일정 교환 플랫폼입니다.
- 내 스케줄 관리: 캘린더 뷰로 강의 일정 확인
- 스위칭 요청: 다른 강사와 강의 일정 교환 요청
- 스위칭 게시판: 공개 스위칭 요청 확인 및 신청
- 실시간 알림: 스위칭 요청/수락/완료 알림
- 대시보드: 전체 통계 및 현황 확인
- 스위칭 승인: 스위칭 요청 최종 승인/반려
- 강사 관리: 강사 계정 및 과목 자격 관리
- 설정 관리: 기관 설정 (관리자 승인 필요 여부 등)
| 유형 | 설명 |
|---|---|
| 1:1 교환 | 두 강사가 서로의 강의를 교환 |
| 대리 요청 | 내 강의를 대신 해줄 강사 찾기 |
| 강의 인수 | 다른 강사의 강의 인수 |
- Node.js + Express + TypeScript
- PostgreSQL + Prisma ORM
- JWT 인증
- Socket.io (실시간 알림)
- Next.js 14 + TypeScript
- Tailwind CSS
- React Query + Zustand
- Socket.io Client
- React Native + Expo
- NativeWind
├── apps/
│ ├── api/ # 백엔드 서버
│ │ ├── prisma/ # Prisma 스키마 & 시드
│ │ └── src/
│ │ ├── config/ # 설정
│ │ ├── controllers/ # 컨트롤러
│ │ ├── middlewares/ # 미들웨어
│ │ ├── routes/ # 라우트
│ │ ├── services/ # 서비스
│ │ └── types/ # 타입 정의
│ │
│ ├── web/ # 웹 프론트엔드
│ │ └── src/
│ │ ├── app/ # Next.js App Router
│ │ ├── components/ # 컴포넌트
│ │ ├── hooks/ # 커스텀 훅
│ │ ├── lib/ # 유틸리티
│ │ ├── stores/ # 상태 관리
│ │ └── types/ # 타입 정의
│ │
│ └── mobile/ # 모바일 앱 (계획됨)
│
└── packages/ # 공유 패키지
├── shared/ # 공유 타입/유틸
└── ui/ # 공유 UI 컴포넌트
- Node.js 18+
- PostgreSQL
- npm 또는 yarn
# 의존성 설치
npm install
# 환경변수 설정
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env
# 데이터베이스 설정
npm run db:push
npm run db:seed# 전체 개발 서버 실행
npm run dev
# 개별 실행
npm run dev:api # API 서버 (포트 4000)
npm run dev:web # 웹 앱 (포트 3000)| 역할 | 이메일 | 비밀번호 |
|---|---|---|
| 관리자 | admin@demo.com | password123 |
| 강사1 | kim@demo.com | password123 |
| 강사2 | lee@demo.com | password123 |
| 강사3 | park@demo.com | password123 |
| 강사4 | choi@demo.com | password123 |
기관 코드: DEMO2024
POST /api/auth/register- 회원가입POST /api/auth/login- 로그인GET /api/auth/me- 내 정보 조회
GET /api/lectures/my- 내 강의 목록GET /api/lectures- 전체 강의 목록GET /api/lectures/switchable/list- 스위칭 가능한 강의
GET /api/switch-requests- 스위칭 요청 목록POST /api/switch-requests- 스위칭 요청 생성PUT /api/switch-requests/:id/respond- 요청 수락/거절PUT /api/switch-requests/:id/cancel- 요청 취소
GET /api/notifications- 알림 목록PUT /api/notifications/:id/read- 읽음 처리PUT /api/notifications/read-all- 전체 읽음 처리
1. 강사 A가 스위칭 요청 생성
↓
2. 시스템이 자격 요건 검증 (과목 자격, 시간 충돌)
↓
3. 강사 B에게 알림 발송
↓
4. 강사 B가 수락/거절
↓
5. (설정에 따라) 관리자 승인
↓
6. 스위칭 완료 - 강의 담당자 변경
MIT License