docs: rb8001 리팩토링 계획 - 로빙 철학 기반 구조 개선
This commit is contained in:
parent
2b67c1ebb3
commit
f3e494a267
128
ideas/250914_rb8001_리팩토링_계획.md
Normal file
128
ideas/250914_rb8001_리팩토링_계획.md
Normal file
@ -0,0 +1,128 @@
|
||||
# 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 브랜치별 단계적 작업
|
||||
- 각 단계 완료 후 전체 테스트
|
||||
- 문제 발생 시 이전 커밋으로 복원
|
||||
Loading…
x
Reference in New Issue
Block a user