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

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