Description Overview
요약 생성과 AI 동기화는 프로덕션 핵심 플로우인데, 현재 실패 처리 방식은 운영 개입에 많이 의존한다.
로그를 보면 재시도는 있지만, 자동 복구와 운영용 제어면은 부족하다.
Details
LinkSyncEventListener 는 실패 시 [CRITICAL] ... 수동 복구 필요 로그를 남긴다.
SummaryWorker 는 AI 서버 실패 시 최대 3번 재시도 후 FAILED 로 종료한다.
실제 로그에 아래 케이스가 있다.
2026-06-09: CREATE 동기화 최종 실패가 여러 건 발생
2026-06-10: UPDATE 동기화 최종 실패가 반복 발생
2026-06-15: 링크 459, 460 의 초기 요약 요청 실패 후 최종 실패
로그 스레드명이 SimpleAsyncTaskExecutor-* 로 찍혀 @Async 작업이 기본 executor 에 의존하고 있음을 보여준다.
작업 내용
@Async 전용 bounded ThreadPoolTaskExecutor 를 명시적으로 설정한다.
큐 크기, rejection policy, thread name prefix, MDC 전파를 설계한다.
AI 연동 실패를 null 반환보다 typed exception 과 명시적 상태 전이로 다룬다.
외부 API 실패 로그에는 최소한 아래 필드를 구조화해 남긴다.
target=ai-server
method
status
attempt
durationMs
errorCode
최종 실패 건을 재처리 가능한 dead-letter 또는 운영 큐에 적재한다.
운영 알림 채널을 추가한다.
Slack
PagerDuty 또는 현재 사용 중인 알림 시스템
링크 단위 재시도/복구용 운영 도구나 admin endpoint 를 둔다.
외부 AI 호출에는 timeout, circuit breaker, 실패율 모니터링을 붙인다.
Expected Outcome
일시적 AI 장애가 곧바로 수동 복구 이슈로 번지지 않는다.
최종 실패 건의 수, 원인, 재처리 상태를 운영자가 추적할 수 있다.
외부 API 오류가 null 이나 후행 NPE 로 흐려지지 않고, 원인 그대로 관찰된다.
Reactions are currently unavailable
You can’t perform that action at this time.
Overview
Details
LinkSyncEventListener는 실패 시[CRITICAL] ... 수동 복구 필요로그를 남긴다.SummaryWorker는 AI 서버 실패 시 최대 3번 재시도 후FAILED로 종료한다.2026-06-09:CREATE동기화 최종 실패가 여러 건 발생2026-06-10:UPDATE동기화 최종 실패가 반복 발생2026-06-15: 링크459,460의 초기 요약 요청 실패 후 최종 실패SimpleAsyncTaskExecutor-*로 찍혀@Async작업이 기본 executor 에 의존하고 있음을 보여준다.작업 내용
@Async전용 boundedThreadPoolTaskExecutor를 명시적으로 설정한다.null반환보다 typed exception 과 명시적 상태 전이로 다룬다.target=ai-servermethodstatusattemptdurationMserrorCodeExpected Outcome
null이나 후행 NPE 로 흐려지지 않고, 원인 그대로 관찰된다.