서버 로그에 1709251200이라는 숫자가 찍혀 있다. 이게 날짜라는 건 아는데, 2024년 3월인지 2월인지 바로 읽히지 않는다. Unix 타임스탬프는 사람이 읽기 불편한 대신 컴퓨터가 처리하기 편한 시간 표현 방식이다.
Unix 타임스탬프란
1970년 1월 1일 00:00:00 UTC를 기준점(Epoch)으로, 그때부터 흘러간 초(seconds)의 수를 숫자로 나타낸 것이다.
- 타임스탬프 0
- 1970-01-01 00:00:00 UTC. Unix의 시간 원점이다.
- 타임스탬프 1709251200
- 2024-03-01 00:00:00 UTC. 약 17억 초가 흘렀다.
- 타임스탬프 1000000000
- 2001-09-09 01:46:40 UTC. 10억 초 시대의 시작.
숫자가 커지면 직관적으로 읽기 어렵다. 하지만 시간을 비교하거나 차이를 계산할 때는 뺄셈 한 번이면 끝나서, 프로그래밍에서는 날짜 문자열보다 타임스탬프가 훨씬 다루기 쉽다.
초 단위와 밀리초 단위
| 단위 | 자릿수 | 예시 | 사용처 |
|---|---|---|---|
| 초 (seconds) | 10자리 | 1709251200 | 서버 로그, Unix 시스템 |
| 밀리초 (ms) | 13자리 | 1709251200000 | JavaScript, Java, API 응답 |
로그에 찍힌 숫자가 10자리면 초 단위, 13자리면 밀리초 단위다. 변환할 때 단위를 잘못 선택하면 1970년대 날짜가 나오니 자릿수를 먼저 확인해야 한다.
타임스탬프를 날짜로 바꾸는 법
코드에서 변환할 수도 있지만, 로그를 확인하거나 디버깅할 때는 웹 도구가 빠르다. 타임스탬프 변환기에 숫자를 붙여넣으면 로컬 시간, UTC, ISO 8601 세 가지 형식으로 변환된 날짜가 나온다. 반대로 날짜를 입력하면 초 단위와 밀리초 단위 타임스탬프가 동시에 표시된다.
현재 시각의 타임스탬프가 실시간으로 표시되니 API 테스트용 값을 뽑을 때도 편하다.
개발에서 타임스탬프를 쓰는 이유
- 타임존 독립 — UTC 기준 숫자 하나로 전 세계 어디서든 같은 시점을 나타낸다. "한국시간 오후 3시"는 맥락 없이 모호하지만, 타임스탬프는 절대값이다.
- 비교 용이 — 두 시점의 차이를 구하려면 빼기만 하면 된다. 날짜 문자열로 비교하면 파싱부터 해야 한다.
- 저장 효율 — 정수 하나라서 DB에 저장할 때 크기가 작고 인덱싱이 빠르다.
참고 2038년 1월 19일에 32비트 시스템의 타임스탬프가 오버플로우되는 "2038년 문제"가 있다. 대부분의 현대 시스템은 64비트로 전환되어 걱정할 필요는 없지만, 레거시 시스템에서는 여전히 주의가 필요하다.
1709251200이 2024년 3월 1일이라는 걸 외울 필요는 없다. 변환기 하나면 3초에 끝나는 일이다.