# rb8001 계층 분리 리팩토링 계획 **날짜**: 2025-11-23 **참고**: `311_FastAPI_구조_원칙.md` --- ## 목적 중복 대화 저장 버그 해결 및 계층 분리 원칙 준수 --- ## Phase 1: 중복 저장 해결 (완료) **문제**: router.py + main.py 이중 저장 **해결**: `troubleshooting/250924_대화저장_오류.md` 참조 --- ## Phase 2: 계층 건너뛰기 해결 (부분 완료) **구현 완료**: `troubleshooting/251123_rb8001_endpoint_service_separation.md` 참조 - main.py 엔드포인트 → routers/로 이동 - router → services 호출 구조 일부 정리 **미완료 위반 사항**: 1. router/feedback_handler.py:58 - SessionLocal() 직접 사용 (원칙:164) 2. router/intent_review_endpoint.py:21 - SessionLocal() 직접 사용 3. router/slack_handler.py:77,202,361 - SessionLocal() 직접 사용 4. services/startup_valuation.py:475 - asyncpg.connect() 직접 사용 5. services/intent_bayes.py:57,117,160 - psycopg2.connect() 직접 사용 6. services/coldmail_filter.py:182,208,255 - asyncpg.connect() 직접 사용 **필요 작업**: - state/repositories/ 폴더 생성 - DB 접근 로직을 repositories로 분리 - services에서 repositories 호출 --- ## Phase 3: 폴더 구조 정리 (미착수) ### 현재 구조 ``` app/ ├── brain/ # services/brain/으로 이동 필요 ├── llm/ # services/llm/으로 이동 필요 ├── memory/ # services/memory/로 이동 필요 ├── router/ # routers/로 이름 변경 필요 ├── services/ └── state/ ``` ### 목표 구조 (311_FastAPI_구조_원칙.md:28-42) ``` app/ ├── routers/ # 엔드포인트만 ├── services/ # 비즈니스 로직 ├── state/ │ ├── models/ # ORM 모델 │ └── repositories/ # DB 접근 └── schemas/ # Pydantic 모델 ``` --- ## Phase 4: 파일 크기 제한 (미착수) **초과 파일** (300줄 기준): - router.py: 915줄 - main.py: 747줄 - calendar_handler.py: 800줄+ **분리 계획**: - 파일별 기능 단위로 분할 - 단일 책임 원칙 적용 --- ## 참고 - `311_FastAPI_구조_원칙.md` - `troubleshooting/250924_대화저장_오류.md` - `troubleshooting/251123_rb8001_endpoint_service_separation.md`