← 블로그 목록

Unix Timestamp 완벽 가이드: 시간 처리의 기초

Unix Timestamp의 개념, 변환, 시간대 처리까지. 프로그래밍에서 시간을 정확히 다루세요.

Unix Timestamp, 프로그래밍의 표준 시간

Unix Timestamp는 1970년 1월 1일 00:00:00 UTC를 기준으로 경과한 초의 수입니다. 모든 프로그래밍 언어, 데이터베이스, API에서 표준으로 사용됩니다.

Unix Timestamp를 정확히 이해하면 시간 처리 관련 버그를 줄이고, 국제화 서비스를 더 쉽게 만들 수 있습니다.

1부: Unix Timestamp 기초

Unix Timestamp란?

1970-01-01 00:00:00 UTC를 기준(Epoch)으로 경과한 초

현재 시간:
2026-03-04 12:00:00 UTC

Unix Timestamp:
1741180800 (초 단위)
1741180800000 (밀리초 단위)

왜 1970년일까?

Unix 운영체제가 1970년을 기준으로 설정했기 때문입니다. 이것이 표준이 되어 지금까지 사용됩니다.

Unix Timestamp의 크기

32비트 (초 단위):
- 범위: 0 ~ 4,294,967,295
- 2038년 1월 19일 이후 오버플로우 (Y2K38 문제)
- 구형 시스템의 문제

64비트 (밀리초 또는 나노초):
- 범위: 매우 큼 (수십억 년)
- 현대 시스템의 표준

2부: 시간 변환

현재 시간 → Unix Timestamp

JavaScript

// 밀리초 단위
const timestamp = Date.now();
// 1741180800000

// 초 단위
const timestamp = Math.floor(Date.now() / 1000);
// 1741180800

Python

import time
from datetime import datetime

# 현재 시간 (초 단위)
timestamp = time.time()
# 1741180800.5

# 정수 변환
timestamp = int(time.time())
# 1741180800

Linux/Mac

$ date +%s
1741180800

Unix Timestamp → 현재 시간

JavaScript

const timestamp = 1741180800; // 초 단위

// Date 객체 생성
const date = new Date(timestamp * 1000);
// 2026-03-04T12:00:00.000Z

// 읽기 쉬운 형식
console.log(date.toISOString());
// 2026-03-04T12:00:00.000Z

Python

from datetime import datetime

timestamp = 1741180800

# UTC 시간
dt_utc = datetime.utcfromtimestamp(timestamp)
# 2026-03-04 12:00:00

# 현지 시간
dt_local = datetime.fromtimestamp(timestamp)
# 2026-03-04 21:00:00 (한국 시간: UTC+9)

3부: 시간대 (Timezone) 처리

UTC와 로컬 시간

UTC (협정 세계시):
2026-03-04 12:00:00 UTC

로컬 시간 (한국):
2026-03-04 21:00:00 KST (UTC+9)

Unix Timestamp는 항상 UTC 기준!

시간대 변환

JavaScript (Intl API)

const timestamp = 1741180800;
const date = new Date(timestamp * 1000);

// 한국 시간
const koreaTime = new Intl.DateTimeFormat('ko-KR', {
  timeZone: 'Asia/Seoul'
}).format(date);
// 2026. 3. 4.

// 미국 시간
const usaTime = new Intl.DateTimeFormat('en-US', {
  timeZone: 'America/New_York'
}).format(date);
// 3/4/2026

Python (pytz)

from datetime import datetime
import pytz

timestamp = 1741180800
dt_utc = datetime.utcfromtimestamp(timestamp)

# 한국 시간
tz_korea = pytz.timezone('Asia/Seoul')
dt_korea = dt_utc.replace(tzinfo=pytz.UTC).astimezone(tz_korea)
# 2026-03-04 21:00:00+09:00

# 미국 시간
tz_usa = pytz.timezone('America/New_York')
dt_usa = dt_utc.replace(tzinfo=pytz.UTC).astimezone(tz_usa)
# 2026-03-04 07:00:00-05:00

4부: 자주 하는 시간 계산

1. 어제 이 시간

const now = Math.floor(Date.now() / 1000);
const yesterday = now - (24 * 60 * 60);  // 86,400초

2. 한 주 전

const week_ago = now - (7 * 24 * 60 * 60);  // 604,800초

3. 한 달 전 (정확하지 않음)

const month_ago = now - (30 * 24 * 60 * 60);  // 근사값
// 더 정확한 방법: Date 객체 사용

const date = new Date(now * 1000);
date.setMonth(date.getMonth() - 1);
const timestamp_month_ago = Math.floor(date.getTime() / 1000);

4. 경과 시간

const startTime = 1741180800;
const endTime = 1741267200;
const elapsedSeconds = endTime - startTime;  // 86,400초 = 1일

5부: 실제 사용 사례

1. 로그 기록

{
  "timestamp": 1741180800,
  "event": "user_login",
  "user_id": "user123"
}

→ 모든 로그를 Unix Timestamp로 저장하면 비교, 정렬 용이

2. API 응답

{
  "id": "123",
  "created_at": 1741180800,
  "updated_at": 1741267200,
  "name": "John Doe"
}

→ 클라이언트에서 자신의 시간대로 변환

3. 데이터베이스

CREATE TABLE events (
  id INT PRIMARY KEY,
  event_name VARCHAR(100),
  timestamp INT,  // Unix Timestamp
  INDEX(timestamp)
);

SELECT * FROM events WHERE timestamp > 1741180800;

4. 캐시 만료

const cacheData = {
  value: "cached content",
  expiry: Math.floor(Date.now() / 1000) + (60 * 60)  // 1시간 후
};

// 캐시 확인
if (cacheData.expiry > Math.floor(Date.now() / 1000)) {
  // 캐시 유효
} else {
  // 캐시 만료
}

6부: 자주 하는 실수

1. 초와 밀리초 혼동

❌ 밀리초를 초 단위로 저장

✅ 일관된 단위 선택 (보통 초 단위)

2. 로컬 시간 저장

❌ 데이터베이스에 로컬 시간 저장

✅ 항상 UTC 기준 저장

3. 시간대 무시

❌ "2026-03-04 12:00:00"만 저장 (시간대 정보 없음)

✅ Unix Timestamp 또는 ISO 8601 형식 사용

4. 32비트 사용

❌ 32비트 Int (2038년 오버플로우)

✅ 64비트 Long/BigInt 사용

마무리

Unix Timestamp는 시간 처리의 표준입니다. UTC를 기준으로 저장하고, 필요할 때만 로컬 시간대로 변환하면 국제화 서비스를 쉽게 만들 수 있습니다.