서버 로그에 1740902400이라는 숫자가 찍혀 있다. 이게 언제를 의미하는 건지 바로 알 수 없다. 이 숫자는 Unix 타임스탬프로, 1970년 1월 1일 0시 0분 0초(UTC)부터 흘러간 초(second)의 수다.
Unix 타임스탬프의 원리
컴퓨터는 시간을 하나의 숫자로 저장한다. 기준점(Epoch)인 1970년 1월 1일 자정(UTC)부터 초를 세기 시작해서:
0= 1970-01-01 00:00:00 UTC86400= 1970-01-02 00:00:00 UTC (하루 = 86,400초)1740902400= 2025-03-02 12:00:00 UTC
날짜를 문자열("2025-03-02")로 저장하면 형식이 제각각이고 비교도 어렵다. 숫자 하나로 표현하면 저장, 비교, 정렬이 간단해진다.
초(seconds)와 밀리초(milliseconds)
| 단위 | 자릿수 | 예시 | 사용처 |
|---|---|---|---|
| 초 | 10자리 | 1740902400 | 서버 로그, PHP, Python |
| 밀리초 | 13자리 | 1740902400000 | JavaScript, Java, API 응답 |
자릿수가 10개면 초 단위, 13개면 밀리초 단위다. 변환할 때 단위를 맞추지 않으면 1970년대 날짜가 나오거나 기원후 수만 년이 나오는 경우가 있다.
UTC와 로컬 시간
타임스탬프 자체는 시간대(timezone)가 없다. 전 세계 어디서든 같은 순간을 같은 숫자로 표현한다. 이 숫자를 사람이 읽을 수 있는 날짜로 바꿀 때 시간대가 적용된다.
예시1740902400
UTC: 2025-03-02 12:00:00
KST(한국): 2025-03-02 21:00:00 (UTC+9)
서버에서 받은 타임스탬프를 한국 시간으로 보려면 9시간을 더해야 한다. 코드에서는 시간대를 명시적으로 지정하지 않으면 버그가 생기기 쉬운 부분이다.
개발에서 자주 마주치는 상황
- API 응답에 타임스탬프가 들어올 때
- 숫자로 된 생성일, 수정일을 사람이 읽을 수 있는 날짜로 변환해서 화면에 표시해야 한다.
- 로그 분석
- 서버 로그의 타임스탬프를 실제 날짜/시간으로 변환해서 특정 시점의 이벤트를 추적한다.
- 날짜 비교/계산
- 두 날짜 사이의 간격을 구할 때 타임스탬프 뺄셈이 가장 쉽다. 결과를 86,400으로 나누면 일수가 나온다.
로그에 찍힌 숫자의 정체가 궁금하거나, 특정 날짜를 타임스탬프로 바꿔야 할 때 타임스탬프 변환기에 값을 넣으면 로컬 시간, UTC, ISO 8601 형식으로 동시에 결과가 나온다. 페이지 상단에 현재 타임스탬프가 실시간으로 갱신되니 "지금 이 순간"의 값이 필요할 때도 바로 확인된다.
참고 2038년 1월 19일에 32비트 정수로 표현 가능한 타임스탬프가 한계에 도달한다(2,147,483,647초). 이른바 "Y2K38 문제"인데, 대부분의 최신 시스템은 64비트로 전환되어 있어 실제 영향은 제한적이다.
타임스탬프는 시간을 다루는 가장 단순하고 확실한 방법이다. 숫자 하나로 전 세계 어디서든 같은 순간을 가리킬 수 있다는 게 핵심이다.