# 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 브랜치별 단계적 작업 - 각 단계 완료 후 전체 테스트 - 문제 발생 시 이전 커밋으로 복원