컴퓨터와 디지털 · 디지털 생활과 보안

컴퓨터의 시계 — 오전 1시가 두 번 오는 날

같은 순간과 같은 시각 표시는 다를 수 있다

약 5분의 작은 발견

내 읽기 목록 ↗
여행 가방과 일정표 옆에서 휴대전화를 살피는 사람의 삽화.
AI 관련 삽화 · 여행과 일정의 분위기를 표현했습니다. 실제 항공권이나 시각 차이를 비교한 도표는 아닙니다.

기록에 오전 1시가 찍혀 있다. 한 시간 뒤의 기록에도 오전 1시가 찍혀 있다. 시계가 고장 난 것일까. 서머타임이 끝나며 시계를 되돌리는 지역에서는 실제로 같은 현지 시각이 두 번 나타날 수 있다.

사람에게도 헷갈리는 일은 컴퓨터에게도 따로 구분할 방법이 필요하다. 숫자로 저장하니 시간은 언제나 단순할 것 같지만, 어느 지역에서 어떤 규칙으로 표시했는지가 중요하다. 시계의 이야기는 정확한 기계와 사람이 정한 약속이 만나는 자리다.

01. 지금 이 순간을 서로 다르게 부른다

서울과 로스앤젤레스에 있는 사람이 동시에 통화해도 화면의 시각은 다를 수 있다. 한 순간에 서로 다른 지역의 시계가 다른 숫자를 보여 주는 것이다. 이것은 둘 중 한쪽이 틀렸다는 뜻이 아니다.

그래서 오후 세 시에 만나자라는 말에는 어느 곳의 오후 세 시인지가 필요하다. 컴퓨터의 일정이나 기록에서도 비슷한 문제가 생긴다. 날짜와 시각의 숫자만 있으면 충분해 보이지만, 그 숫자가 가리키는 맥락이 빠져 있을 수 있다.

02. UTC라는 기준을 함께 두기

UTC는 협정세계시다. 여러 지역의 시각을 비교할 때 기준으로 쓸 수 있다. 현지 시각이 UTC보다 얼마나 앞서거나 뒤서는지를 함께 알면 같은 순간을 연결할 수 있다. 이 차이를 오프셋이라고 부른다.

여기서 모든 지역이 기준에서 몇 시간 차이인지만 영원히 고정해 두면 끝나는 것은 아니다. 같은 지역에서도 날짜에 따라 차이가 바뀔 수 있다. 시간을 다루는 프로그램은 숫자 하나뿐 아니라 그 변화의 규칙도 고려해야 한다.

03. 한 시간 차이가 달라지는 날

파이썬 공식 문서는 2020년 로스앤젤레스의 예를 보여 준다. 10월 31일에는 UTC보다 7시간 늦는 시각을 쓰다가, 11월 1일에는 서머타임이 끝나며 8시간 늦는 시각으로 바뀐다. 이는 과거의 구체적인 사례이지 올해의 일정 안내가 아니다.

바로 그 전환 때문에 하루 중 일부 시각이 다시 나타난다. 단순히 날짜에 24시간을 더하는 일과 현지 달력에서 다음 날 같은 시각을 찾는 일이 항상 같은 결과가 되는 것은 아니다. 익숙한 하루라는 말에도 어떤 기준으로 계산했는지가 들어 있다.

04. 두 개의 오전 1시를 구분하려면

이 사례에서 2020년 11월 1일 오전 1시는 전환 전과 후에 각각 존재한다. 하나는 UTC보다 7시간 늦고 다른 하나는 8시간 늦다. 시계의 숫자는 같지만 가리키는 순간은 한 시간 다르다.

공식 문서는 같은 현지 시각의 앞선 경우와 나중 경우를 구분하는 방법을 설명한다. 독자가 프로그램의 옵션을 외울 필요는 없다. 같은 표기만으로는 한 순간을 확정하지 못하는 때가 있어서 추가 정보가 필요하다는 점을 알면 된다.

05. 도시 이름은 단순한 숫자표가 아니다

시간대 데이터는 어느 지역이 언제 어떤 시각 규칙을 썼는지 다룬다. 파이썬의 zoneinfo는 IANA 시간대 데이터베이스를 이용한다. 로스앤젤레스라는 지역을 선택하는 것과 무조건 UTC보다 8시간 늦다고 정하는 것은 같은 뜻이 아니다.

앞의 사례에서 보았듯 같은 지역의 차이가 시기에 따라 달라질 수 있기 때문이다. 프로그램이 지역의 이름을 다룬다는 것은 지명 하나를 장식으로 붙이는 것이 아니라 날짜와 연결된 규칙을 찾는 일에 가깝다. 표시할 이름과 계산할 조건이 함께 있다.

06. 기록하는 시간과 약속하는 시간

이미 일어난 사건의 순서를 남기는 일과 매주 현지의 같은 시각에 만나는 약속을 정하는 일은 목적이 다르다. 전자는 어떤 순간이었는지가 중요하고 후자는 지역의 생활 시각을 유지하는 것이 중요할 수 있다.

따라서 모든 시간을 한 방식으로만 저장하면 모든 문제가 해결된다는 결론은 필요하지 않다. 프로그램은 무엇을 기록하고 어떤 약속을 유지할지에 맞추어 필요한 정보를 갖추어야 한다. 이 구분은 코드보다 서비스가 무엇을 뜻하려는지의 문제에서 시작한다.

07. 숫자만 복사하면 빠질 수 있는 것

어떤 기록에서 오전 1시라는 부분만 따로 옮기면 원래 붙어 있던 날짜와 지역 정보가 사라질 수 있다. 독자는 다른 순간을 같은 것으로 읽거나, 같은 사건을 서로 다른 것으로 볼 수 있다. 시간 표시도 출처의 일부라는 점을 생각하게 한다.

이 원고의 두 오전 1시는 공식 문서의 과거 예를 별도로 재현해 확인했다. 그러나 그 예를 모든 나라의 현재 규칙으로 확대할 수는 없다. 지역과 날짜를 함께 보는 간단한 습관이 시간을 이해하는 데 중요한 이유다.

08. 시계가 보여 주는 것은 숫자 이상의 약속

함께 실은 AI 삽화는 여행 일정을 생각하는 사람의 분위기를 표현했다. 특정 항공권이나 실제 시각 차이를 비교한 도표는 아니다. 그림 속의 물건이 이 글의 계산 결과를 증명하는 자료도 아니다.

컴퓨터는 시각을 정확하게 계산할 수 있지만 무엇을 같은 시간이라고 부를지에 관한 약속까지 저절로 정하지는 않는다. 순간과 현지 표시, 날짜와 지역의 규칙을 구분해야 한다. 두 번 오는 오전 1시는 낯선 오류보다, 일상의 시계 뒤에 있는 여러 약속을 보여 주는 재미있는 사례다.

이야기의 바탕이 된 자료
← 디지털 생활과 보안의 다른 이야기