DOCS/journey/troubleshooting/251223_main_엔드포인트_라우터_이동.md

1.8 KiB

main.py 엔드포인트 라우터 이동

작성일: 2025-12-23 문제: main.py에 16개 엔드포인트가 직접 정의되어 원칙 위반 해결: 모든 엔드포인트를 app/router/로 이동

문제

main.py에 @app.post(), @app.get() 데코레이터로 직접 정의된 엔드포인트 16개 존재. 원칙 문서(311_FastAPI_구조_원칙.md)에 따르면 main.py는 "앱 실행, 라우터 등록만" 담당해야 함.

해결

이동 계획

  1. feedback_endpoint.py (신규): /api/feedback/chat
  2. llm_endpoint.py (확장): /api/llm/extract 추가
  3. llm_complete_endpoint.py (신규): /complete (skill-slack 호환성)
  4. slack_endpoint.py (확장): /api/slack/interactive 추가
  5. system_endpoint.py (신규): /health, /stats, /api/config
  6. schedule_endpoint.py (신규): /api/schedule/*
  7. dm_endpoint.py (확장): /send-email-summary 추가, JWT 인증 추가
  8. history_endpoint.py (신규): /api/history

의존성 주입 패턴

  • system_endpoint.py: set_router_instance()로 router 인스턴스 주입
  • schedule_endpoint.py: set_scheduler()로 scheduler 인스턴스 주입

작업 방식

TDD로 진행:

  1. 각 엔드포인트별 테스트 파일 작성
  2. router 파일 생성/확장
  3. main.py에서 엔드포인트 제거 및 라우터 등록

결과

  • main.py에 남은 @app. 데코레이터는 @app.on_event()만 남음 (이벤트 핸들러)
  • 모든 엔드포인트가 router로 분리 완료
  • e2e 테스트 통과 확인
  • 기존 기능 정상 동작 확인

교훈

  1. 원칙 준수: main.py는 라우터 등록만 담당하도록 엄격히 분리
  2. 의존성 주입: router, scheduler 등 인스턴스는 함수로 주입하는 패턴 사용
  3. TDD: 테스트 먼저 작성 후 구현하여 안정성 확보