2038년 문제(Y2K38) 설명

2038년 1월 19일 03:14:07 UTC에 Unix 타임스탬프 2,147,483,647 — 32비트 부호 있는 정수의 최댓값 — 이 오버플로됩니다. 그것이 무엇을 의미하는지, 어떤 시스템이 영향을 받는지, 왜 대부분의 현대 코드는 이미 안전한지 설명합니다.

2038년 문제란?

Unix 타임스탬프는 전통적으로 1970년 1월 1일 00:00:00 UTC 이후의 초를 세는 32비트 부호 있는 정수로 저장됩니다. 32비트 부호 있는 정수의 최댓값은 2,147,483,647이며, 이는 2038년 1월 19일 03:14:07 UTC에 해당합니다. 그 1초 뒤 정수는 -2,147,483,648로 오버플로됩니다. Unix 타임스탬프로 해석하면 이 음수 값은 1901년 12월 13일에 해당하여, 영향을 받는 시스템을 약 137년 과거로 보냅니다.

오버플로 값

  • 2^31 − 1 = 2,147,483,647 (32비트 부호 있는 정수 최댓값)
  • 2,147,483,647을 날짜로 = 2038년 1월 19일 03:14:07 UTC
  • 2,147,483,647 + 1은 −2,147,483,648로 오버플로(가장 작은 32비트 값)
  • −2,147,483,648을 날짜로 = 1901년 12월 13일 20:45:52 UTC

어떤 시스템이 위험한가?

이 문제는 타임스탬프를 32비트 부호 있는 정수로 저장하는 시스템에 영향을 줍니다:

  • 32비트 time_t를 쓰는 임베디드 시스템과 마이크로컨트롤러
  • 타임스탬프에 time_t나 int를 쓰며 32비트 대상으로 컴파일된 레거시 C/C++ 코드
  • 아직 운영 중인 32비트 하드웨어의 오래된 Linux 커널(5.6 이전)
  • MySQL TIMESTAMP 열 — 2038-01-19까지로 제한; 대신 DATETIME을 사용
  • 타임스탬프를 32비트 값으로 인코딩하는 일부 네트워크 프로토콜과 파일 형식
  • 수십 년 수명을 가진 산업 제어 시스템과 IoT 기기의 펌웨어

어떤 시스템이 안전한가?

대부분의 현대 코드와 인프라는 이미 영향을 받지 않습니다:

  • 모든 64비트 OS — Linux(glibc 2.34+는 32비트 하드웨어도 수정), macOS, Windows
  • Python — 타임스탬프가 64비트 부동소수점을 써서 서기 2억 9200만 년을 훨씬 넘어 안전
  • JavaScript — Date가 64비트 IEEE 754 부동소수점을 써서 서기 275,760년까지 안전
  • Go와 Rust — 내부적으로 int64를 써서 수십억 년 안전
  • Java — java.time.Instant가 long(64비트)을 써서 서기 약 2억 9200만 년까지 안전
  • PostgreSQL TIMESTAMP — 2038년 이후 날짜도 올바르게 저장
  • MySQL DATETIME — 범위 1000-01-01~9999-12-31, 영향 없음

2038년 문제 FAQ

2038년 문제란?
2038년 문제(Y2K38)는 Unix 타임스탬프를 저장하는 데 32비트 부호 있는 정수를 쓰는 시스템이 2038년 1월 19일 03:14:07 UTC에 오버플로되는 버그입니다. 32비트 부호 있는 정수의 최댓값은 2,147,483,647입니다. 1초 뒤 정수는 -2,147,483,648로 넘어가며, 이는 1901년 12월 13일에 해당합니다.
2038년 1월 19일의 Unix 타임스탬프는?
2038년 1월 19일 03:14:07 UTC의 Unix 타임스탬프는 2,147,483,647로, 32비트 부호 있는 정수의 최댓값(2^31 - 1)입니다. 32비트 시스템에서 2038년 오버플로가 일어나는 정확한 순간입니다.
Y2K38은 Y2K와 같은가?
아닙니다. Y2K(2000년 문제)는 연도를 두 자리로 저장한 프로그램 때문이었습니다. Y2K38은 Unix 타임스탬프를 32비트 부호 있는 정수로 저장해 2038년에 오버플로되기 때문입니다. 원인도, 영향을 받는 시스템도 다릅니다.
2038년에 인터넷이 멈출까?
크게 멈추지는 않을 것입니다. 인터넷 인프라 대부분은 이미 64비트 시스템으로 이전했습니다. 위험은 임베디드 시스템, 오래된 IoT 기기, 수십 년간 업데이트되지 않은 소프트웨어에 집중됩니다. 현대 운영체제, 언어, 데이터베이스는 이미 안전합니다.