자동화는 조용히 어긋난다: 하루치 일지를 삼킨 타임존 버그를 잡은 날
자정에 도는 자동 발행이 하루를 통째로 건너뛰었다. 원인은 시계가 아니라 시계를 읽는 방식이었다. 자동화 시스템이 조용히 어긋나는 지점과 그걸 막는 구조를 정리한 하루.
3줄 요약
- 오늘 한 일은 자정에 자동으로 도는 발행 작업이 하루치 글을 조용히 건너뛴 원인을 찾아 고치고, 같은 결의 정합성 문제 하나를 더 맞춘 것이다.
- 이게 중요한 이유는 자동화의 진짜 위험이 요란한 에러가 아니라 아무 소리 없이 잘못된 결과를 내는 침묵이기 때문이다.
- 여러 개를 자동으로 굴리는 1인 운영자에게는, 시스템이 스스로 맞을 거라 믿지 않고 억지로 맞춰 확인하는 습관이 곧 신뢰도다.
시계는 맞았고 시계를 읽는 방식이 틀렸다
오늘 잡은 버그의 핵심은 시계가 아니라 시계를 읽는 방식에 있었다. 자정 직후에 도는 자동 발행이 하루치 글을 통째로 건너뛰었다. 에러도 없고 경고도 없었다. 그냥 어제 날짜를 하루 앞으로 잘못 계산하고는, 이미 발행된 날로 착각해서 조용히 넘어갔다.
원인은 이랬다. 이 작업은 한국 시간 자정 오분에 도는데, 그 순간을 세계 표준시로 보면 아직 전날 오후 세시다. 그런데 코드가 시스템 시각을 그냥 읽어서 그걸 한국 시간이라고 가정해버렸다. 결과적으로 지금이 전날 오후라고 인식했고, 그래서 어제 계산이 하루 밀렸다. 대상 날짜를 틀리게 잡으니 이미 끝난 날로 오해했고, 그대로 침묵 속에 하루가 사라졌다.
침묵하는 실패가 시끄러운 실패보다 위험하다
여기서 배운 원칙은 침묵하는 실패를 가장 경계해야 한다는 것이다. 프로그램이 멈추고 빨간 글씨를 뱉으면 오히려 낫다. 바로 눈에 띄니까. 진짜 무서운 건 아무 일 없다는 얼굴로 잘못된 결과를 내놓는 경우다. 발행이 안 됐다는 신호조차 없으면, 며칠 뒤에야 빈 곳을 발견하게 된다.
수정 방향은 단순했다. 시스템이 준 시각을 절대 한국 시간이라 믿지 않는다. 세계 표준시를 구한 다음 아홉 시간을 명시적으로 더해서 한국 시간을 직접 만든다. 그렇게 확정한 값으로만 어제를 계산한다. 가정을 한 줄 제거하고 계산을 한 줄 추가했을 뿐인데, 하루를 삼키던 구멍이 막혔다. 사라졌던 하루치 글도 되살려 다시 올렸다.
세 곳에 흩어진 같은 숫자는 반드시 벌어진다
오늘 두번째로 맞춘 것은 한 데이터가 여러 화면에 흩어져 있으면 반드시 서로 벌어진다는 사실이다. 한 프로젝트의 공개 편수가 대문 화면과 상세 화면에서는 최신 숫자로 바뀌어 있는데, 목록 화면만 예전 숫자로 남아 있었다. 같은 정보를 세 군데에서 각각 손으로 적다 보니 한 곳이 갱신에서 빠진 것이다.
이건 앞의 타임존 버그와 뿌리가 같다. 시스템은 강제로 맞춰 확인하지 않으면 조용히 어긋난다. 시각도, 편수도, 결국 같은 이야기다. 사람이 여러 곳에 같은 값을 따로 적는 구조 자체가 오차를 부른다. 당장은 어긋난 숫자를 손으로 맞췄지만, 다음 숙제는 한 곳만 고치면 세 화면이 같이 바뀌는 단일 출처를 만드는 것이다.
오늘 관통한 판단
오늘 하루를 관통한 생각은 하나다. 자동화의 신뢰도는 잘 돌 때가 아니라 조용히 틀릴 때 드러난다. 자정에 도는 작업이든 세 화면에 흩어진 숫자든, 공통점은 아무도 안 보는 사이에 어긋난다는 것이다. 그래서 시스템이 알아서 맞을 거라는 믿음을 걷어내고, 값을 억지로 다시 계산해 눈으로 확인하는 절차를 심는 쪽으로 갔다. 약속이 아니라 확인된 결과를 남긴다. 오늘은 시스템의 침묵을 한 겹 걷어낸 날이었다.