대화 히스토리 저장소 선택

상태

승인

후보군

방안설명
인메모리 (ConcurrentHashMap)sessionId → List<String> 구조로 JVM 힙에 유지. 각 대화 턴을 plain text로 누적해 claude -p 프롬프트에 주입
Redis분산 캐시로 세션 히스토리 영속화. TTL 설정 가능
RDB (MySQL)대화 히스토리를 DB에 영속화. 서버 재시작 후에도 유지

결정

ConcurrentHashMap<sessionId, List<String>> 인메모리 히스토리를 사용한다. 세션 ID는 FE에서 crypto.randomUUID()로 생성하고, 각 요청마다 히스토리를 시스템 프롬프트 형태로 prepend한다.

결정 이유

  • 단일 사용자 앱이므로 DB 영속화 불필요.
  • claude -p는 상태 비저장(stateless) subprocess이므로 히스토리를 프롬프트에 직접 포함하는 것이 가장 단순하다.
  • 서버 재시작 시 히스토리 초기화는 허용 가능한 트레이드오프다.

검토 대안

방안기각 이유
Redis인프라 추가 필요. 단일 사용자 규모에서 오버스펙
RDB (MySQL)스키마 설계 및 쿼리 비용. 실시간 채팅 히스토리 조회에 적합하지 않음

트레이드 오프

  • 득: 구현 단순. 외부 의존성 없음.
  • 실: 서버 재시작 시 모든 대화 히스토리 초기화. 다중 인스턴스 환경에서 세션 공유 불가.