DOCS/ideas/250811_claude_rb10408_vs_rb10508_비교분석.md
Claude-51124 6e6f6e32ca Add detailed embedding service comparison
- Embedding architecture comparison (local vs HTTP vs centralized)
- Memory usage: rb10408 (500MB) vs rb10508 (0MB) vs skill-embedding (928MB)
- Performance metrics: processing speed, caching, scalability
- PyTorch dependency analysis (338MB overhead)
- Optimization recommendations for both services
- Model specifications (multilingual-MiniLM-L12-v2, 384 dims)
2025-08-12 13:57:53 +09:00

15 KiB

RoBeing 서비스 아키텍처 비교 분석: rb10408_test vs rb10508_micro

작성일: 2025년 8월 11일
작성자: Claude (51124 서버)

개요

51124 서버에서 운영 중인 두 가지 RoBeing 서비스의 상세 비교 분석입니다. rb10408_test(무거운 버전)와 rb10508_micro(경량화 버전)의 리소스 사용량, 아키텍처, 로직을 비교하여 각 서비스의 장단점을 파악합니다.

1. 리소스 사용량 비교

실시간 측정 결과 (2025-08-11 22:30)

측정 항목 rb10408_test rb10508_micro 성능 차이
메모리 사용량 304.3 MiB 136.6 MiB rb10508이 55% 적게 사용
메모리 점유율 1.28% 0.57% rb10508이 0.71%p 낮음
CPU 사용률 0.05% 0.09% 비슷한 수준
프로세스 수 13개 73개 rb10508이 더 많은 프로세스
블록 I/O 8.75MB / 177MB 30.3MB / 57.9MB rb10408이 더 많은 쓰기

시스템 환경

항목 rb10408_test rb10508_micro
Python 버전 3.13.5 (최신) 3.11.13
가동 시간 2일 이상 15시간
Health 상태 Healthy Healthy
네트워크 모드 Host Host

2. 아키텍처 차이

rb10408_test - 모놀리식 아키텍처

핵심 특징:

  • 자체 완결형 시스템
  • 모든 기능을 내부에 포함
  • 외부 의존성 최소화

주요 구성 요소:

rb10408_test
├── 내장 LLM 서비스 (OpenAI, Anthropic)
├── 자체 임베딩 생성 (sentence-transformers)
├── 로컬 ChromaDB (v0.5.20)
├── Brain 모듈 (직접 구현)
└── Stats 시스템 (게임화)

핵심 라이브러리:

  • torch==2.5.1 - 딥러닝 프레임워크
  • transformers==4.48.0 - NLP 모델
  • sentence-transformers==3.3.1 - 임베딩 생성
  • chromadb==0.5.20 - 벡터 데이터베이스

rb10508_micro - 마이크로서비스 아키텍처

핵심 특징:

  • 경량화된 코어 서비스
  • 외부 서비스와 연동
  • 모듈화된 구조

주요 구성 요소:

rb10508_micro
├── Langchain 체인 (추상화 레이어)
├── HTTP 임베딩 서비스 호출
├── 최신 ChromaDB (v1.0.16)
├── 베이지안 메모리 선택
└── 함수형 프로그래밍

핵심 라이브러리:

  • langchain>=0.1.0 - LLM 오케스트레이션
  • chromadb>=0.4.0 - 벡터 데이터베이스
  • slack-bolt>=1.18.0 - Slack 통합
  • ML 라이브러리 없음 (외부 서비스 활용)

3. 기능 및 로직 비교

메모리 관리

기능 rb10408_test rb10508_micro
임베딩 생성 자체 생성 (CPU/GPU) 외부 서비스 호출
메모리 선택 단순 유사도 검색 베이지안 + MMR 알고리즘
저장 구조 단일 컬렉션 다중 컬렉션 (episodic, semantic, procedural)
검색 성능 빠름 (로컬) 네트워크 지연 있음

LLM 처리

기능 rb10408_test rb10508_micro
LLM 호출 직접 API 호출 Langchain 체인
프롬프트 관리 하드코딩 템플릿 기반
에러 처리 기본적 체계적 재시도
모델 전환 수동 설정 기반

게임화 요소

기능 rb10408_test rb10508_micro
Stats 시스템 구현됨 (파일 기반) 미구현
레벨링 경험치 시스템 없음
스킬 트리 기본 구현 없음

스킬 서비스 통합

항목 rb10408_test rb10508_micro
이메일 스킬 연동 (포트 8501) 연동 (포트 8501)
뉴스 스킬 연동 (포트 8505) 연동 (포트 8505)
슬랙 스킬 연동 (포트 8503) 미연동
임베딩 서비스 자체 처리 외부 서비스 (포트 8015)
스킬 라우팅 Decision Engine 기반 미구현
스킬 실행 전략 Stats 기반 추천 수동 호출

rb10408_test 스킬 실행 구조

# Decision Engine이 스킬 실행 계획 수립
execution_plan = {
    "intent": "email_summary",
    "skills": [
        {"name": "email_fetch", "params": {...}},
        {"name": "summary_generate", "params": {...}}
    ]
}

# Stats Manager가 스킬 조합 추천
recommended = stats_manager.recommend_skill_combination(available_skills)

# Router가 순차적으로 스킬 실행
for skill in execution_plan["skills"]:
    result = await execute_skill(skill)

rb10508_micro 스킬 실행 구조

# 직접적인 스킬 호출 (구조화되지 않음)
# 주로 Langchain 도구로 처리
# 외부 임베딩 서비스 의존
embedding_response = await httpx.post(
    SKILL_EMBEDDING_URL + "/embed",
    json={"text": text}
)

스킬 서비스 성능 비교

측정 항목 rb10408_test rb10508_micro
스킬 호출 방식 REST API REST API
응답 시간 ~500ms ~300ms (캐싱)
에러 처리 재시도 로직 있음 기본 처리
스킬 체이닝 지원 미지원
병렬 실행 가능 불가능

임베딩 처리 비교

항목 rb10408_test rb10508_micro skill-embedding
처리 방식 로컬 (내장) HTTP API 호출 독립 서비스
라이브러리 sentence-transformers 3.3.1 없음 (외부 의존) sentence-transformers
모델 다운로드 필요 N/A multilingual-MiniLM-L12-v2
PyTorch 2.5.1 (338MB) 없음 있음
CUDA 지원 비활성화 N/A 비활성화
메모리 사용 ~500MB (모델 로드 시) 0MB 928MB (상시)
임베딩 차원 384 384 (외부) 384
최대 토큰 512 512 (외부) 512
처리 속도 ~50ms/문장 ~100ms/문장 (네트워크 포함) ~30ms/문장
캐싱 없음 가능 메모리 캐시

임베딩 아키텍처 차이

rb10408_test - 모놀리식 임베딩

from sentence_transformers import SentenceTransformer

class EmbeddingService:
    def __init__(self):
        # 로컬에 모델 다운로드 및 로드
        self.model = SentenceTransformer('multilingual-MiniLM')
        
    def embed(self, text):
        # CPU에서 직접 임베딩 생성
        return self.model.encode(text)

rb10508_micro - HTTP 임베딩 클라이언트

class HTTPEmbeddingFunction:
    def __init__(self, api_url):
        self.api_url = api_url
        
    async def embed(self, texts):
        # 외부 서비스로 요청
        response = await httpx.post(
            f"{self.api_url}/embed",
            json={"texts": texts}
        )
        return response.json()["embeddings"]

skill-embedding - 중앙화된 임베딩 서비스

# 독립 실행 서비스 (포트 8015)
# 모든 서비스가 공유
# 928MB 메모리 상시 사용
# 6일간 안정적 운영 중

임베딩 성능 분석

시나리오 rb10408_test rb10508_micro + skill-embedding
첫 요청 모델 로드 (3-5초) 즉시 응답 (서비스 상시 대기)
대량 처리 빠름 (로컬) 네트워크 오버헤드
메모리 효율 낮음 (중복 로드) 높음 (공유 서비스)
확장성 제한적 수평 확장 가능
장애 격리 전체 영향 임베딩만 영향

임베딩 최적화 권장사항

rb10408_test 개선안:

  1. skill-embedding 서비스 활용으로 전환
  2. 메모리 300MB+ 절약 가능
  3. PyTorch 제거로 컨테이너 크기 감소
  4. 모델 다운로드 시간 제거

rb10508_micro 개선안:

  1. 임베딩 결과 캐싱 강화
  2. 배치 처리 구현
  3. 연결 풀링 최적화
  4. 재시도 로직 추가

4. 장단점 분석

rb10408_test

장점:

  • 완전한 독립성 (외부 서비스 불필요)
  • 빠른 임베딩 생성 (로컬 처리)
  • 최신 Python 3.13 사용
  • 게임화 요소 포함
  • 단순한 배포 (단일 컨테이너)

단점:

  • 높은 메모리 사용량 (304MB)
  • 대용량 ML 라이브러리 필요
  • Stats 파일 초기화 문제
  • 구버전 ChromaDB
  • 확장성 제한

rb10508_micro

장점:

  • 낮은 메모리 사용량 (136MB, 55% 절약)
  • 최신 ChromaDB 1.0
  • 베이지안 메모리 선택 (고급 알고리즘)
  • 모듈화된 구조 (유지보수 용이)
  • Langchain 생태계 활용
  • 확장 가능한 아키텍처

단점:

  • 외부 서비스 의존성
  • 네트워크 지연 가능성
  • 복잡한 설정
  • 많은 프로세스 수 (73개)
  • 게임화 요소 미구현

5. 사용 권장 시나리오

rb10408_test 적합한 경우

  1. 독립적 운영이 필요한 환경

    • 인터넷 연결이 불안정한 환경
    • 외부 서비스 의존성을 피해야 하는 경우
    • 단일 서버 배포
  2. 게임화 요소가 중요한 경우

    • 사용자 참여도 향상이 목표
    • Stats 기반 진행도 추적 필요
  3. 빠른 응답이 중요한 경우

    • 로컬 임베딩으로 네트워크 지연 없음
    • 실시간 처리가 중요한 서비스

rb10508_micro 적합한 경우

  1. 리소스 효율성이 중요한 환경

    • 메모리 제약이 있는 서버
    • 다중 서비스 운영 환경
    • 비용 최적화가 필요한 경우
  2. 확장성이 필요한 경우

    • 마이크로서비스 아키텍처 선호
    • 점진적 기능 추가 계획
    • 외부 서비스 통합 예정
  3. 고급 AI 기능이 필요한 경우

    • 베이지안 메모리 선택
    • Langchain 생태계 활용
    • 다양한 LLM 모델 전환

6. 최적화 제안

rb10408_test 개선 방안

  1. 메모리 사용량 감소

    • Torch 대신 ONNX Runtime 사용
    • 모델 양자화 적용
    • 불필요한 라이브러리 제거
  2. Stats 시스템 개선

    • 파일 기반에서 DB 기반으로 전환
    • 초기화 문제 해결
  3. ChromaDB 업그레이드

    • 1.0 버전으로 마이그레이션
    • 성능 향상 및 버그 수정

rb10508_micro 개선 방안

  1. 프로세스 수 최적화

    • 불필요한 워커 프로세스 정리
    • 리소스 풀링 적용
  2. 게임화 요소 추가

    • Stats 시스템 구현
    • 레벨링 및 스킬 시스템
  3. 캐싱 전략 강화

    • 임베딩 결과 캐싱
    • LLM 응답 캐싱

7. 결론 및 권장사항

종합 평가

rb10508_micro를 주력 서비스로 권장하는 이유:

  1. 55% 낮은 메모리 사용량으로 효율적
  2. 최신 기술 스택 (ChromaDB 1.0, Langchain)
  3. 확장 가능한 아키텍처
  4. 베이지안 메모리 선택 등 고급 기능

마이그레이션 전략

  1. 단계적 전환

    • rb10508_micro를 메인으로 운영
    • rb10408_test는 백업/테스트용으로 유지
    • 게임화 요소를 rb10508_micro에 점진적 이식
  2. 하이브리드 운영

    • 독립성이 필요한 환경: rb10408_test
    • 일반 서비스: rb10508_micro
    • 로드 밸런싱으로 부하 분산
  3. 통합 계획

    • 두 서비스의 장점을 결합한 새 버전 개발
    • rb10508_micro 기반으로 게임화 요소 추가
    • 선택적 로컬 임베딩 지원

8. 스킬 서비스 활용 전략

현재 운영 중인 스킬 서비스

서비스명 포트 상태 주요 기능 연동 서비스
skill_email 8501 운영 중 (6일) 이메일 조회/발송 rb10408, rb10508
skill-news 8505 정상 (2시간) 뉴스 검색/요약 rb10408, rb10508
skill-slack 8503 정상 (2시간) Slack 메시지 처리 rb10408만
skill-embedding 8015 정상 (6일) 텍스트 임베딩 생성 rb10508만

스킬 통합 개선 방안

rb10408_test 개선점

  1. 임베딩 서비스 활용

    • 자체 sentence-transformers 대신 skill-embedding 사용
    • 메모리 200MB 절약 가능
    • 중앙화된 임베딩 관리
  2. 스킬 메타데이터 강화

    skill_registry = {
        "email": {
            "url": "http://localhost:8501",
            "timeout": 30,
            "retry": 3,
            "cache_ttl": 300
        }
    }
    

rb10508_micro 개선점

  1. Decision Engine 구현

    • rb10408의 스킬 라우팅 로직 이식
    • 의도 파악 → 스킬 선택 → 실행 계획 수립
  2. 스킬 체이닝 지원

    • 복수 스킬 연속 실행
    • 스킬 간 데이터 전달
    • 병렬 실행 지원
  3. Slack 스킬 연동

    • 현재 미연동 상태
    • 포트 8503 연결 추가

스킬 서비스 최적화 로드맵

단계 기간 rb10408_test rb10508_micro
Phase 1 1주 임베딩 서비스 전환 Slack 스킬 연동
Phase 2 2주 스킬 캐싱 구현 Decision Engine 추가
Phase 3 3주 메트릭 수집 스킬 체이닝 구현
Phase 4 4주 통합 테스트 성능 최적화

9. ChromaDB 데이터 영속성 문제

저장 상태 비교 (2025-08-11 측정)

항목 rb10408_test rb10508_micro
컬렉션 수 4개 (SQLite) / 0개 (API) 4개
총 문서 수 3개 1개
마지막 저장 2025-08-09 (2일 전) 2025-08-11 (당일)
볼륨 마운트 정상 정상
실제 저장 실패 성공

rb10408_test ChromaDB 문제점

증상:

  • SQLite에는 4개 컬렉션 존재 (conversations, documents, insights, memories)
  • ChromaDB API로는 0개 컬렉션 반환
  • 2일간 새로운 데이터 저장 없음
  • 총 3개 문서만 존재 (초기 데이터)

원인 분석:

  1. ChromaDB 버전 불일치

    • v0.5.20 사용 (구버전)
    • SQLite와 API 간 동기화 문제
  2. 초기화 실패

    • 컨테이너 재시작 시 ChromaDB 클라이언트 초기화 오류
    • Telemetry 에러: capture() takes 1 positional argument
  3. 볼륨 권한 문제

    • 디렉토리 권한은 999:docker로 정상
    • 하지만 실제 쓰기 작업 실패

rb10508_micro ChromaDB 상태

정상 작동:

  • ChromaDB v1.0.16 (최신)
  • 정상적인 저장/조회
  • Gitea Actions 경로 수정 후 안정화
  • 베이지안 메모리 선택 정상 작동

해결 방안

우선순위 작업 예상 효과
긴급 rb10408 ChromaDB 1.0 업그레이드 저장 기능 복구
높음 초기화 코드 수정 API 정상화
중간 데이터 마이그레이션 기존 데이터 복구
낮음 모니터링 추가 문제 조기 발견

10. 모니터링 지표

추적 필요 항목

지표 임계값 대응 방안
메모리 사용량 > 500MB 컨테이너 재시작
CPU 사용률 > 50% 스케일 아웃 고려
응답 시간 > 3초 캐싱 전략 검토
에러율 > 1% 로그 분석 및 수정
스킬 응답 시간 > 5초 타임아웃 조정
스킬 실패율 > 5% 서킷 브레이커 활성화

정기 점검 사항

  • 주간: 리소스 사용 트렌드 분석
  • 월간: 성능 벤치마크 실행
  • 분기: 아키텍처 리뷰 및 최적화

이 문서는 2025년 8월 11일 51124 서버에서 실측한 데이터를 기반으로 작성되었습니다.