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);
// 1741180800Python
import time
from datetime import datetime
# 현재 시간 (초 단위)
timestamp = time.time()
# 1741180800.5
# 정수 변환
timestamp = int(time.time())
# 1741180800Linux/Mac
$ date +%s
1741180800Unix 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.000ZPython
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/2026Python (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:004부: 자주 하는 시간 계산
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를 기준으로 저장하고, 필요할 때만 로컬 시간대로 변환하면 국제화 서비스를 쉽게 만들 수 있습니다.