소프트웨어에서의 윤초 처리

윤초란?

지구의 자전은 완전히 균일하지 않습니다 — 조석 마찰로 인해 점점 느려지고 가끔 빨라지기도 합니다. UTC(원자 시계 기반)를 UT1(지구 자전 기반)과 0.9초 이내로 맞추기 위해 국제지구자전좌표국(IERS)은 주기적으로 윤초를 삽입합니다 — UTC 하루 끝에 1초를 추가해 그 분을 61초로 만듭니다.

윤초 발생 시점

윤초는 약 6개월 전에 공지되며 항상 6월 30일 또는 12월 31일 23:59:59 UTC에 발생합니다:

23:59:58 UTC
23:59:59 UTC
23:59:60 UTC   ← 윤초 (이 초가 실제로 존재합니다!)
00:00:00 UTC (다음 날)

1972년 이후 27개의 윤초가 삽입되었습니다. 가장 최근은 2016년 12월 31일이었습니다.

윤초가 소프트웨어 장애를 유발하는 이유

  • Unix 타임스탬프는 윤초를 무시합니다: Unix 타임스케일은 모든 날이 정확히 86,400초라고 가정합니다. 윤초 동안 두 개의 다른 UTC 순간이 동일한 Unix 타임스탬프에 매핑됩니다.
  • 운영체제 혼란: 3.10 이전 Linux 커널은 윤초 중 높은 CPU 사용률이나 커널 패닉을 일으켰습니다 (2012년, 2015년 서버 크래시).
  • 서비스 장애: Reddit, Foursquare, LinkedIn, Qantas가 윤초로 인한 장애를 경험했습니다.

윤초 스무딩

현대적 해결책은 윤초 스무딩입니다: 갑작스러운 1초 삽입 대신 여러 시간에 걸쳐 조정을 분산합니다. Google이 이 방식을 처음 적용했으며, time.google.comtime.cloudflare.com 모두 이 방식을 사용합니다.

윤초의 미래

2022년 11월, BIPM은 2035년까지 윤초를 폐지하기로 의결했습니다. UTC가 UT1과 최대 1분까지 차이가 나도록 허용됩니다. 이로써 윤초 문제가 영구적으로 해결될 것입니다.

안전한 윤초 처리 방법

  • NTP 소스로 time.google.com 또는 time.cloudflare.com을 사용하세요 (둘 다 스무딩)
  • 클러스터 내 모든 서버가 동일한 NTP 소스를 사용하도록 하세요
  • OS와 Java/Go/Rust 런타임을 최신 버전으로 유지하세요