- 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/*)
4.4 KiB
4.4 KiB
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역할: 200-400줄 유지
- 함수형 우선: 순수 함수, 부작용 최소화
- NO HARDCODING: config/settings.py만 참조
- 명확한 명명: service/manager/handler 금지
- HTTP 스킬: 외부 스킬은 HTTP로만
예상 효과
- 코드 가독성 향상
- 테스트 용이성 증대
- 로빙 철학과 코드 구조 일치
- 신규 개발자 온보딩 단순화
위험 요소
- 대규모 파일 이동으로 인한 import 오류
- 기존 테스트 코드 수정 필요
- CI/CD 파이프라인 경로 업데이트
롤백 계획
- Git 브랜치별 단계적 작업
- 각 단계 완료 후 전체 테스트
- 문제 발생 시 이전 커밋으로 복원