닫는 글 — 다시, 시계 앞에서

만화로 보는 요약 — 먼저 읽어보세요
중복 로그라는 출발점 → 벽시계·순간·타임존·멱등성·순서의 구분 → 시간을 믿기보다 필요한 보장을 설계하는 결론.
면접 실전 질문: ① 이 문제에서 타임스탬프는 누구의 어떤 주장인가? ② 지금 중복 로그를 다시 보면 어떤 정보를 먼저 확인할까? ③ 시간을 다루는 설계에서 가장 먼저 정해야 할 보장은 무엇인가?
타임스탬프는 세계에 대한 사실이 아니라, 어느 시계가 내놓은 주장이다.
여는 글의 그 새벽으로 돌아가 봅니다. 당직 폰이 울렸고, 로그엔 같은 배치가 실행 ID만 다른 채로 두 줄 나란히 찍혀 있었습니다. 그날 밤은 유독 길어서, 자정부터 자정까지 다시 재보니 25시간이었죠. 그때는 그 앞에서 그저 막막했습니다. 원인을 뒤져도 안 보였고, 서버는 멀쩡했고, 배치는 스케줄대로 돌았을 뿐인데 결과가 이상했습니다.
지금 같은 로그를 다시 마주친다면, 더 이상 막막하지 않을 겁니다. 무엇을 봐야 할지 알고 있으니까요. 그 앎이 어디서 왔는지 되짚어 보는 것으로 이 책을 닫으려 합니다.
이 책은 한 문장의 궤적을 처음부터 끝까지 따라왔습니다.
시간은 처음엔 하늘이 정했고, 다음엔 나라가, 다음엔 원자시계가 정했다. 그런데 분산 시스템에서는 — 아무도 정하지 못한다.
이 마지막 문장 앞에서, 정직한 결말은 “그래도 결국 누군가 정했다”가 아닙니다. 이 분야는 정하는 사람을 기다리길 그만두고, 정하지 못한 채로 일하는 법을 익혔습니다. 시각을 포기하고 순서만 세기로 한 논리적 시계, 크기를 대가로 인과관계를 정확히 되찾은 벡터 클록, 그리고 정하지 못함의 크기 자체를 재는 값으로 바꿔버린 불확실성 구간까지. 셋 다 답이 다르지만 방향은 하나였습니다. 합의할 수 없다는 사실을 인정한 자리에서, 그래도 쓸 수 있는 걸 찾아낸 것.
이 책에서 가져갈 게 체크리스트 하나뿐이라면, 그건 이미 앞 장에 있습니다. 여기서 남기고 싶은 건 그보다 조용한 습관입니다. 화면에 찍힌 타임스탬프 하나를 볼 때마다, 그걸 세계에 대한 사실로 받아들이지 않는 것. 대신 이렇게 묻는 것. 이건 어느 시계가 내놓은 주장인가, 어느 시간대의 눈금인가, 그 시계는 자신의 오차를 얼마나 알고 있는가. 스물한 개 장이 훈련시킨 건 결국 이 질문 하나였습니다.
그리고 이 질문에는 아직 열려 있는 자리가 여럿 남아 있습니다. 윤초는 2035년까지 UT1−UTC 허용치를 키우는 쪽으로 방향만 정해졌을 뿐, 새 최대치도 시행 방식도 아직 정해지지 않았습니다. 벡터 클록은 노드가 계속 들고 나는 환경에서 오래된 슬롯을 안전하게 지우는 문제를 풀지 못한 채로 남아 있습니다. 그리고 GPS와 원자시계로 불확실성을 몇 밀리초까지 좁히는 하드웨어는, 여전히 극소수의 시스템만 갖고 있습니다. 이 책이 다 풀린 척하지 않는 것이, 이 책이 다룬 문제들에 어울리는 결말입니다.
당직 폰은 언젠가 또 울릴 겁니다. 그날 밤에도 시계는 여전히 어긋나 있을 거고요. 다만 그 울림 앞에서, 이제는 물어야 할 질문을 알고 있습니다.