밀레니엄 버그 (Y2K Problem)
소개 및 원인
밀레니엄 버그는 2000년대 초에 발생한 컴퓨터 문제로, 2000년 1월 1일 이후에 발생할 수 있는 문제였습니다
이 문제는 컴퓨터 시스템이 연도를 2자리로 표현하면서 발생했습니다
초창기 컴퓨터 시스템에서는 경제적인 이유로 연도를 2자리로 표기하여 저장하고 처리했습니다
따라서 2000년을 00으로 표기하게 되고, 이 경우 1900년과 2000년을 구분하기 못하는 문제가 발생합니다
영향 및 대응
실제로 잘못된 연도 표기로 인해 시스템이 오작동하거나 데이터 손실이 발생했습니다
잘못된 요금이 청구되거나, 여러 기기가 정지했습니다
이를 해결하기 위해 많은 기업과 기관이 시스템을 업그레이드하여 연도 표기를 4자리로 변경했습니다
Y2K 2038 (Year 2038 Problem)
소개 및 원인
Y2K 2038은 밀레니엄 버그와 유사합니다
2038년에 발생할 수 있는 컴퓨터 문제로, Unix 타임스탬프를 기반으로 개발된 모든 시스템 및 언어에서 발생할 수 있습니다
Unix 타임스탬프는 1970년 1월 1일부터 32비트로 시간을 계산합니다
이 경우 시간의 최대값은 2038년 1월 19일이 됩니다
즉, 밀레니엄 버그와 유사하게 해당 일시를 넘어가게 되면 올바른 시간을 계산할 수 없습니다
대응
64비트 시스템을 사용하면 이 문제를 해결할 수 있습니다
64비트 시스템을 사용하면 292,277,026,596년까지 표현할 수 있습니다
오버플로우 문제를 까마득한 미래로 미뤄 둘 수 있습니다
Y2K 문제의 교훈
개발자로서는 지속가능한 시스템에 대한 고민이 필요합니다
회사 입장에서는 이 문제를 대비하기 위해 비용이 듭니다
처음부터 잘 설계된 프로그램이라면 이 비용을 아낄 수 있습니다
그리고 전혀 다른 차원의 고민을 해봅시다
만약에 프로그래밍에서 흔히 발생하는 오버플로우 문제를 원천적으로 막을 수 있는 방법이 있다면 어떨까요?
메모리와 자원은 유한하기 때문에 표현할 수 있는 최대값이 한정적인 건 당연합니다
오버 플로우가 발생한 값과 기존 값 사이에 대소 비교를 정확하게 할 수 있을까요?