날짜·시간

유닉스 타임스탬프 완전 정복: 초와 밀리초, 시간대, 2038년 문제

로그에 찍힌 1700000000이 언제인지, 왜 어떤 시스템은 13자리 숫자를 쓰는지, 왜 시간이 9시간씩 어긋나는지. 시간 버그의 대부분은 몇 가지 개념만 알면 피할 수 있습니다.

유닉스 타임스탬프란

유닉스 타임스탬프(유닉스 시간, 에포크 시간)는 1970년 1월 1일 0시 0분 0초 UTC로부터 몇 초가 지났는지를 하나의 정수로 나타낸 것입니다. 이 기준 시점을 '유닉스 에포크'라고 부릅니다. 0은 1970-01-01 00:00:00 UTC, 1700000000은 2023-11-14 22:13:20 UTC입니다.

날짜를 숫자 하나로 표현하면 장점이 많습니다. 두 시점의 차이를 뺄셈 한 번으로 구할 수 있고, 정렬과 비교가 쉬우며, 시간대나 날짜 형식과 무관하게 전 세계 어디서나 같은 순간을 같은 값으로 가리킵니다.

0           → 1970-01-01 00:00:00 UTC
1700000000  → 2023-11-14 22:13:20 UTC
1735689600  → 2025-01-01 00:00:00 UTC
2147483647  → 2038-01-19 03:14:07 UTC

10자리와 13자리: 초인가 밀리초인가

요즘 시점의 초 단위 타임스탬프는 10자리입니다. 그런데 자바스크립트의 Date.now()나 자바의 System.currentTimeMillis()는 밀리초 단위라서 13자리 숫자를 돌려줍니다. 이 둘을 섞으면 1970년 1월 21일 같은 엉뚱한 날짜나 5만 년 뒤의 날짜가 나옵니다.

구분법은 간단합니다. 자릿수를 세어 10자리면 초, 13자리면 밀리초, 16자리면 마이크로초입니다. API 문서에 단위가 명시되어 있지 않다면 반드시 확인하고, 변환할 때는 1,000으로 나누거나 곱해 단위를 맞추세요.

타임스탬프에는 시간대가 없다

가장 중요한 사실은 타임스탬프 자체에는 시간대가 없다는 것입니다. 1700000000은 서울에서도 뉴욕에서도 같은 '순간'입니다. 시간대는 이 숫자를 사람이 읽는 날짜와 시각으로 표시할 때 비로소 적용됩니다. 같은 값이 UTC로는 22시 13분, 한국 시간(UTC+9)으로는 다음 날 오전 7시 13분입니다.

'9시간 차이 버그'는 대부분 이 원칙을 어겨서 생깁니다. 서버는 UTC로 저장했는데 화면은 그 값을 한국 시간으로 착각해 표시하거나, 반대로 한국 시간 문자열을 시간대 표시 없이 저장해 UTC로 읽는 경우입니다. 저장과 전송은 UTC(또는 타임스탬프)로, 표시는 사용자 시간대로 하는 것이 원칙입니다.

서머타임이 만드는 함정

한국은 현재 서머타임을 쓰지 않지만, 미국과 유럽 등은 매년 봄에 시계를 한 시간 앞당기고 가을에 되돌립니다. 그래서 '뉴욕은 한국보다 14시간 느리다'는 계산이 일 년 중 일부 기간에만 맞고, 나머지 기간에는 13시간 차이입니다.

고정 오프셋(-05:00)이 아니라 America/New_York 같은 IANA 시간대 이름을 써야 서머타임 전환이 자동으로 반영됩니다. 해외 팀과 회의 시간을 정하거나 예약 작업을 설정할 때는 시간대 계산기로 해당 날짜 기준의 실제 시차를 확인하는 습관이 중요합니다.

2038년 문제

타임스탬프를 부호 있는 32비트 정수로 저장하면 최댓값은 2,147,483,647입니다. 이 값은 2038년 1월 19일 03:14:07 UTC이고, 1초 뒤에는 숫자가 넘쳐 음수가 되면서 1901년으로 돌아가 버립니다. 이것이 '2038년 문제'입니다.

최신 운영체제와 언어는 대부분 64비트 시간을 쓰지만, 오래된 임베디드 장비, 데이터베이스의 INT 컬럼, 파일 형식 등에는 아직 32비트가 남아 있습니다. 만료일이 먼 인증서나 30년 만기 대출처럼 미래 날짜를 다루는 시스템은 지금도 이 한계에 부딪힐 수 있으므로, 새로 설계할 때는 64비트 정수나 날짜 전용 타입을 쓰세요.

윤초와 정밀도

유닉스 시간은 하루를 정확히 86,400초로 계산하고 윤초를 세지 않습니다. 그래서 천문학적으로 정확한 경과 시간과 아주 미세하게 다를 수 있지만, 일반적인 애플리케이션에서는 신경 쓸 필요가 없습니다. 국제단위계를 관리하는 국제도량형총회는 2035년까지 윤초를 폐지하기로 결정한 바 있습니다.

AIBIZAP 타임스탬프 변환기에 숫자를 넣으면 초·밀리초를 자동으로 판별해 UTC와 원하는 시간대의 날짜로 보여 줍니다. 해외 시간 비교는 시간대 계산기를, 정해진 시각에 반복되는 작업은 크론 생성기를 함께 활용해 보세요.

이 도구로 직접 해 보세요

다른 가이드

전체 가이드