DOCS/journey/plans/archive/251123_rb8001_계층_분리_리팩토링_계획.md
2026-01-04 14:28:10 +09:00

2.2 KiB

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