본문 바로가기
다양한 TIP

y2k38 문제란 무엇일까요? 2038년 문제

by 유기농프로그래밍 2021. 10. 12.
반응형

현재 컴퓨터들은 0 과 1의 비트연산으로 처리되고 있죠.

앞으로 양자컴퓨터가 나오기 전까지는 이 체제가 변경되진 않겠죠.

여튼 유닉스 시간에 32비트 정수형을 쓰는 컴퓨터가 전세계에 많이 있습니다.

모든 컴퓨터의 시계가 UTC 0을 기준으로 2038년 1월 19일 3시 14분 07초가 되면 int max가 되면서 음수로 변경되게 됩니다.

어떤 사이드 이펙트가 날지는 프로그램마다 다르겠지만, 문제점을 미리 대비해두는게 좋을 것 같습니다.

32비트의 int 최대값은 2147483647입니다. 이거를 넘어가게 되면 오버플로우라고 명하는데요. 

0111 1111 1111 1111 1111 1111 1111 1111

위와 같이 최대값이 2147483647가 되는것이지요.

여기서 1이 더해진다면 아래와 같이 되는데요.

1000 0000 0000 0000 0000 0000 0000 0000

이 값은 32비트 int형으로 보면 -0이 됩니다. 그 다음 1이 더해진다면 -1이 되겠지요.

여튼 이러한 문제점으로 인해 y2k38이라는 단어가 생긴것 같습니다.

 

해결방법으로는 64비트 정수형을 쓰도록 하는건데, 기존에 있던 모든 장비들에 호환성이라든가 개발가능여부도 중요하겠지요.

64비트에서의 오버플로우는 2922억년이라니 64비트로 계산해보면 그날은 정말 먼일이긴 하죠.

그럼 32비트의 unsigned int로 변경한다면 어떨까요? 2106년까지 늦출 수 있겠는데, 단점으로는 1970년도 이전 시간을 표현하기 어렵게 되겠지요.

 

이렇든 저렇든 17년도 남지 않았는데, 앞으로 조금씩이라도 준비가 필요해보입니다.

반응형

댓글