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

1.9 KiB

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

날짜: 2025-12-23 작성자: happybell80 관련 파일: main.py, app/router/*_endpoint.py

문제 상황

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

해결 방안

  • feedback_endpoint.py 생성: main.py:89-110app/router/feedback_endpoint.py
  • llm_endpoint.py 확장: main.py:473-568app/router/llm_endpoint.py:129-217 (/api/llm/extract 추가)
  • llm_complete_endpoint.py 생성: main.py:113-148app/router/llm_complete_endpoint.py (/complete 별도 파일)
  • slack_endpoint.py 확장: main.py:241-245app/router/slack_endpoint.py:117-121 (/interactive 추가)
  • system_endpoint.py 생성: main.py:287-317,324-361,438-444app/router/system_endpoint.py
  • schedule_endpoint.py 생성: main.py:259-295app/router/schedule_endpoint.py
  • dm_endpoint.py 확장: main.py:364-435app/router/dm_endpoint.py (/send-email-summary 추가, JWT 인증 추가)
  • history_endpoint.py 생성: main.py:447-522app/router/history_endpoint.py
  • 의존성 주입: system_endpoint.py:18-21 (set_router_instance), schedule_endpoint.py:18-21 (set_scheduler)
  • TDD 진행: 각 엔드포인트별 테스트 파일 작성 후 구현

구현 완료

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

교훈

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