- source_name, source_url → source: { name, url } 형태로 변경
- YouTube: schedule_youtube에서 video_id로 URL 생성
- X: schedule_x에서 post_id로 URL 생성
- 프론트엔드 전체 파일 source 객체 형태로 수정
- 문서 업데이트 (api.md, architecture.md, migration.md 등)
- tracks → album_tracks 테이블명 변경 반영
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
Express → Fastify 마이그레이션
개요
backend-backup/ (Express) → backend/ (Fastify)로 마이그레이션 진행 중
완료된 작업
서버 기반
- Fastify 앱 구조 (
src/app.js,src/server.js) - 플러그인 시스템 (
src/plugins/)- db.js (MariaDB)
- redis.js
- auth.js (JWT)
- meilisearch.js
- scheduler.js (봇 스케줄러)
API 라우트 (src/routes/)
- 인증 (
/api/auth)- POST /login - 로그인
- GET /me - 현재 사용자 정보
- 멤버 (
/api/members)- GET / - 목록 조회
- GET /:name - 상세 조회
- PUT /:name - 수정 (이미지 업로드 포함)
- 앨범 (
/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 - 삭제
- 일정 (
/api/schedules) - 조회만- GET / - 월별 조회 (생일 포함)
- GET /?search= - Meilisearch 검색
- GET /:id - 상세 조회
- POST /sync-search - Meilisearch 동기화
- 추천 검색어 (
/api/schedules/suggestions)- GET / - 추천 검색어 조회
- kiwi-nlp 형태소 분석
- bi-gram 자동완성
- 초성 검색
- 통계 (
/api/stats)- GET / - 대시보드 통계
서비스 (src/services/)
- YouTube 봇 (
services/youtube/)- 영상 자동 수집
- 채널별 필터링 (제목 필터, 멤버 추출)
- X(Twitter) 봇 (
services/x/)- Nitter 스크래핑
- 이미지 URL 추출
- Meilisearch 검색 (
services/meilisearch/)- 일정 검색
- 전체 동기화
- 추천 검색어 (
services/suggestions/)- 형태소 분석
- bi-gram 빈도
- 이미지 업로드 (
services/image.js)- 앨범 커버
- 멤버 이미지
- 앨범 사진/티저
남은 작업
관리자 API (admin.js에서 마이그레이션 필요)
- 일정 CRUD
- POST /api/schedules - 생성
- PUT /api/schedules/:id - 수정
- DELETE /api/schedules/:id - 삭제
- 일정 카테고리 CRUD
- GET /api/schedule-categories - 목록
- POST /api/schedule-categories - 생성
- PUT /api/schedule-categories/:id - 수정
- DELETE /api/schedule-categories/:id - 삭제
- PUT /api/schedule-categories-order - 순서 변경
- 봇 관리 API
- GET /api/bots - 봇 목록
- POST /api/bots/:id/start - 봇 시작
- POST /api/bots/:id/stop - 봇 정지
- POST /api/bots/:id/sync-all - 전체 동기화
- 카카오 장소 검색 프록시
- GET /api/kakao/places - 장소 검색
- YouTube 할당량 관리
- POST /api/quota-alert - Webhook 수신
- GET /api/quota-warning - 경고 상태 조회
- DELETE /api/quota-warning - 경고 해제
기타 기능
- X 프로필 조회 (
/api/schedules/x-profile/:username) - 어드민 사전 관리 (형태소 분석용 사전)
파일 비교표
| 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 (일정 CRUD) | - | 미완료 |
| routes/admin.js (카테고리) | - | 미완료 |
| routes/admin.js (봇 관리) | - | 미완료 |
| routes/admin.js (카카오) | - | 미완료 |
| routes/admin.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(이름 변경)