docs: main.py 엔드포인트 라우터 이동 작업 기록

This commit is contained in:
Claude-51124 2025-12-23 21:49:15 +09:00
parent 57269c1a0b
commit 5be00aa3d5

View File

@ -0,0 +1,49 @@
# 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**: 테스트 먼저 작성 후 구현하여 안정성 확보