생성 모델의 자동 재시도를 껐더니 14분이 80초가 됐습니다
자사 영상 콘텐츠 프로젝트의 제작 도구는 대본 한 편을 받아 인물 시트, 장면 그림, 목소리, 자막을 순서대로 만듭니다. 그림은 만들 때마다 자동 검사기가 한 번 봅니다. 인물이 요구한 나이대인지, 등장 인원 수가 맞는지, 그림 안에 글자가 끼어들지 않았는지를 봅니다.
검사에 떨어지면 도구가 알아서 다시 만들도록 돼 있었습니다. 사람 손이 덜 가게 하려고 붙인 층이었습니다. 그 층이 실제로 무슨 일을 하는지는 인물 시트 한 장에서 그대로 드러났습니다.
같은 프롬프트로 세 번 만들었고, 매번 같은 방향으로 어긋났습니다
한 인물의 시트가 같은 프롬프트로 세 번 연속 검사에서 떨어졌습니다. 전신은 70대로 나왔고 얼굴은 30대로 나왔습니다. 세 번 다 어긋나는 방향이 같았습니다. 그 세 번에 쓴 것은 14분과 $0.09 이고, 얻은 결과물은 없습니다.
프롬프트 문장을 고치고 이미지 모델을 바꿔(나노바나나 → GPT 이미지 2.5) 다시 만들자 한 번에 통과했습니다. 다섯 시점 전부 60대로 나왔고, 장당 $0.03 과 80초가 들었습니다. 세 번을 굴려서 못 얻은 것을 문장 한 줄 고쳐서 얻은 셈입니다.
여기서 자동 재시도의 성질이 보입니다. 같은 입력으로 다시 부르는 것은 같은 분포에서 표본을 한 번 더 뽑는 일입니다. 주사위를 다시 굴리면 눈은 바뀌지만 기대값은 그대로입니다. 통과율이 0 에 가까운 원인이 지시의 결함이라면, 시도 횟수를 늘려도 기대값은 오르지 않고 시간과 비용만 횟수에 비례해 늡니다.

재시도가 값을 하는 실패와 안 하는 실패는 다릅니다
그때까지 도구는 모든 실패를 한 층에서 똑같이 다뤘습니다. 떨어지면 다시 만들었습니다. 그런데 같은 도구에서 작업이 도는 중에 프로세스 사이의 연결이 끊겨, 그림도 검사도 멀쩡한 결과가 검사 창구 오류로 빨간불이 된 적이 있습니다. 이 실패는 입력 문제가 아니라 배관 문제라서 다시 시도하면 됩니다. 두 실패를 한 층에서 뭉뚱그리면 둘 다 잘못 다루게 됩니다.
실패의 종류 | 같은 입력으로 다시 하면 | 어떻게 다루나 |
|---|---|---|
전송·연결 실패 (타임아웃, 연결 끊김, 일시적 5xx) | 될 수도 있다 — 원인이 입력 밖에 있다 | 자동으로 다시 시도한다 |
판정 실패 (나이대 불일치, 인원 수 초과, 글자 끼어듦) | 같은 분포에서 다시 뽑는다 | 멈추고 사람에게 사유를 보여준다 |
그래서 자동 재시도 횟수의 기본값을 1로 내렸습니다. 판정에서 떨어지면 다시 만들지 않고, 탈락 사유를 화면 카드에 그대로 표시합니다. 어떤 나이대가 나왔는지, 인원이 몇 명으로 세어졌는지, 글자가 걸렸는지를 목록으로 보여줍니다.
끄기만 하면 불편해지고 끝납니다
자동 재시도를 끄는 결정에는 조건이 하나 붙습니다. 그냥 끄면 사람이 할 일만 늘어납니다. 전에는 기다리면 알아서 되던 것이 이제는 사람이 들여다봐야 하는 일이 되기 때문입니다. 끄면서 두 가지를 같이 줘야 성립합니다.
왜 떨어졌는지 — 탈락 사유를 추측하지 않고 읽을 수 있게 카드에 그대로 표시한다
어디를 고치는지 — 인물의 외모·평소 표정 문장을 화면에서 바로 고쳐 저장할 수 있게 한다
고친 것이 반영되는 경로 — 문장을 저장하면 그 시트가 '낡음' 상태가 되고, 다시 만들 때 새 문장으로 그린다
비용 쪽 문턱도 같이 정했습니다. 한 건에 $0.05 이하는 확인창 없이 바로 실행합니다. 사람이 판단해야 할 자리를 늘린 만큼, 판단할 필요가 없는 자리에서는 묻지 않게 해야 전체 속도가 유지됩니다.

느린 것과 실패하는 것은 다른 손잡이입니다
재시도를 끄기로 하면서 한 가지가 걸렸습니다. 전체가 느려지지 않느냐는 것입니다. 그런데 느렸던 이유를 다시 보니 한 장이 여러 번 떨어져서가 아니었습니다. 여러 장을 하나씩 순서대로 만들고 있었기 때문입니다. 이 둘은 축이 다릅니다.
그래서 속도는 동시 생성 수를 3으로 올려서 따로 벌었습니다. 인물 시트 6명을 만드는 데 순차로는 18분이 걸렸고, 동시 생성 3으로는 7분 12초가 걸렸습니다. 그 6장은 전부 한 번에 통과했습니다. 처리량은 동시 실행으로, 품질은 지시 수정으로 가져가는 쪽이 둘을 한 손잡이에 묶는 것보다 간단했습니다.
실패가 보이기 시작하자 검사기가 틀렸다는 것도 드러났습니다
자동 재시도를 끄고 얻은 것 중에 예상하지 못한 것이 하나 있습니다. 탈락 사유를 사람이 매번 보게 되니, 검사기 자체가 이상하다는 것이 눈에 들어왔습니다. 검사 문구에 '사실적이면 탈락'이라고 적혀 있었습니다. 그 문구 때문에 채색이 두터운 그림까지 걸러졌습니다. 6장 중 2장이 그렇게 떨어졌고, 사람 눈으로 보면 아무 문제가 없는 그림이었습니다.
묻는 방식을 '한 영상에 같이 놓을 수 있나'로 바꿨습니다. 애초에 알고 싶었던 것이 그것이었고, '사실적인가'는 그 질문을 잘못 옮긴 문장이었습니다. 자동 재시도가 그대로 있었다면 이 오판은 그냥 몇 번 더 만들면 되는 일로 덮였을 겁니다.
검사기도 지시입니다. 통과와 탈락을 가르는 문구가 틀려 있으면 재시도를 켜든 끄든 결과가 틀립니다. 실패가 사람 눈에 보여야 검사기 자체를 의심할 기회가 생깁니다. 판정의 근거를 다시 들여다봐야 영향 범위가 제대로 보이는 것은 데이터 쪽에서도 같았습니다.
검증에 쓸 표본을 잘못 골라 영향 범위를 다시 센 기록도 같은 자리의 이야기입니다.

생성 모델에 재시도를 붙이기 전에 보는 것
이 실패는 같은 입력으로 다시 해서 될 종류인가 — 배관 문제인가, 지시 문제인가
재시도가 성공할 때까지 조용히 도는가 — 조용히 돌면 가장 값싼 신호가 가장 먼저 묻힌다
끌 때 사유와 고칠 자리를 같이 주는가 — 둘 없이 끄면 불편만 남는다
느린 것을 재시도로 풀려 하고 있지 않은가 — 처리량은 동시 실행 쪽 축이다
통과·탈락을 가르는 문구를 최근에 읽어본 적이 있는가 — 검사기도 지시다
사람이 옆에 없는 무인 배치인가 — 그때는 자동 1회 + 실패 보고로 층을 나눈다
한계도 적어둡니다. 문장 수정과 모델 교체가 한 번에 들어갔으므로, 문장만 고쳐도 통과했다고 단정하지는 못합니다. 다만 같은 모델로 세 번 만든 결과가 매번 같은 방향으로 어긋났다는 것은 그 자체로 운이 아니었다는 근거가 됩니다. 그리고 통과율이 반반쯤 되는 작업이라면 판단이 달라집니다. 그때는 여러 장을 뽑아 사람이 고르는 쪽이 나은데, 그것은 재시도가 아니라 샘플링이고 사람이 고른다는 전제가 붙습니다.
외부 모델 쪽에서 막혔을 때도 비슷한 순서를 밟았습니다. 같은 요청을 다시 보내는 대신 요청의 성질을 바꾸는 쪽이 빨랐습니다.
호출 한도에 막혀 모델 구성을 다시 짠 기록은 따로 정리해 뒀습니다.
자동 재시도는 사람 손을 덜어주는 층처럼 보입니다. 다만 그 층이 덜어주는 것이 손인지 신호인지는 따로 봐야 합니다. 세 번을 조용히 굴리는 동안 지시가 틀렸다는 사실은 로그 밑에 있었고, 그 사실을 꺼내는 데 든 비용은 문장 한 줄이었습니다.