우분투에서 /etc/localtime에는, 서버의 타임존에 대한 정보가 들어 있습니다.

 

 보니까, Asia/Seoul로 설정되어 있는데요. 이는, 서버의 타임존이 Seoul이라는 의미입니다. 그러면, 이러한 정보들은 어디에 어떻게 저장되는 것일까요? /usr/share/zoneinfo 폴더로 들어가 보겠습니다.

 


 먼저, zoneinfo 폴더 내에 있는 Asia/Seoul로 들어가 보겠습니다.

 

 그러면 뭔가 알 수 없는 정보들이 나오고, KST-9가 나옵니다. 이는 한국 표준시를 의미합니다.

 

 도쿄에 대한 정보를 보니, 이번에는 JST-9라고 되어 있습니다. 이것만 봐서는 어느 표준시를 따르는지밖에 모르겠네요.

 

 zdump 명령어는 timezone 파일에 대해서 상세 정보를 출력해 주는 명령어입니다. 사실, 사람이 알아보기 쉽게 출력해 주는 게 더 큰 듯 합니다. -v 옵션을 주어서 Seoul과 Tokyo에 대한 정보들을 모두 출력해 보겠습니다.

 

 

 먼저 서울입니다. 뭔가 정보가 많이 바뀐 거 같은 것은 넘어갑시다. 쭉 보시다 보면, 1988년 이후에 정보가 바뀌지 않았음을 볼 수 있어요. gmtoff=32400이 보이는데요. 32400을 3600으로 나누면 9입니다. 즉, 9시간이 빠르다는 의미입니다. Tokyo에 대한 것을 보겠습니다.

 

 

 뭔가 많이 바뀐 것 처럼 보이는데요. 1951년 9월 9일 이후에 바뀐 게 없음을 볼 수 있어요. gmtoff가 32400이니까 gmt 기준으로 9시간이나 빠른 시간대임을 알 수 있습니다. 그러면 이런 정보들은 어떻게 얻어오는 것일까요? 사실, zoneinfo의 Asia/Seoul이라던지, Asia/Tokyo와 같은 파일에 내장되어 있습니다. 우리가 알아볼 수 없었을 뿐.

 


 이제 /usr/share/zoneinfo 내에 있는 파일 중에, tzinfo.zi를 보겠습니다. tzinfo.zi 파일을 보면 여러가지 정보들이 마구잡이로 뒤섞여 있는 듯 해 보입니다. 그 중에 Asia/Pyongyang에 대한 정보를 봅시다.

 

 정보를 보면, 8:30이 눈에 보이는데요. 2018년 5월 4일 23:30분까지 썼다고 되어 있습니다. 2015년 8월 15일부터, 2018년 5월 4일까지 이 시간대를 썼다는 정보가 tzinfo.zi에도 저장되어 있습니다. 그리고 해당 정보를 zdump로 출력해 봅시다.

 

 

 이 정보를 어디선가 해독해서, 파일로 가지고 있고, 그 정보를 zdump가 출력하고 있다는 합리적인 추론을 할 수 있습니다. 실제로 시스템 콜을 추적하는 strace를 보면, 해당 파일을 읽지는 않습니다.

 

 strace를 쳐 봐도, /usr/share/zoneinfo/.../Pyongyang에 대한 것만 있지, tzinfo.zi는 코빼기도 보이지 않습니다. 그러면 이 파일의 정체가 무엇일까? 괜히 넣어둔 것일까요? 그건 아닐 겁니다. 사실, 간단하게 알 수 있는 방법이 있습니다.

 

 

 Z Asia/Pyongyang을 보면, 8:30 - 2018 May 부분이 있습니다. 원래 May 4였는데요. May 5로 바꿔 봅시다. 다음에 zic 명령어를 이용해서 zic tzinfo.zi를 쳐 봅시다. 그 다음에 평양에 대한 정보를 zdump로 확인해 봅시다.

 

 

 원래 Sat May 5였는데, Sun May 6로 바뀌었음을 볼 수 있습니다. 제가 zic 파일에서 평양 시간대가 2018년 5월 6일 0시 0분부터 +9로 바뀌었다는 정보를 넣었기 때문입니다. 그러면 이 파일이 뭘 하는 것인지 요약을 할 수 있을 겁니다.

 

 

 zic은 zi에 있는 데이터들을 읽어내서, 컴파일 합니다. 저는 tzdata.zi 파일에 있는 데이터들을 읽어내서 컴파일을 한 셈이 되겠네요. 그 결과물들은 zoneinfo 내에 있는 타임존들 파일에 쓰여집니다. 이제, 우리는 Seoul의 타임존 정보를 보고 싶으면, tzdata.zi가 아니라 컴파일 된 결과물인 /usr/share/zoneinfo/Asia/Seoul을 읽어내면 됩니다. zic에 대한 자세한 것은 이쪽을 찾아보면, 괜찮을 듯 싶네요.