'year 2038 problem'에 해당되는 글 1건

  1. 2006.06.01 Year 2038 Problem
개발2006. 6. 1. 01:21

Year 2038 problem? 2038년에 무슨 문제가 있다는 것일까?

Millennium bug(Year 2000 problem, Y2K Problem, Y2K bug)라는 말은 한번쯤 들어봤을 것이다. 뉴스에서도 종종 떠들어댔으니까.

Millennium bug는 컴퓨터 소프트웨어에서 2000년을 1900년으로 잘못 표현하는 현상을 얘기하는데, 이는 시각을 표현함에 있어 하위 두자리만 기록했기 때문에 생기는 문제다. 즉, 2000년을 00년으로 기록하여 1900년을 의미하는 00년으로 인식이 된다는 얘기다. 개인이 기록한 게시물의 등록시간 정도야 틀려도 큰 지장이 없겠지만, 적금만기날짜나... 뭐 그런 중요한 시각(딱히 생각나는게 없어서 예시가 어정쩡하네...)이 잘못 기록된다면 문제가 심각할 것이다.

그러면 Year 2038 problem이란 무엇인가?
이 문제는... computing 분야에서 time 데이터를 POSIX time 방식으로 표현하는 데서 기인한 문제다. POSIX time representation은 서기 1970년 1월 1일 00:00:00(rTC)으로부터 몇 초(second)가 흘렀는지를 기록하는 방식인데, 대부분의 32-bit 시스템에서는 이 값을 32-bit signed integer 형식으로 기록한다. 32-bit signed integer가 기록할 수 있는 가장 큰 양수는 2147483647 (2^31 - 1)이다. 그럼 계산을 시작해보자.

1년 = 365일, 1일 = 24시간, 1시간 = 60분, 1분 = 60초.
압축해보면, 1년 = 31536000초가 된다.

그러면 2147483647를 31536000으로 나누면 68.096 정도가 되는데, 이는 POSIX time이 1970년으로부터 68년정도(2038년)까지만 표현할 수 있다는 얘기가 된다. 엄밀히 따지면 2038년 1월 19일 03:14:07(UTC)까지다. 따라서 2039년에 태어난 사람의 생년월일을 32-bit signed integer로 기록하면 1902년(1970 - 68)이라는 말도 안되는 출생년도로 표기될 수도 있다.

그럼 이 문제를 어떻게 해결해야 하는가? 정답은 아직 만만치가 않다. Time 데이터를 32-bit unsigned integer나 64-bit 형식으로 표현하면 되긴 되는데, 기존에 32-bit signed integer로 time 데이터를 다루던 소프트웨어나 시스템에서는 호환성 문제나 기타 등등의 문제로 인해 또다른 문제가 발생한다. (자세한건 묻지 마시라!)

아직 32년정도의 여유가 남아있는데, 그 사이에 똑똑한 사람들이 해결방안을 제시해줄거니까 큰 걱정은 안해도 된다. 하하하...

참고로 time 데이터를 64-bit unsigned integer 형식을 사용하면 292,277,026,596년 12월 4일 15:30:08 (UTC)까지 표현할 수 있단다. 그러면 292,277,026,550년쯤에 또 문제를 제기하고... 뭐 어쨌든 그 때는 128-bit를 쓰던가... 살아있는 친구들이 해결하라 그래!

참고:

Posted by roguebean