[bug] LLM 호출 기록 실패 시 성공한 채팅이 error 이벤트로 끝남
name: Bug Report
labels: 'Type : Bug'
버그 내용
LLM 호출 기록(llm_call_logs)이 실패하면, 성공한 채팅이 error 이벤트로 바뀐다.
발생 상황
-
POST /api/chat스트리밍이 정상 종료되어done단계에서 호출 기록을 남길 때 - 기록이 제약 위반 등으로 실패하는 경우 (예: 제공자가 모델명을 주지 않고 설정값도 비어
model이 null)
실제 결과
-
LlmCallLogger.record()가try/catch로 감싸져 있는데도 예외가 호출자에게 전파된다 - 응답은 이미 정상 생성됐는데 사용자에게는
error이벤트가 내려간다 - 원인:
save()의 INSERT 가 커밋까지 미뤄져(PK 를 자바에서 생성) 제약 위반이 메서드를 빠져나간 뒤 터진다. 같은 빈 안의catch로는 잡을 수 없다 -
saveAndFlush로 바꿔도 부족하다 — flush 실패로 트랜잭션이 롤백 표시되고 커밋 시점에 다시 예외가 난다
추가 정보
- 재현 로그 PROBE 예외 탈출: DataIntegrityViolationException Caused by: ERROR: null value in column "model" of relation "llm_call_logs" violates not-null constraint
- 해결: 트랜잭션 경계를 빈으로 분리한다
-
LlmCallLogWriter—@Transactional(REQUIRES_NEW)로 쓰기만 담당 -
LlmCallLogger— 프록시 호출 후 예외를 삼킨다 (커밋까지write()안에서 끝남) - 회귀 테스트는 #10 에 포함 (
LlmCallLoggerTest) - 관련: #9 (closed)