2. 국정농단 증거인 태블릿 PC 관련해 많이 등장하네요
● <김진태> "태블릿이건 핸드폰이건 와서 구동이 되면 설정된 기준시로 가는 거
지. 한컴 뷰어만 그런 게 어딨습니까."
● <노회찬> "항의하려면 한컴뷰어에 항의를 해야죠. 왜 이렇게 설정했느냐."
● [팩트체크] '포렌식 보고서' 시간, 서머타임과 1시간 다르다?
● 아무도 정확한 얘기를 하지 않는데.. 나만 불편해? 😓😓😓😓
3. 그럼 컴퓨터 시간에 대해서 정리해 봅시다
오늘의 주제
● 우리가 쓰는 시간과 달력은 어떻게 정해진 것인가
● 컴퓨터에서 어떻게 시간을 표현할 것인가
● 인간의 시간과 어떻게 맞출 것인가
흥미 위주니까 실제 이걸로 공부하지는 말아 주세요 😈😈
4. <JTBC> UTC는 고정 불변의 기준 시간입니다
● <물리학자> 불변 아닌데요!
● 여기서 상대성 이론과 양자 역학 얘기를 할 건 아니니까 불변이라고 치고…
● 시간을 표현할 때는
● 지구상 어디에 있던 고정된 하나의 시점을 표현하는 방법이 있어야 하고
● 지구상 특정 위치에서 통상 말하는 년월일시분초를 표현하는 방법이 있어야
○ 2017/11/10 12:18:11
5. 시점 - 타임스탬프
● 어떤 기준 시점에서 얼마나 시간이 지났는지를 표현합니다.
● 보통 유닉스를 통해 알려진 유닉스 타임스탬프를 많이 사용
● 아이폰이나 안드로이드 모두 기반 OS가 유닉스같은 녀석이라 마찬가지
● 1970년 1월 1일 0시 0분 0초 UTC부터 몇 초가 지났나를 나타내는 하나의 숫자
● 32비트 정수를 사용하면 1970년에서 약 68년 전후까지만 표현됩니다. 넘어가
면 (1900년, 2040년) 안 됨
● 32비트 정수를 사용하면 2038년 1월 19일 03:14:07 UTC에 오버플로우. 1901
년으로 점프합니다.
● 웬만하면 그 전에 64비트로 바뀌겠죠 (나몰라라)
6. 사실 거짓말입니다. 윤초(leap second)가 있어서
● 무섭게 들릴지 몰라도 지구 자전 속도는 일정하지 않습니다. 지구는 매끈하게
돌아가지 않고 조금씩 흔들흔들 하면서 불규칙적으로 돌아가는 거예요.
● 그래서 표준시에 쓰는 세슘 원자 시계가 지구와 차이가 날 때마다 6월 말 또는
12월 말에 1초씩 바꿉니다
● 하지만 유닉스 타임스탬프는 하루는 무조건 60x60x24 = 86400초로 고정
● 엄밀히 말해 1970년에서 몇 초 지났나를 정확히 나타내진 않는다는 뜻이죠.
○ 왜 이러냐고 생각할 수도 있는데, 매번 윤초가 결정될 때마다 소프트웨어를 업데이트할 수도 없
는 일이고 복잡한 일이 많습니다.
● 여기에 따른 문제도 있습니다. "윤초"와 “자바"를 검색해 보세요.
7. 천체가 인간 생활에 맞추려니 참 쉽지 않습니다
● 인간에게 1년은 4계절 사이클, 하루는 해가 뜨고 지는 사이클
● 지구가 정확히 자전 365번 동안 공전 1번 정확히 하면 얼마나 좋겠냐마는..
● 로마의 율리우스 카이사르(시저)는 1년을 365.25일로 봤습니다.
○ 그래서 4년에 한번씩 2월 29일이 생기는 율리우스력을 만들었죠. (기원전 45년)
● 사실 1년은 약 365.2422일이라고 합니다. 그래서 율리우스력은 1÷0.0078 = 약
128년에 하루가 차이가 납니다.
● 다음해인 기원전 44년에 암살당한 카이사르는 이 오차의 문제를 잘 몰랐겠죠.
8. 천체가 인간 생활에 맞추려니 참 쉽지 않습니다
● 율리우스력을 오래 쓰다 보니 너무 오차가 누적돼서 바꾼 달력이 현재 우리가
사용 중인 그레고리력입니다. 1년을 365.2425일로 봅니다.
○ 연도가 4의 배수일 때 2월 29일을 만들되, (365 + 0.25 = 365.25)
○ 그 중에 100의 배수이면 2월 28일까지만 (... - 0.01 = 365.24)
○ 그 중에도 400의 배수이면 2월 29일을 만듭니다 (... + 0.0025 = 365.2425)
● 1582년 교황 그레고리오 13세가 개정했는데, 가까운 유럽 지역도 로마 가톨릭
과 친하지 않은 개신교나 정교회 지역에서는 한동안 율리우스력을 계속 썼습
니다. 그래서 1917년 러시아 10월 혁명은 율리우스력 기준이고 그레고리력으
로 따지면 11월에 일어났습니다.
● 그레고리력은 꽤 정확하지만 그래도 1년에 약 0.0003일 정도 차이가 나서 약
3300년이 지나면 하루가 어긋나요. 아직 435년 밖에 안 지났는데 오차는 그냥
후손들에게 맡깁시다.
9. 어쨌거나 타임스탬프를 인간의 달력으로 열심히 계산
● 인간은 하루 일과 중 날짜가 바뀌는 것에 적응하지 못하고, 해가 06시쯤 뜨고
18시쯤 지길 기대합니다.
● 경도 기준으로 표준시간대(타임존) 개념이 발생.
○ 19세기 말 당시 패권국이었던 영국의 그리니치 천문대를 경도 0도로 표준화했고 그곳의 시각을
GMT라고 합니다. 나중에 과학적으로 보정하고 덜 패권스러운 이름인 UTC가 쓰입니다
○ UTC보다 9시간 빠르면 UTC+09:00 8시간 느리면 UTC-08:00 (15도에 1시간 = 360도에 24시
간)
● 한국은 UTC+09:00
○ 서울시청이 동경 약 127도로 120도 08:00과 135도 09:00의 중간 쯤인데.. 대한제국 08:30, 일
제강점기 09:00, 1954년 (이승만) 08:30, 1961년 (박정희 국가재건최고회의) 09:00
○ 1시간 단위로 떨어져야 편하고 느린 쪽보다 빠른 쪽 타임존을 선택하는 쪽이 나으므로 현재
+09:00이 최선이라고 봐요.
● 중국처럼 말도 안 되게 넓은 지역을 한 시간대로 묶기도 합니다
○ 중국 서쪽 끝은 겨울에 10시에 해가 뜨죠. 7:30에 해가 뜨는 베이징과 같이 쓰려고.
10. 하지만 인간의 바보짓 때문에 더 복잡해집니다
● 서양인들이 퇴근하고 햇볕 좀 더 보겠다고 서머타임(일광시간절약)을 만듭니
다.
● 그냥 일찍 출퇴근하면 될 일이지 왜 시계를 돌리는지 모르겠죠?
● 계절이 무의미하게 항상 덥거나 항상 추운 지역은 큰 의미가 없습니다.
● 동아시아는 여름에 장마 때문에 큰 의미가 없고요.
● 에너지 절약 효과를 주장하는 건 에너지 소비를 조명만 생각하던 옛날 얘기
● 한국도 미군정 시절 쓰고, 1987-1988년 올림픽이랍시고 썼는데 미친 짓이었죠.
아직도 30년 전의 혼란은 기억에 남습니다.
● https://www.youtube.com/watch?v=84aWtseb2-4 유튜브 영상 참고
11. 하지만 인간의 바보짓 때문에...
● 영국에서 서머타임을 쓴다고 UTC가 바뀌지는 않습니다. 영국은 서머타임 시
행중 시간대를 BST(British Summer Time)라고 부릅니다
● 어쨌든 이러한 표준시간대는 국가의 정책에 따라 달라질 수 있기 때문에 (북한
은 2015년에 UTC+09:00에서 UTC+08:30으로 변경) 바뀌면 전세계 소프트웨
어들이 업데이트해야 됩니다. 역시 미친 짓이죠.
● 덕분에 아무리 최신으로 업데이트한 스마트폰에서도 특정 지역에서 시각이 잘
못 나오는 버그가 나오는 일이 종종 있습니다.
12. 그래서 컴퓨터에서 인간의 시간을 표현하려면
● 연월일시분초 외에 앞의 인간의 바보짓 때문에 DST 여부를 나타내는 플래그
가 추가되죠. 이런 정보가 없으면 서머타임이 끝나서 시계를 뒤로 돌릴 때 겹치
는 시간을 구별할 수 없거든요.
○ (예) 10월 29일 03시에 02시로 시계를 돌리면 10월 29일 02:30은 두 번
● 연월일시분초로 나눠진 시각을 유닉스 컴퓨터 문화에서는 broken-down time
이라고 부릅니다. 각 프로그래밍 API에 따라 다 다릅니다. time tuple이라고 하
기도 하고 DST 여부는 보통 포함하지만 표준시간대 정보는 같이 포함하기도
하고 그냥 조건으로만 사용하기도 합니다.
13. 결론: 그래서 태블릿 시간은 어떻게 저장되었나요?
● 당연히 컴퓨터 기준으로 유닉스 타임스탬프로 저장..할 것 같지만! 화제가 된
문제의 시각은 HWP 파일의 내부에 들어 있는 시간이라서 OS 문제가 아니라
한컴이 어떻게 만들었냐 문제죠.
● 프로그래머 입장에서 말하면 보통 시각을 기록하는데 타임스탬프를 기록하지
표준시간대 정보가 들어 있는 정보를 기록하지는 않습니다. 큰 의미가 없으니
까요. 이 타임스탬프를 현재 OS에 설정된 표준시간대에 맞춰 변환해 표시하죠.
● 그런데 보면 표준시간대 정보를 같이 기록하는 앱도 있습니다. 소프트웨어 개
발에 사용하는 깃(git)이 로그에 기록하는 시각이 대표적이죠. 글쎄 개발자가
어디에 사는지가 궁금한 걸까요?
14. 결론: 그래서 태블릿 시간은 … (계속)
● 잘 모르겠네요 (퍽퍽)
● 상식적인 수준에서는..
○ 시스템 시각을 얻는 API는 유닉스와 비슷한 리눅스나 iOS는 유닉스 타임스탬프, 윈도우의 경우
UTC 기준 연월일시분초를 얻어옵니다. 이 둘 중의 하나가 저장되겠죠. 일부러 현재 시스템의
표준시간대 정보를 가져와서 저장할리는 없어 보이죠.
○ 그래서 아마 타임스탬프나 그와 동격의 정보가 저장되었을 겁니다.
● 포렌식 프로그램의 버그라고 말하기도 하는데..
○ 그럴 수도 있는데, 출근 시각이나 데이트 약속 시간 말하는 게 아니라 타임스탬프라면, 우리 공
돌이개발자들은 UTC로만 표시하기도 합니다.
○ 인간의 로컬 타임은 지금까지 얘기한 것처럼 STUPID! 한 게 많거든요.
● 한컴 뷰어는 로컬타임으로 표시하는 게 맞을 것 같은데
○ 코딩이 귀찮았나 보죠...