From 5be00aa3d55864a31f3bffe382c3ab8dbc7a3178 Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 23 Dec 2025 21:49:15 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20main.py=20=EC=97=94=EB=93=9C=ED=8F=AC?= =?UTF-8?q?=EC=9D=B8=ED=8A=B8=20=EB=9D=BC=EC=9A=B0=ED=84=B0=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20=EC=9E=91=EC=97=85=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...3_main_엔드포인트_라우터_이동.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 journey/troubleshooting/251223_main_엔드포인트_라우터_이동.md diff --git a/journey/troubleshooting/251223_main_엔드포인트_라우터_이동.md b/journey/troubleshooting/251223_main_엔드포인트_라우터_이동.md new file mode 100644 index 0000000..d1c95eb --- /dev/null +++ b/journey/troubleshooting/251223_main_엔드포인트_라우터_이동.md @@ -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**: 테스트 먼저 작성 후 구현하여 안정성 확보 +