DOCS/plans/250901_rb8001_chat_history_implementation_plan.md
happybell80 5e99456a76 docs: 대화 히스토리를 PostgreSQL 전용으로 변경
- ChromaDB 대신 PostgreSQL conversation_logs 테이블만 사용
- SQL 쿼리 예시 추가
- 현재 대화 저장 필수 명시
2025-09-01 22:05:52 +09:00

3.1 KiB

rb8001 카톡 스타일 대화 히스토리 구현 계획

작성일: 2025-09-01

대상: rb8001 (프로덕션 로빙)

참조: rb10508_micro 구현 코드

수정: PostgreSQL 전용 히스토리 구현으로 변경


현재 상태 분석

  • rb10508_micro: /api/config 엔드포인트 구현됨 (endpoints.py:407)
  • rb8001:
    • database.py: ConversationLog 모델 있음 (line 52)
    • get_recent_conversations() 함수 있음 (line 81)
    • get_paginated_conversations() 함수 없음 (추가 필요)
    • main.py: @app.get() 직접 사용, router 분리 없음

수정 필요 파일

백엔드 (rb8001)

  1. app/core/config.py - 환경변수 추가 (MESSAGE_BATCH_SIZE=30, MAX_MESSAGES_IN_DOM=200)
  2. app/state/database.py - get_paginated_conversations() 함수 추가
    • PostgreSQL conversation_logs 테이블에서만 조회
    • ChromaDB 사용하지 않음 (히스토리는 DB만)
  3. main.py - @app.get() 직접 추가 (/api/config, /api/messages)
  4. .env 파일 - 환경변수 설정 (docker-compose.yml 아님)

프론트엔드 (frontend-customer)

  1. src/services/robeing-api.ts - getConfig(), getMessages() 함수 추가
  2. src/components/chat-interface.tsx - 무한 스크롤, 날짜 구분선 구현

API 스펙

// GET /api/config
{ message_batch_size: 30, max_messages_in_dom: 200 }

// GET /api/messages?before={timestamp}&limit=30
{ 
  messages: [...],  // PostgreSQL conversation_logs에서 조회
  has_more: true 
}

PostgreSQL 쿼리 예시

SELECT id, message, response, timestamp, user_id 
FROM conversation_logs 
WHERE user_id = $1 
  AND robeing_id = 'rb8001'
  AND timestamp < $2
ORDER BY timestamp DESC 
LIMIT 30;

데이터베이스 스키마

-- conversation_logs 테이블 (실제)
CREATE TABLE conversation_logs (
    id INTEGER PRIMARY KEY (auto-increment),
    robeing_id VARCHAR,
    channel_id VARCHAR,
    message VARCHAR,
    response VARCHAR,
    intent VARCHAR,
    confidence DOUBLE PRECISION,
    timestamp TIMESTAMP,
    user_id UUID (FK  users),
    slack_user_id VARCHAR(100),
    thread_ts VARCHAR(128),
    channel_type VARCHAR(32)
);

주의사항

API 경로

# main.py에 직접 추가 (rb8001은 router 분리 없음)
@app.get("/api/config")
@app.get("/api/messages")

rb10508_micro 참조 코드

# rb10508_micro/app/config.py:101-103
MESSAGE_BATCH_SIZE: int = int(os.getenv("MESSAGE_BATCH_SIZE", 30))
SCROLL_THRESHOLD: int = int(os.getenv("SCROLL_THRESHOLD", 100))
MAX_MESSAGES_IN_DOM: int = int(os.getenv("MAX_MESSAGES_IN_DOM", 200))

구현 순서

  1. 백엔드 API 추가 (1시간)
    • config.py 환경변수 추가
    • database.py에 get_paginated_conversations() 구현 (PostgreSQL 전용)
    • main.py에 엔드포인트 직접 추가
    • 현재 대화는 save_conversation()으로 PostgreSQL에 저장 필수
  2. 프론트엔드 통합 (1시간)
    • robeing-api.ts 함수 추가
    • chat-interface.tsx 무한 스크롤 구현
  3. 테스트 및 배포 (30분)
    • curl localhost:8001/api/config 테스트
    • 51124 서버 docker compose down && up -d --build