DOCS/journey/ideas/250914_rb8001_리팩토링_계획.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 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/*)
2025-11-17 14:06:05 +09:00

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파일 1역할: 200-400줄 유지
  2. 함수형 우선: 순수 함수, 부작용 최소화
  3. NO HARDCODING: config/settings.py만 참조
  4. 명확한 명명: service/manager/handler 금지
  5. HTTP 스킬: 외부 스킬은 HTTP로만

예상 효과

  • 코드 가독성 향상
  • 테스트 용이성 증대
  • 로빙 철학과 코드 구조 일치
  • 신규 개발자 온보딩 단순화

위험 요소

  • 대규모 파일 이동으로 인한 import 오류
  • 기존 테스트 코드 수정 필요
  • CI/CD 파이프라인 경로 업데이트

롤백 계획

  • Git 브랜치별 단계적 작업
  • 각 단계 완료 후 전체 테스트
  • 문제 발생 시 이전 커밋으로 복원