대화 히스토리 저장소 선택
상태
승인
후보군
| 방안 | 설명 |
|---|---|
인메모리 (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) | 스키마 설계 및 쿼리 비용. 실시간 채팅 히스토리 조회에 적합하지 않음 |
트레이드 오프
- 득: 구현 단순. 외부 의존성 없음.
- 실: 서버 재시작 시 모든 대화 히스토리 초기화. 다중 인스턴스 환경에서 세션 공유 불가.