밤새 일하라고 켜둔 기계는 설계대로 잤다
밤 11시, 야간 자율 작업 스위치를 켰다. 스위치는 정확히 23시 정각에 켜졌다는 기록을 남겼다. 아침에 일어나 산출물을 확인했다. 0건. 밤새 무엇이 죽었는지 찾으려고 파고들었는데, 조사 끝에 나온 결론이 이상했다. 아무것도 죽지 않았다. 기계는 밤새 설계대로 움직였다 — 설계대로, 잤다.
이게 처음도 아니었다. 전에도 밤샘 자동화를 걸었는데 아침에 빈손인 날이 있었다. 같은 실망이 반복되자 이번에는 끝까지 파기로 했다. 어디서 체인이 끊겼는지, 증거로 확정할 때까지.
용의자 셋, 전원 무죄
용의자는 셋이었다.
첫째, 실행 엔진이 소리 없이 죽었다는 가설. 반증됐다. 작업 반복자는 밤새 30분마다 정확히 깨어났다. 둘째, 안전 게이트가 계속 양보만 했다는 가설. 반증. 셋째, 스케줄 등록 자체가 죽어 있었다는 가설. 역시 반증.
대신 밤 일지에는 이런 기록이 30분 간격으로 줄지어 있었다. “일감 없음. 통과.” 기계는 밤새 성실하게 아무것도 하지 않았다. 일감을 기다렸는데, 일감이 오지 않은 것이다.
그럼 일감은 누가 안 줬나. 여기서 진범이 나왔다.
진범은 약속 두 개의 충돌
내 시스템에는 오래된 안전 정책이 하나 있다. 심야 0시부터 8시까지는 새 일감의 자동 주입을 멈춘다는 것. 이유는 명확하다. 그 시간의 나는 자고 있고, 자는 사람의 무응답을 승인으로 쳐서 자동화가 마음대로 굴러가면 안 되기 때문이다. 이 정책은 밤새 한 치의 오차 없이 작동했다.
그런데 밤 11시에 켜는 토글은 “밤새 자율 소진”을 표방하고 있었다. 켜지면 일감이 밤새 흘러들어올 것처럼.
두 약속을 나란히 놓으면 모순이 보인다. 한쪽은 “심야엔 일감을 넣지 않는다”, 다른 쪽은 “밤새 일감을 소진한다”. 기계는 어느 약속도 어기지 않았다. 토글은 정말 켜졌고, 심야 주입은 정말 멈췄다. 모순을 품은 채 두 약속이 각자 성실했고, 그 사이에서 속은 건 사람뿐이었다.
스위치를 켰다는 기록은 일이 돌아간다는 보장이 아니다. 스탬프 성공과 실행 성공은 다른 사건이다. 이 한 문장을 얻는 데 밤 하나와 아침의 실망 하나가 들었다.
수리는 코드가 아니라 문장이었다
고장이 없으니 고칠 코드도 없었다. 그럼 뭘 고치나.
고지를 고쳤다. 이제 밤 토글이 켜지면 스스로 이렇게 말한다. “심야 0시부터 8시는 주입 정지. 실제 작업 창은 자정 전 한 시간과 아침 8시 이후. 스탬프 성공은 실행 성공이 아님.” 그리고 이 문장이 빠지면 실패하는 테스트를 심었다. 다음에 누가 이 고지를 지워도 테스트가 잡는다.
운용 방식도 결론이 났다. 심야 주입을 열어버리는 쪽도 하루 시도해 봤지만 곧 원복했다. 심야 정지는 안전장치로서 그대로 두고, 진짜 밤샘이 필요한 날엔 자기 전에 일감을 미리 깔아 두고 명시적인 트리거를 직접 당기기로 했다. 조용히 알아서 도는 밤샘 대신, 켜는 사람이 아는 밤샘.
계산해 보니 재미있는 사실도 하나 나왔다. 밤샘 자율 작업의 돈 비용은 0원이었다. 정액 구독 안에서 도니까. 진짜 비용은 따로 있었다 — 주간 사용 한도라는 예산. 밤에 태우면 낮에 모자란다. 그러니 밤샘은 공짜라서 켜는 게 아니라, 낮보다 밤이 필요한 날에만 켜는 게 맞다.
마지막으로 행동 룰을 하나 추가했다. 아침 첫 세션은 지난밤 산출물부터 실측한다. 침묵 실패는 저녁엔 안 보인다. 아침에 잡는 수밖에 없다.
그날 밤의 재실측
수리를 넣은 날 밤, 23시 정각에 토글이 다시 켜졌다. 이번엔 스탬프에 새 고지가 정확히 찍혔다. 자정이 넘자 심야 정지가 예정대로 걸렸고, 일지엔 “심야 창, 주입 건너뜀”이 남았다.
산출물 0이었던 밤과 겉모습은 같다. 하지만 이제 시스템은 침묵하지 않는다. “나 오늘 밤엔 이 시간대만 일할 거야”라고 켜지는 순간에 미리 말한다. 같은 밤이라도, 말해주는 밤과 말없이 자는 밤은 완전히 다른 밤이다.
배운 것
침묵 실패의 반대말은 성공이 아니라 시끄러운 실패다. 못 하게 됐으면 못 한다고 말하는 시스템이, 조용히 아무것도 안 하는 시스템보다 백 배 낫다.
켰다는 기록과 돌았다는 기록은 다른 기록이다. 토글, 스탬프, 예약 확인 — 전부 시작의 증거일 뿐 산출의 증거가 아니다. 산출은 산출로만 확인된다.
그리고 자동화끼리의 약속은 머릿속이 아니라 로그에 적혀 있어야 한다. 모순되는 두 약속도 각자 성실하게 지켜진다. 둘을 한 화면에 나란히 세워주는 건 결국 기록뿐이다.
기계는 시킨 대로 하지 않는다. 설계된 대로 한다.
— 강대종 / @ssamssae