- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
128 lines
4.4 KiB
Markdown
128 lines
4.4 KiB
Markdown
# RB8001 리팩토링 계획
|
|
|
|
**작성일**: 2025-09-14
|
|
**목표**: 로빙 철학 반영, 역할 기반 명명, main.py 최소화
|
|
|
|
## 현재 문제점
|
|
- main.py 732줄 (과도한 책임)
|
|
- service/manager/handler 등 모호한 용어 혼재
|
|
- 파일당 500줄 이상 대형 파일 다수
|
|
- 스킬/커맨드/라우터 역할 중복
|
|
|
|
## 제안 구조
|
|
|
|
```
|
|
rb8001/
|
|
├── main.py # 앱 부팅만
|
|
├── body/ # 로빙의 몸 (순수 로직)
|
|
│ ├── brain.py # 의사결정
|
|
│ ├── memory/
|
|
│ │ ├── store.py # 메모리 저장/검색
|
|
│ │ └── scoring.py # 중요도 계산
|
|
│ ├── emotion/ # 감정 시스템
|
|
│ └── stats.py # 5대 스탯
|
|
│
|
|
├── soul/ # 로빙의 영혼 (DB/정체성)
|
|
│ ├── persistence.py # PostgreSQL
|
|
│ ├── identity.py # ROBEING_ID, DID
|
|
│ └── state_client.py # State Service 연동
|
|
│
|
|
├── skills/ # 능력 (내부 실행 or 외부 호출)
|
|
│ ├── email.py # skill-email 연동
|
|
│ ├── news.py # skill-news 연동
|
|
│ ├── slack_dm.py # DM 전송
|
|
│ └── companyx_news.py # 컴퍼니엑스 뉴스
|
|
│
|
|
├── interfaces/ # 세상과의 접점
|
|
│ ├── slack.py # Slack 이벤트/인터랙티브
|
|
│ ├── api.py # REST 라우트
|
|
│ └── gateway.py # Frontend 연동
|
|
│
|
|
├── tools/ # 도구 (함수형)
|
|
│ ├── llm/
|
|
│ │ ├── gemini.py
|
|
│ │ ├── claude.py
|
|
│ │ ├── openai.py
|
|
│ │ └── selector.py # 모델 선택
|
|
│ ├── http.py # 공용 AsyncClient
|
|
│ └── slack_client.py # Slack API 클라이언트
|
|
│
|
|
├── jobs/ # 스케줄 작업
|
|
│ ├── headlines.py # 깡프로 뉴스 (9:10)
|
|
│ ├── daily_summary.py # 일일 브리핑 (9:01)
|
|
│ └── companyx.py # 컴퍼니엑스 (10:00)
|
|
│
|
|
├── config/
|
|
│ ├── settings.py # 환경 설정
|
|
│ └── constants.py # 상수
|
|
│
|
|
└── utils/
|
|
├── logger.py # 로깅
|
|
├── auth.py # JWT/서명 검증
|
|
└── validators.py # 입력 검증
|
|
```
|
|
|
|
## 주요 매핑 (현재 → 제안)
|
|
|
|
| 현재 경로 | 제안 경로 | 이유 |
|
|
|----------|----------|------|
|
|
| app/brain/decision_engine.py | body/brain.py | 의사결정=뇌 |
|
|
| app/memory/manager.py | body/memory/store.py | 기억 저장 |
|
|
| app/core/emotion/* | body/emotion/* | 감정=몸의 일부 |
|
|
| app/state/database.py | soul/persistence.py | DB=영혼 보존 |
|
|
| app/router/slack_handler.py | interfaces/slack.py | Slack=인터페이스 |
|
|
| app/skills/dm_skill.py | skills/slack_dm.py | 명확한 역할 |
|
|
| app/llm/* | tools/llm/* | LLM=도구 |
|
|
| main.py 스케줄 함수들 | jobs/* | 관심사 분리 |
|
|
|
|
## 이행 단계
|
|
|
|
### 1단계: main.py 슬림화
|
|
- 스케줄 등록 → jobs/__init__.py
|
|
- 엔드포인트 정의 → interfaces/api.py
|
|
- 목표: 100줄 이하
|
|
|
|
### 2단계: 인터페이스 분리
|
|
- Slack 이벤트 → interfaces/slack.py
|
|
- Frontend API → interfaces/gateway.py
|
|
- 입력만 받고 body/* 호출
|
|
|
|
### 3단계: 스킬 정리
|
|
- 뉴스 조립 → jobs/headlines.py
|
|
- 용어 추출 → tools/llm 활용
|
|
- DM 로직 → skills/slack_dm.py
|
|
|
|
### 4단계: 영혼 통합
|
|
- DB 저장 → soul/persistence.py 단일 경유
|
|
- 스탯 관리 → soul/state_client.py
|
|
|
|
### 5단계: 의도 분석
|
|
- interfaces/api.py 진입점에서 처리
|
|
- 프리필터 → 제로샷 → 임계치 체크
|
|
|
|
## 설계 원칙
|
|
|
|
1. **1파일 1역할**: 200-400줄 유지
|
|
2. **함수형 우선**: 순수 함수, 부작용 최소화
|
|
3. **NO HARDCODING**: config/settings.py만 참조
|
|
4. **명확한 명명**: service/manager/handler 금지
|
|
5. **HTTP 스킬**: 외부 스킬은 HTTP로만
|
|
|
|
## 예상 효과
|
|
|
|
- 코드 가독성 향상
|
|
- 테스트 용이성 증대
|
|
- 로빙 철학과 코드 구조 일치
|
|
- 신규 개발자 온보딩 단순화
|
|
|
|
## 위험 요소
|
|
|
|
- 대규모 파일 이동으로 인한 import 오류
|
|
- 기존 테스트 코드 수정 필요
|
|
- CI/CD 파이프라인 경로 업데이트
|
|
|
|
## 롤백 계획
|
|
|
|
- Git 브랜치별 단계적 작업
|
|
- 각 단계 완료 후 전체 테스트
|
|
- 문제 발생 시 이전 커밋으로 복원 |