배경
PR #134 (feat/chat-category) 리뷰 중 ChatMessage.category 필드가 자유 문자열(String)로 관리되고 있어, 오타·대소문자·공백 차이 등으로 통계 버킷이 오염될 수 있다는 문제가 제기되었습니다.
문제 상황
현재 category 필드는 String 타입으로, FastAPI가 어떤 문자열을 전달하느냐에 따라 DB에 그대로 저장됩니다.
통계 집계 시 DIRECTION / direction / Direction 등이 서로 다른 버킷으로 취급될 위험이 있습니다.
선택지
Case 1: FastAPI에서 카테고리를 고정적으로 전달하는 경우
- Java 쪽:
enum ChatCategory { DIRECTION, INFORMATION, OPERATION, SMALLTALK, GENERAL, ERROR } 생성 후 @Enumerated(EnumType.STRING) 적용
- FastAPI 쪽: 동일한 값 집합을
Enum으로 관리
- 카테고리 추가·변경 시 양쪽 동기화 필요
Case 2: FastAPI에서 카테고리를 동적으로 전달하는 경우
String 필드 유지
- 저장 경계에서
normalizeCategory() 정규화 로직 적용 (알 수 없는 값 → GENERAL fallback)
액션 아이템
배경
PR #134 (feat/chat-category) 리뷰 중
ChatMessage.category필드가 자유 문자열(String)로 관리되고 있어, 오타·대소문자·공백 차이 등으로 통계 버킷이 오염될 수 있다는 문제가 제기되었습니다.문제 상황
현재
category필드는String타입으로, FastAPI가 어떤 문자열을 전달하느냐에 따라 DB에 그대로 저장됩니다.통계 집계 시
DIRECTION/direction/Direction등이 서로 다른 버킷으로 취급될 위험이 있습니다.선택지
Case 1: FastAPI에서 카테고리를 고정적으로 전달하는 경우
enum ChatCategory { DIRECTION, INFORMATION, OPERATION, SMALLTALK, GENERAL, ERROR }생성 후@Enumerated(EnumType.STRING)적용Enum으로 관리Case 2: FastAPI에서 카테고리를 동적으로 전달하는 경우
String필드 유지normalizeCategory()정규화 로직 적용 (알 수 없는 값 →GENERALfallback)액션 아이템