# 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`
