2012. 1. 10. 14:18

어린 꼬꼬마 분들은 모르겠지만 12년전에 지구인들은 밀레니엄버그로 인해 지구가 멸망할지 모른다는 공포를 가지고 있었습니다.
(참고 : 위키백과 - 밀레니엄 버그)

지금은 마야인이 예언한 지구종말을 걱정하고 있습니다 ㅡ,.ㅡ;
종말이 월드컵도 아니고 몇년마다 한번씩 이러는건지-_-;


밀레니엄 버그
어찌됬건 밀레니엄버그는 별문제 없이 지나갔습니다.
저는 그때가 꼬꼬마 시절이라 정확한 이유는 모르겠지만 개인용 피씨에선 밀레니엄버그는 의미가 없는데도 하드웨어와 소프트웨어들은 밀레니엄버그가 안일어나는 상황이였습니다.(오랜된 컴퓨터를 가지고 있었다면 일어났을수도 ㅎㅎㅎ)
그러니 이미 상업용하드웨어는(여기서 말하는 상업용은 은행같은 대형 시스템들을 말합니다.) 여러가지 이유로 밀레니엄버그가 일어나지 않는 하드웨어로 이미 교체가 됬을 것이라고 판단됩니다.
소프트웨어도 준비할시간이 넉넉한 편이였기 때문에 아마 큰문제는 없었을 것으로 생각됩니다.(그렇다고 쉽게 넘어갔다는 의미는 아닙니다.)

이 시절이 벌서 12년 전이라늬 ㅡ,.ㅡ;;;


기초지식
이제 2012년이 지나가면 한 두어개쯤 종말론이 더 나오고 나서 나오게될 2038버그입니다.
(참고 : 위키백과 - 2038 문제)

이 문제를 이해하기 위해서는 몇가지 기초 지식이 필요합니다.
1. 컴퓨터의 시간은 1970년 1월 1일 0시 0분 0초 부터 시작한다.(국제협약 시간)
컴퓨터에 따라 1900년 부터 시작하는 경우도 있는데 이건 따로 계산해서 표시합니다.
2. 1번을 기준으로 1초씩 더하여 현재 시간을 계산한다.
3. 우리가 흔이 사용하는 32비트 하드웨어/소프트웨어에서 정수 표현의 범위는 -2147483648~2147483647이다.

컴퓨터에서 시간을 표현할때는 1970년 01월 01일 0시 0분 0초에 정수를 초로 보고 더해서 시간을 표현합니다.
만약 1970년 01월 01시 0분 1초를 나타내고 싶으면 1을 넣으면 됩니다.
예1>1970년 01월 01시 0분 1초 = 1
예2>1970년 01월 01시 1분 0초 = 60
예3>1971년 01월 01시 0분 0초 = 31536000

여기 까지 이해 하셨나요?


문제 인식
그렇다면 컴퓨터에서 표현할수 있는 제일큰 숫자인 2147483647를 넣으면 몇년이 나올까요?
2038년 1월 19일 03시14분07초 입니다.

그 이상의 숫자를 넣으면 어떻게 되냐고요?
메모리 오버플로우라면서 블루스크린 띄우거나 표현할수 있는 범위를 벗어났다며 종료됩니다.
시스템에 따란선1970년나 1901년으로 갈수도 있죠.

많은 프로그래머들이 정수의 표현범위를 넘기는 수에 대한 예외처리를 안하고 있다는걸 생각해본다면 지금 쓰고 있는 많은 프로그램이  2038년이후로 쓰지 못한다는 의미가 됩니다.

우리가 사용하는 컴퓨터의 소프트웨어는 유닉스가 전신이라 '유닉스 2038년 문제'라고 부르는 사람도 있습니다.


해결방법
이것은 하드웨어의 문제기도 하고 소프웨의 문제기도 해서 둘다 교체하면 그만입니다.
...
정말입니다 ㅋㅋㅋ

32비트에서 생기는 문제라 64비트로 넘어가면 발생하지 않습니다.
(64비트 정수 범위 -9223372036854775808~ 9223372036854775807)
문제는 2038년까지 모든 시스템이 64비트로 넘어가냐인데......
제가봐선 별문제없습니다.
지금도 32비트의 한계때문에 개인용피씨조차 64비트로 가는 마당에 20년후면 앵간한것 빼놓고는 64비트로 넘어갈테니 말이죠.

사실 이렇게 놓고보면 밀레니엄때와 많이 다르지 않은것 같습니다.
누군가는 이걸로 헛소리를 하긴 하겠지만 결국 밀레니엄때보다 더 많은 시간과 더 좋은 자원이 넘쳐나고 있으니 정말 헛소리가 되겠죠. ㅎㅎㅎㅎ

64비트도 한계가 있으나......64비트부터는 인류의 존속이 더 문제일듯-_-;

p.s. 나도 정수 표현범위 예외처리 안하는데 OTL
p.s. 이것도 영화로 만들라나?