음성 검사에서 “잇달아”가 걸렸다. 허용 CER은 0.50%였는데 결과는 3.79~5.30%였다. 첫 합성이 실패하자 캐시를 비켜 두 번째 테이크를 만들었다. 그래도 같은 문장 끝에서 다시 걸렸다.
문제는 바깥 파이프라인이었다. 안쪽 검사는 한 사건당 두 테이크로 끝내도록 만들었는데, 바깥 호출자가 종료코드만 보고 전체 단계를 세 번 다시 실행했다.
두 번 제한이 실제로는 여섯 번이 됐다
재시도 3회×테이크 2회로 같은 사건을 여섯 번 합성했다. 매번 “잇달아”의 같은 위치에서 실패했다. 약 11분을 쓰고도 결과는 같았다. 실패 원인이 바뀌지 않았는데 횟수만 늘어난 것이다.
더구나 이전 테이크 경로를 같은 이름으로 덮어써 앞선 증거도 사라질 수 있었다. 재시도가 복구가 아니라 비용과 증거 손실을 함께 만들었다.
콘텐츠 실패와 시스템 실패를 갈랐다
발음·문장처럼 입력이 같은 한 다시 나올 결정적 실패는 재시도하지 않게 했다. 같은 텍스트 해시, 음성 모델, 오류 구간, 편집 연산이 두 테이크에서 같으면 PERSISTENT_LEXICAL_FAILURE로 기록하고 해당 사건만 격리한다.
네트워크 오류, 서버 5xx, ASR 프로세스 크래시처럼 다음 시도에서 상태가 달라질 수 있는 시스템 오류만 제한적으로 다시 시도한다. 단순히 실패했다는 이유만으로 같은 일을 반복하지 않는다.
재발방지 체크리스트
① 안쪽 재시도 횟수와 바깥 재시도 횟수를 곱해 실제 최대 시도를 계산한다.
② 같은 입력·같은 오류 위치면 반복보다 전략 전환이나 격리를 선택한다.
③ 콘텐츠 판정 실패와 시스템 장애에 서로 다른 종료 상태를 준다.
④ 테이크는 실행·시도별 경로에 남겨 재시도가 증거를 덮지 않게 한다.
① 안쪽 재시도 횟수와 바깥 재시도 횟수를 곱해 실제 최대 시도를 계산한다.
② 같은 입력·같은 오류 위치면 반복보다 전략 전환이나 격리를 선택한다.
③ 콘텐츠 판정 실패와 시스템 장애에 서로 다른 종료 상태를 준다.
④ 테이크는 실행·시도별 경로에 남겨 재시도가 증거를 덮지 않게 한다.