대화 히스토리 영속성:
AIConversation 엔티티: 사용자와 AI 간의 대화(프롬프트, 응답, 대화 유형 등)를 저장하기 위한 엔티티를 설계했습니다.AIConversationService: AIService에서 AI 응답이 성공적으로 생성된 후, 이 서비스를 호출하여 대화 내용을 DB에 영속적으로 저장하는 로직을 추가했습니다. 이를 통해 사용자는 과거 대화 기록을 언제든지 다시 조회할 수 있게 되었습니다.API 레이트 리미터 (Rate Limiter):
HandlerInterceptor를 사용하여 API 컨트롤러가 실행되기 전에 요청을 가로챘습니다. RateLimiterService는 인메모리 캐시(e.g., Caffeine, Guava) 등을 활용하여 사용자별 요청 횟수를 추적하고, 한도를 초과하면 RATE_LIMIT_EXCEEDED 에러를 발생시켜 요청을 차단했습니다.API 문서화 (Swagger / OpenAPI):
springdoc-openapi 의존성을 추가하고, 컨트롤러와 DTO에 @Operation, @Schema와 같은 어노테이션을 추가하여 각 API의 기능과 데이터 모델을 상세히 설명했습니다.대화 컨텍스트(Context) 유지:
aiService.js에서, 새로운 질문이 발생하면 Zustand 스토어에 저장된 최근 대화 기록을 바탕으로 간단한 컨텍스트 문자열을 생성하고, 이를 API 요청 본문에 포함시켜 서버로 전달했습니다. AIService는 이 컨텍스트를 프롬프트에 포함하여 AI에게 더 풍부한 맥락을 제공합니다.대화 히스토리 UI:
HistoryPanel, HistoryList, HistoryItem, HistoryDetail 등 대화 기록을 보여주는 UI를 여러 개의 전문화된 컴포넌트로 구현했습니다.GET /api/ai/conversations)를 호출하여 최근 대화 기록 목록을 불러옵니다.Zustand를 이용한 상태 관리 (useHistoryStore):
개발 환경용 테스트 토큰:
application-dev.yml)에서만 유효한 고정된 테스트용 JWT를 허용하도록 JwtAuthenticationFilter를 개선했습니다.토큰 사용량 추정:
아이콘 라이브러리 도입:
@heroicons/react와 같은 아이콘 라이브러리를 도입하여, 직관적이고 일관된 아이콘을 앱 전반에 사용했습니다.AIConversation 엔티티를 통해 AI 대화 기록을 DB에 영속적으로 저장하고, API 레이트 리미터를 도입하여 서비스 안정성을 확보했으며, Swagger를 통해 API 문서화를 자동화했습니다.