제목:

2038년 문제, 무엇인가?

날짜: Posted on

2038년 문제는 32비트 유닉스 시간에서 2038년 1월 19일 3시 14분 7초 이후 오버플로 현상이 발생하여 시간이 뒤로 돌아가는 오류를 말합니다.

이 문제는 32비트의 한계로 인해 발생하는 문제입니다. 1970년 1월 1일 자정을 0으로 하고 1초가 지날 때마다 1씩 올라가는데, 2038년 1월 19일 3시 14분 7초가 되면 정확히 2,147,483,647초가 지난 시점입니다. 이는 부호 있는 32비트 정수형에서 표현 가능한 최댓값입니다. 여기서 1이 증가하게 되면 부호를 가리키는 최상위 비트가 1이 되고 나머지 비트가 0이 되면서 -2,147,483,648이 되는데, 이를 유닉스 시간으로 환산하면 1901년 12월 13일 20시 45분 52초가 됩니다.

즉 위 그림처럼 2038년 1월 19일 3시 14분 7초에서 갑자기 1901년 12월 13일 20시 45분 52초로 돌아가게 되는 것입니다.

예전 1999년에서 2000년으로 넘어갈 때 연도를 뒤의 두 자리만 인식해서 컴퓨터가 2000년과 1900년을 혼동하는 문제, 이른바 ‘2000년 문제'(밀레니엄 버그, Y2K 문제)가 거론된 적이 있는데, 그 문제와 비슷한 문제가 일어나는 것입니다.

해결책은 운영체제를 64비트로 바꾸는 것입니다. 이렇게 하면 1970년 1월 1일 자정으로부터 9,223,372,036,854,775,807초가 지난 시점에서야 문제가 발생하는데, 2922억 7702만 6596년 12월 4일 15시 30분 8초가 되어야 문제가 발생합니다. 이는 지구의 수명을 훨씬 뛰어넘는 수치로, 2922억년 문제가 일어나기도 한참 전에 지구가 먼저 수명을 다할 테니 전혀 걱정할 필요가 없다고 볼 수 있겠습니다.
다만 이 경우 문제는 시스템을 64비트로 갈아엎어야 하는데 그게 말처럼 쉽지가 않다는 것입니다. 32비트로 구축된 시스템을 64비트로 바꾸기 위해서는 그 규모가 클수록 그만큼 시간적으로나 금전적으로나 만만찮은 비용이 들어갈 것은 자명한 일입니다.
그나마 미봉책으로 유닉스 시간을 부호 없는(Unsigned) 정수형으로 바꾸는 방안도 있습니다. 이 경우는 2106년까지 문제를 늦출 수 있습니다. 하지만 이 경우 1970년 1월 1일 전의 시간을 셀 수 없게 된다는 문제가 생깁니다.

오래된 안드로이드 스마트폰에서 발생하는 2038년 문제

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다