서버 로그를 열었더니 날짜 대신 1709251200이라는 숫자가 찍혀 있다. 에러가 아니다. 이건 Unix 타임스탬프로, 2024년 3월 1일 0시 0분 0초(UTC)를 의미한다. 컴퓨터는 날짜를 이런 숫자로 저장하고 처리한다.
Unix 타임스탬프란
1970년 1월 1일 00:00:00 UTC(Epoch)를 기준으로 경과한 초(second)의 수를 정수로 나타낸 것이다. 이 기준 시점을 'Epoch'라고 부른다.
- 타임스탬프 0
- 1970년 1월 1일 00:00:00 UTC
- 타임스탬프 1000000000
- 2001년 9월 9일 01:46:40 UTC (10억 초)
- 현재 타임스탬프
- 약 17억대 숫자. 2038년 1월 19일에 32비트 정수 범위를 초과하는 'Y2K38 문제'가 예고되어 있다
왜 날짜 대신 숫자를 쓸까
- 시간대 독립적 : "2024-03-01 09:00"은 한국 시간인지 미국 시간인지 모호하지만, 타임스탬프는 UTC 기준이라 전 세계 어디서든 같은 시점을 가리킨다
- 비교 연산이 빠르다 : 날짜 문자열 비교보다 숫자 비교가 훨씬 빠르다. 정렬, 필터링에 유리하다
- 저장 공간 절약 : "2024-03-01T09:00:00+09:00"은 25바이트지만, 타임스탬프는 4~8바이트면 된다
- 포맷 통일 : 날짜 표기법은 나라마다 다르지만(MM/DD vs DD/MM) 타임스탬프는 하나다
타임스탬프 ↔ 날짜 변환
로그 분석이나 디버깅 중에 타임스탬프를 사람이 읽을 수 있는 날짜로 바꿔야 할 때가 잦다. 타임스탬프 변환기에 숫자를 넣으면 로컬 시간, UTC, ISO 8601 형식으로 즉시 변환된다. 반대로 특정 날짜를 타임스탬프로 바꿀 수도 있다.
| 입력 | 결과 |
|---|---|
| 1709251200 (초) | 2024-03-01 09:00:00 (KST) |
| 1709251200000 (밀리초) | 2024-03-01 09:00:00 (KST) |
| 2026-03-01 00:00:00 | 1772150400 (초) |
주의 초 단위(10자리)와 밀리초 단위(13자리)를 혼동하면 날짜가 수만 년 전이나 후로 튀어버린다. JavaScript의 Date.now()는 밀리초를, Python의 time.time()은 초를 반환하니 주의하자.
개발 언어별 현재 타임스탬프 얻기
// JavaScript (밀리초)
Date.now();
// Python (초)
import time
time.time()
// Java (밀리초)
System.currentTimeMillis();
서버 간 시간 동기화, 로그 분석, API 통신에서 타임스탬프는 피할 수 없는 개념이다. 숫자 하나를 날짜로 바꾸는 게 전부인데, 알아두면 디버깅 시간이 확실히 줄어든다.