Skip to main content

2021년 5월

05월 25일#

Unix 시간 이란?#

유닉스 계열의 운영체제를 사용하는 컴퓨터에서 시간을 표시하는 방법으로, 1970년 1월 1일 0시를 기준으로 UTC에서부터 몇 초나 지났는지를 표시합니다.

Unix 시간

사용처#

대부분의 서버는 Unix 기반(Linux, Mac OS)이므로 시스템의 시간을 나타낼 때 Unix Timestamp를 사용

문제점#

유닉스 시간에 32비트 정수형을 쓰는 모든 컴퓨터의 시계가 UTC 0 기준으로 2038년 1월 19일 3시 14분 07초가 지나는 순간 사인 비트가 1로 바뀌면서 음수가 되어 1901년 12월 13일 20시 45분 52초나, 자동으로 오류를 감지하고 초깃값인 0, 즉 1970년 1월 1일 0시 정각으로 돌아가게 되는 버그를 칭한다. 영어로는 Year 2038 problem, Unix Millennium bug 등으로 표기한다.

Unix Timestamp가 만들어질 당시 대부분 32bit OS 밖에 존재하지 않았다. 32bit Integer의 범위는 −2,147,483,648 (−2³²) ~ 2,147,483,647 (2³¹ − 1)이다. Unsigned Integer를 사용할 경우 부호를 없애서 0 ~ 4,294,967,295 (2³² − 1)까지 가능하지만 1970-01-01T00:00:00Z 이전을 나타낼 수 없으므로 어쩔 수 없이 Signed Integer를 사용했다. 따라서 1970-01-01T00:00:00Z에서 2,147,483,647초를 더하면 2038-01-19T03:14:07Z인데(Unix Timestamp 2,147,483,647), 여기서 1초가 추가된 2038-01-19T03:14:08Z이 되는 순간 Unix Timestamp 0이 되어 시스템은 1970-01-01T00:00:00Z와 동일한 시간으로 인식한다.

해결책#

OS를 64비트로 변경~! 단, 시간을 처리하는 로직들에 대한 대책이 필요하다.

요약#

  1. Unix 기반의 32bit OS의 Unix 시간이 2038녁 1월 19일이 지나면 오버플로 현상으로 문제발생
  2. 문제 해결을 위해 64bit의 OS로 변경
  3. 단, 시간을 처리하는 로직(금융권, 행정처리, 특정기간의 이벤트 등..)들에 대한 수정이 필요할 것으로 예상

현재 유닉스 시각
출처: 나무위키