에러 로그를 뒤지다 보면 1709251200 같은 숫자만 적혀 있는 시간 필드를 만난다. 2024년 3월 1일인데, 숫자만 보고는 감조차 오지 않는다. 이 숫자가 Unix 타임스탬프다.
Unix 타임스탬프의 원리
1970년 1월 1일 00:00:00 UTC를 기준점(Epoch)으로 잡고, 거기서 몇 초가 흘렀는지를 숫자 하나로 나타낸 것이다.
0= 1970-01-01 00:00:00 UTC1000000000= 2001-09-091709251200= 2024-03-011893456000= 2030-01-01
날짜·시간·타임존 정보를 숫자 하나로 압축할 수 있어서 데이터베이스, 서버 로그, API에서 시간을 저장하고 비교하는 표준으로 쓰인다.
초 단위와 밀리초 단위
타임스탬프에는 두 가지 단위가 있다. 자릿수로 구분할 수 있다.
| 단위 | 자릿수 | 예시 | 주요 사용처 |
|---|---|---|---|
| 초(seconds) | 10자리 | 1709251200 | PHP, Python, MySQL |
| 밀리초(ms) | 13자리 | 1709251200000 | JavaScript, Java |
JavaScript의 Date.now()는 밀리초를, Python의 time.time()는 초를 반환한다. 단위를 혼동하면 날짜가 50년 뒤로 튀어버리니 주의해야 한다.
변환이 필요한 순간
- 로그 분석 — 에러 발생 시점을 사람이 읽을 수 있는 날짜로 확인할 때
- API 디버깅 — 응답에 포함된 타임스탬프가 올바른 시간인지 검증할 때
- DB 쿼리 — 특정 기간의 데이터를 타임스탬프 범위로 필터링할 때
- 시간대 비교 — UTC와 로컬 시간(KST)의 차이를 확인할 때
빠르게 변환하는 법
타임스탬프 변환기에 숫자를 넣으면 로컬 시간, UTC, ISO 8601 형식으로 동시에 변환된다. 반대로 날짜를 입력해서 타임스탬프 숫자를 뽑는 것도 가능하다. 페이지 상단에 현재 타임스탬프가 1초마다 갱신되면서 표시되니, 지금 시점의 값을 바로 복사할 수도 있다.
참고 32비트 시스템에서는 타임스탬프가 2038년 1월 19일에 오버플로우된다. 이른바 "Y2K38 문제"다. 64비트 시스템에서는 이 문제가 없으니, 새로 구축하는 시스템이라면 걱정하지 않아도 된다.
타임스탬프는 개발자가 매일 마주치는 숫자다. 변환 도구 하나 북마크해두면 로그 분석이나 데이터 검증에서 시간을 아낄 수 있다.