RFC 3339이란?
RFC 3339("인터넷 날짜/시간 타임스탬프")는 인터넷 프로토콜에서 사용하기 위해 ISO 8601의 프로파일을 정의한 IETF 표준입니다. 2002년에 발행되어 HTTP 헤더, RSS/Atom 피드, JWT 토큰, OpenAPI 명세, 대부분의 현대 웹 API에서 사용됩니다. 핵심 요건은 모든 datetime에 시간대 오프셋이 포함되어야 한다는 것입니다.
RFC 3339 형식
2024-03-01T14:30:00Z # UTC (Z 접미사 필수)
2024-03-01T14:30:00+09:00 # 양수 오프셋 (KST)
2024-03-01T14:30:00-05:00 # 음수 오프셋 (EST)
2024-03-01T14:30:00.456Z # 밀리초 포함
RFC 3339 vs ISO 8601: 주요 차이점
- 시간대 필수: RFC 3339는 항상 시간대 오프셋이 필요합니다. ISO 8601은 오프셋 없는 "현지 시간"을 허용합니다.
- 주 날짜 없음: ISO 8601의 주 형식(
2024-W09-5)은 RFC 3339에서 허용되지 않습니다. - 서수 날짜 없음:
2024-061은 유효한 ISO 8601이지만 RFC 3339가 아닙니다. - 엄격한 부분집합: 유효한 RFC 3339 타임스탬프는 모두 유효한 ISO 8601이지만, 반대는 성립하지 않습니다.
코드에서 RFC 3339 파싱하기
# Python 3.11+
from datetime import datetime
dt = datetime.fromisoformat("2024-03-01T14:30:00+09:00")
# Python 3.10 이하 — dateutil 사용
from dateutil.parser import parse
dt = parse("2024-03-01T14:30:00+09:00")
# JavaScript
new Date("2024-03-01T14:30:00Z")
# Go
t, err := time.Parse(time.RFC3339, "2024-03-01T14:30:00Z")
권장 사항
API, 설정 파일, 로그의 모든 datetime 값에 RFC 3339 형식을 사용하세요. 가장 널리 지원되는 인터넷 datetime 형식이며, 시간대를 반드시 명시해야 하므로 버그를 유발하는 모호성을 방지합니다.