# Express → Fastify 마이그레이션 ## 개요 `backend-backup/` (Express) → `backend/` (Fastify)로 마이그레이션 완료 ## 완료된 작업 ### 서버 기반 - [x] Fastify 앱 구조 (`src/app.js`, `src/server.js`) - [x] 플러그인 시스템 (`src/plugins/`) - db.js (MariaDB) - redis.js - auth.js (JWT) - meilisearch.js - scheduler.js (봇 스케줄러) ### API 라우트 (`src/routes/`) - [x] 인증 (`/api/auth`) - POST /login - 로그인 - GET /verify - 토큰 검증 - [x] 멤버 (`/api/members`) - GET / - 목록 조회 - GET /:name - 상세 조회 - PUT /:name - 수정 (이미지 업로드 포함) - [x] 앨범 (`/api/albums`) - GET / - 목록 조회 - GET /:id - ID로 조회 - GET /by-name/:name - 이름으로 조회 - GET /by-name/:albumName/track/:trackTitle - 트랙 조회 - POST / - 생성 - PUT /:id - 수정 - DELETE /:id - 삭제 - 사진 관리 (`/api/albums/:id/photos`) - GET / - 목록 - POST / - 업로드 - PUT /:photoId - 수정 - DELETE /:photoId - 삭제 - 티저 관리 (`/api/albums/:id/teasers`) - GET / - 목록 - POST / - 업로드 - DELETE /:teaserId - 삭제 - [x] 일정 (`/api/schedules`) - GET / - 월별 조회 (생일 포함) - GET /?search= - Meilisearch 검색 - GET /:id - 상세 조회 - DELETE /:id - 삭제 - POST /sync-search - Meilisearch 동기화 - [x] 추천 검색어 (`/api/schedules/suggestions`) - GET / - 추천 검색어 조회 - GET /popular - 인기 검색어 조회 - POST /save - 검색어 저장 - GET /dict - 사용자 사전 조회 (관리자) - PUT /dict - 사용자 사전 저장 (관리자) - [x] 통계 (`/api/stats`) - GET / - 대시보드 통계 ### 관리자 API (`src/routes/admin/`) - [x] 봇 관리 (`/api/admin/bots`) - GET / - 봇 목록 - POST /:id/start - 봇 시작 - POST /:id/stop - 봇 정지 - POST /:id/sync-all - 전체 동기화 - GET /quota-warning - 할당량 경고 조회 - DELETE /quota-warning - 할당량 경고 해제 - [x] YouTube 관리 (`/api/admin/youtube`) - GET /video-info - 영상 정보 조회 - POST /schedule - 일정 저장 - PUT /schedule/:id - 일정 수정 - [x] X 관리 (`/api/admin/x`) - GET /post-info - 게시글 정보 조회 - POST /schedule - 일정 저장 ### 서비스 (`src/services/`) - [x] YouTube 봇 (`services/youtube/`) - 영상 자동 수집 - 채널별 필터링 (제목 필터, 멤버 추출) - [x] X(Twitter) 봇 (`services/x/`) - Nitter 스크래핑 - 이미지 URL 추출 - [x] Meilisearch 검색 (`services/meilisearch/`) - 일정 검색 - 전체 동기화 - [x] 추천 검색어 (`services/suggestions/`) - 형태소 분석 (kiwi-nlp) - bi-gram 빈도 - 초성 검색 - 사용자 사전 관리 - [x] 이미지 업로드 (`services/image.js`) - 앨범 커버 - 멤버 이미지 - 앨범 사진/티저 ## 남은 작업 (미구현) ### 일반 일정 CRUD - [ ] POST /api/schedules - 일정 생성 (일반) - [ ] PUT /api/schedules/:id - 일정 수정 (일반) ※ 현재는 YouTube/X 전용 일정 생성 API만 구현됨 ### 카테고리 관리 - [ ] POST /api/schedule-categories - 생성 - [ ] PUT /api/schedule-categories/:id - 수정 - [ ] DELETE /api/schedule-categories/:id - 삭제 - [ ] PUT /api/schedule-categories-order - 순서 변경 ※ GET은 구현됨 (목록 조회) ### 기타 - [ ] GET /api/kakao/places - 카카오 장소 검색 프록시 ## 파일 비교표 | Express (backend-backup) | Fastify (backend) | 상태 | |--------------------------|-------------------|------| | routes/admin.js (로그인) | routes/auth.js | 완료 | | routes/admin.js (앨범 CRUD) | routes/albums/index.js | 완료 | | routes/admin.js (사진/티저) | routes/albums/photos.js, teasers.js | 완료 | | routes/admin.js (멤버 수정) | routes/members/index.js | 완료 | | routes/admin.js (일정 삭제) | routes/schedules/index.js | 완료 | | routes/admin.js (일정 생성/수정) | - | 미완료 | | routes/admin.js (카테고리 CUD) | - | 미완료 | | routes/admin.js (봇 관리) | routes/admin/bots.js | 완료 | | routes/admin.js (할당량) | routes/admin/bots.js | 완료 | | routes/admin.js (카카오) | - | 미완료 | | - | routes/admin/youtube.js | 신규 | | - | routes/admin/x.js | 신규 | | routes/albums.js | routes/albums/index.js | 완료 | | routes/members.js | routes/members/index.js | 완료 | | routes/schedules.js | routes/schedules/index.js | 완료 | | routes/stats.js | routes/stats/index.js | 완료 | | services/youtube-bot.js | services/youtube/ | 완료 | | services/youtube-scheduler.js | plugins/scheduler.js | 완료 | | services/x-bot.js | services/x/ | 완료 | | services/meilisearch.js | services/meilisearch/ | 완료 | | services/meilisearch-bot.js | services/meilisearch/ | 완료 | | services/suggestions.js | services/suggestions/ | 완료 | ## 참고 사항 - 기존 Express 코드는 `backend-backup/` 폴더에 보존 - 마이그레이션 시 기존 코드 참조하여 동일 기능 구현 - DB 스키마 변경 사항: - `tracks` → `album_tracks` (이름 변경) - `venues` → `concert_venues` (이름 변경)