유틸리티

Unix 타임스탬프란? 날짜 변환 방법과 개발에서 쓰는 이유

서버 로그에 1709251200 같은 숫자가 찍혀 있다. 이게 2024년 3월 1일 자정(UTC)인데, 숫자만 보고는 알 수 없다. 이 숫자가 Unix 타임스탬프다.

Unix 타임스탬프의 개념

1970년 1월 1일 00:00:00(UTC)부터 지금까지 흐른 초(second)의 수를 숫자로 나타낸 것이다. 날짜와 시간을 하나의 정수로 표현하기 때문에 프로그래밍에서 날짜 비교, 정렬, 연산이 간단해진다. 시간대(timezone)에 상관없이 동일한 순간을 같은 숫자로 가리킨다는 장점도 있다.

초 단위 vs 밀리초 단위

구분자릿수예시사용처
초(seconds)10자리1709251200Unix/Linux, PHP, Python
밀리초(ms)13자리1709251200000JavaScript, Java

JavaScript의 Date.now()는 밀리초를 반환하고, Python의 time.time()은 초 단위를 반환한다. 언어에 따라 단위가 다르니까 변환할 때 주의해야 한다.

타임스탬프를 변환하는 법

로그에서 본 숫자가 언제인지 확인하려면 타임스탬프 변환기에 숫자를 넣으면 된다. 로컬 시간, UTC, ISO 8601 세 가지 형식으로 변환 결과가 나온다. 반대로 특정 날짜를 타임스탬프로 바꿀 수도 있어서 API 테스트나 쿼리 작성 시 유용하다.

참고 현재 Unix 타임스탬프가 실시간으로 표시되니까, API에 현재 시각을 넣어야 할 때 바로 복사해서 쓸 수 있다.

2038년 문제란

32비트 정수로 저장할 수 있는 최대 타임스탬프는 2,147,483,647이다. 이 값은 2038년 1월 19일 03:14:07(UTC)에 해당한다. 이 시점을 넘으면 숫자가 음수로 넘어가서(오버플로우) 1901년으로 돌아가는 문제가 발생한다. 현재 대부분의 시스템은 64비트로 전환했기 때문에 일상적으로 문제가 될 가능성은 낮지만, 레거시 시스템에서는 여전히 주의가 필요하다.

개발에서 자주 쓰는 상황

  • 서버 로그 분석 — 타임스탬프로 기록된 이벤트 시각을 사람이 읽을 수 있는 날짜로 변환
  • API 요청 — 시작/종료 시간을 파라미터로 보낼 때 타임스탬프 형식 사용
  • 캐시 만료 — 현재 타임스탬프 + TTL로 만료 시점 계산
  • DB 쿼리WHERE created_at > 1709251200 같은 조건 작성

타임스탬프는 백엔드 개발에서 거의 매일 마주치는 개념이다. 변환 도구를 하나 알아두면 디버깅할 때 날짜를 머릿속으로 계산하는 수고를 덜 수 있다.