fromis_9/docs/migration.md
caadiq d4697ad996 refactor: 일정 API source 객체 구조 변경
- 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>
2026-01-18 21:50:04 +09:00

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 스키마 변경 사항:
    • tracksalbum_tracks (이름 변경)
    • venuesconcert_venues (이름 변경)