
부제: 요약 시각을 미리 채웠다가 영영 요약 안 되는 스레드를 만들 뻔한 이야기
대화가 한동안 조용하면(idle), 뒤에서 그 대화를 미리 요약해 둔다.
다음에 이어질 대화를 위해서다. 주기적으로 스캔해 "요약이 필요한 스레드"를 찾는다.
"이 스레드가 스캔 대상인가"를 판정하려면 각 스레드의 "마지막 요약 시각"이 필요하다.
그런데 기존 스레드엔 이 값이 없었다. 이걸 어떻게 채우느냐가 문제였다.
빈 값을 그럴듯하게 채우려다
편한 길이 있었다.
마지막 요약 시각을 그냥 "마지막 메시지 시각"으로 채워 넣는(백필) 것이다.
값이 비어 있으면 처리하기 번거로우니, 그럴듯한 값으로 메우자는 발상이다.
이게 함정이었다.
그렇게 채우면, 이미 요약된 뒤에도 메시지가 쌓인 스레드가 문제가 된다.
그런 스레드는 "마지막 요약 시각 == 마지막 메시지 시각"으로 보인다.
스캐너 눈엔 "요약 이후 새 메시지가 없는, 처리할 필요 없는 스레드"로 찍힌다.
정작 요약이 필요한데 스캔 대상에서 영영 빠지는 것이다.
모르는 건 NULL로 두고 첫 판정에 맡긴다
그래서 백필하지 않기로 했다.
값을 NULL로 두고, 첫 스캔에서 정밀 판정 로직에 맡긴다.
첫 스캔만 대화 기록을 불러오는 비용이 크지만, 그건 일회성이다.
그리고 쿨다운이 불필요한 재처리를 막아 준다.
곁들여 반복 실패도 막았다.
같은 스레드가 (안전 필터 위반 같은) 같은 이유로 3번 넘게 실패하면,
24시간 장기 쿨다운을 걸고, 성공하면 카운터를 리셋한다.
같은 원인으로 무한히 재시도하며 자원을 태우는 걸 막는다.
정리
- 선제 요약 스캔은 "마지막 요약 시각"으로 대상을 판정하는데, 기존 스레드엔 그 값이 없었다
- 마지막 메시지 시각으로 백필하면, 요약 이후 메시지가 쌓인 스레드가 영구히 스캔에서 제외된다
- 백필 대신 NULL로 두고 첫 스캔의 정밀 판정에 맡김(첫 스캔 비용은 일회성, 쿨다운이 재처리 방지)
- 반복 실패는 3회 초과 시 24시간 쿨다운 + 성공 시 리셋으로 방어
빈 값을 그럴듯한 값으로 백필하는 게 편해 보여도, 그 값이 판정 기준이면 조용히 잘못된 상태를 만든다.
모르는 건 NULL로 두고 첫 판정에 맡기는 게 안전할 때가 있다.
'AI' 카테고리의 다른 글
| [RAG] OCR 대신 LLM — 서버보다 API 호출이 쌌다 (1) | 2026.08.05 |
|---|---|
| [에이전트] 좌표 없이 장소를 찾는다 — 위치정보법이 막은 GPS, 지명 하나로 풀어간 경로 (0) | 2026.08.05 |
| [메모리] 내부 신호와 대화 노출 분리 category tags 직렬화 제외 (0) | 2026.08.04 |
| [에이전트] LLM 카드 플래그 없는 설계 환각 방지 서버 계산 (0) | 2026.08.02 |
| [동시성] 락 대기가 클라이언트 타임아웃보다 길면 안 되는 이유 (0) | 2026.08.02 |