← 뉴스레터

2026-06-17

끊겼다 돌아온 일꾼이 처음부터 다시 시작했다

새벽 한 시, 앱 하나를 배포하는 중이었다. 일은 자동화된 일꾼(다른 기기의 에이전트)에게 맡겼다. 빌드 끝, 업로드 끝, 스토어 스크린샷 끝. 마지막 출시 버튼만 남았다. 그때 일꾼의 연결이 끊겼다. 잠깐 죽었다가 다시 살아났다. 그리고 살아난 일꾼은 — 방금 끝낸 빌드를 다시 시작했다. 스크린샷도 다시 찍었다. “어, 했던 거 또 하네?”


다 했는데 처음부터 다시 한다

배포는 여러 단계짜리 일이다. 빌드하고, 스토어에 올리고, 스크린샷을 갈고, 심사에 넣고, 출시한다. 일꾼은 이걸 순서대로 잘 해나갔다. 빌드 100MB짜리 묶음을 만들고, 스토어 두 곳에 올리고, 새 화면으로 스크린샷까지 교체했다.

문제는 그 중간에 일꾼의 연결이 끊긴 거였다. API 한도 같은 외부 사정으로 세션이 죽었다. 그리고 다시 살아났다.

살아난 일꾼은 자기가 어디까지 했는지를 남겨둔 메모를 읽어서 복원하려 했다. 그런데 그 메모는 옛날 것이었고, “빌드 완료”가 또렷하게 적혀 있지 않았다. 그래서 일꾼은 가장 안전해 보이는 선택을 했다 — 처음부터 다시. 빌드 또, 스크린샷 또, 업로드 또.

옆에서 보던 사람이 막았다. “했던 거 또 하고 스샷도 또 찍는다. 이거 좀 어떻게 해봐.”

멍청해서가 아니다 — 멱등성이 없어서다

여기서 핵심은 일꾼이 멍청한 게 아니라는 것이다. 다시 시작한 일꾼 입장에서는, “이미 빌드했다”는 걸 확신할 방법이 없었다. 메모(글)는 그걸 기계가 체크할 수 있는 형태로 담고 있지 않았으니까.

프로그래밍에 ‘멱등성(idempotency)‘이라는 말이 있다. 같은 일을 두 번 해도 한 번 한 것과 결과가 같아야 한다는 뜻이다. 그런데 “빌드”나 “업로드”는 멱등하지 않다. 두 번 하면 시간과 비용이 두 배로 들고, 운 나쁘면 같은 버전번호를 다시 올리려다 충돌까지 난다. 그런데 일꾼은 “이미 했음”을 모른다. 그러니 다시 한다.

그날 밤의 사고는 결국 이 한 문장이었다 — 일이 끝났다는 사실을 글로만 적어두면, 다시 시작한 일꾼은 그 글을 읽고도 안전하게 “이미 했다”고 판단하지 못한다.

처방 1 — 글 말고 장부에 적는다

그래서 만든 것이 ‘스텝 장부’다. 비싼 단계를 하나 끝낼 때마다, 사람이 읽는 글이 아니라 기계가 묻고 답할 수 있는 장부에 한 줄 적는다. “이 작업의 빌드 단계, 완료.” 그리고 다음에 그 단계를 하기 전에, 일꾼은 먼저 장부에 묻는다. “빌드 했나?” 장부가 “했다”고 하면, 건너뛴다.

말로 하면 당연한데, 자동화에선 이게 빠져 있었다. 완료를 글로만 남기고, 글은 다시 시작할 때 다시 읽히지만 — 글은 “했나?”라는 질문에 기계적으로 답하지 못한다. 장부는 답한다. 그리고 글과 장부가 다투면(글은 “안 했음”, 장부는 “했음”), 장부를 믿는다.

처방 2 — 위임할 때 “끝난 것”을 못박는다

그날 밤 루프를 실제로 끊은 건, 사실 사람이 손으로 한 일이었다. 일꾼에게 다시 명령을 보내면서 맨 위에 이렇게 박았다.

끝난 것(재실행 금지): 빌드 ✅ 업로드 ✅ 스크린샷 ✅ 검증 ✅ 남은 건 딱 두 개: 출시, 심사 제출. 실행 전에 실제 상태를 확인하고, 이미 된 건 건너뛰어.

효과는 즉각적이었다. 같은 일꾼이 이번엔 빌드도 스크린샷도 일절 다시 하지 않고, 스토어의 실제 상태를 확인한 다음 남은 두 개만 했다. 명령에 박은 “끝난 것/남은 것” 목록 하나가 헛돌던 일꾼을 제자리로 돌렸다. 이걸 매번 손으로 하지 않도록 표준으로 만들었다.

배운 것

가장 비싼 자동화 실수는 ‘실패’가 아니다. 이미 한 일을 모르고 다시 하는 것이다. 실패는 눈에 띄고 멈춘다. 그런데 “다시 하기”는 멀쩡해 보이면서 시간과 돈을 조용히 두 배로 태운다.

그래서 자동화에 일을 맡길 때, 특히 그 일이 여러 단계이고 중간에 끊길 수 있다면, 세 가지를 챙긴다.

  1. 완료는 글이 아니라 장부에. 다시 시작한 일꾼이 “이거 이미 했나?”를 기계에게 물을 수 있게.
  2. 위임엔 ‘끝난 것/남은 것’을 못박아. 다시 읽은 메모가 옛것이어도 헛돌지 않게.
  3. 비싼 일은 하기 전에 한 번 더 물어. “이미 했나?” — 이 한 줄이 두 배의 낭비를 막는다.

사람도 똑같다. 끊겼다 돌아온 자리에서 우리가 가장 자주 하는 실수가, 이미 해둔 걸 모르고 다시 하는 것 아니던가.