유틸리티

타임스탬프 변환, 로그 속 숫자를 날짜로 읽는 법

서버 로그 파일을 열었더니 1709251200이라는 숫자만 찍혀 있다. 에러 발생 시점을 찾아야 하는데, 이 숫자가 3월인지 2월인지 바로 판단이 안 된다. 개발자가 아니더라도 API 응답이나 데이터 파일에서 이런 숫자를 만날 일은 꽤 있다.

Unix 타임스탬프가 뭔가

1970년 1월 1일 자정(UTC 기준)부터 현재까지 흘러간 초의 수를 정수로 표현한 것이다. 사람이 읽기엔 불편하지만, 컴퓨터 입장에서는 날짜를 비교하거나 정렬할 때 숫자 하나면 충분하니까 이 방식을 쓴다.

예시 1709251200 → 2024년 3월 1일 09:00:00 (KST)
숫자가 클수록 최근 시점이다. 현재 타임스탬프는 약 17억 대에 있다.

초 단위와 밀리초 단위 구분

같은 타임스탬프라도 시스템마다 단위가 다르다. JavaScript의 Date.now()는 밀리초를 반환하고, Python의 time.time()은 초 단위를 반환한다. 자릿수만 보면 바로 구분할 수 있다.

단위자릿수예시대표 환경
10자리1709251200Unix/Linux, Python, PHP
밀리초13자리1709251200000JavaScript, Java, Dart
마이크로초16자리1709251200000000일부 DB, 고정밀 로그

밀리초 값을 초 단위 변환기에 넣으면 2054년 같은 엉뚱한 날짜가 나온다. 변환 전에 자릿수부터 확인하는 습관이 필요하다.

타임존 실수 피하는 법

타임스탬프 자체는 항상 UTC 기준이다. 그런데 변환 결과를 읽을 때 로컬 시간(KST, UTC+9)인지 UTC인지를 혼동하면 9시간이 어긋난다.

  • 로그에 "2024-03-01 00:00:00"이라고 찍혀 있다면, UTC인지 KST인지 먼저 확인한다
  • UTC 기준 0시는 한국 시간으로 오전 9시다
  • 서버가 UTC로 운영되는 경우가 많으므로, 장애 시점을 한국 시간으로 환산해서 봐야 한다
// JavaScript에서 KST로 변환
new Date(1709251200 * 1000).toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })
// → "2024. 3. 1. 오전 9:00:00"

빠르게 변환하는 방법

터미널에서 date -d @1709251200 같은 명령어를 쓸 수도 있지만, 로컬/UTC/ISO 8601 형식을 한눈에 비교하려면 웹 도구가 낫다. 타임스탬프 변환기에 숫자를 넣으면 세 가지 형식이 동시에 출력되고, 반대로 날짜를 골라 초/밀리초 타임스탬프로 바꾸는 것도 된다. 현재 타임스탬프가 실시간으로 갱신되니까 지금 시점의 값을 바로 복사해서 쓸 수 있다.

API 연동이나 데이터 마이그레이션 중에 타임스탬프를 자주 만진다면, 브라우저 북마크에 넣어두고 필요할 때 꺼내 쓰면 된다.