0 투표
개발
IANA 타임존(Database, Time Zone Identifier 등)과 관련된 공식 문서, 표준 정의, 활용 사례 자료를 한곳에 정리하고 공유하고자 합니다.
DB 설계, 서버 시간 처리, 글로벌 서비스 시간 표시 기준 등에 참고할 수 있는 신뢰도 높은 자료 위주로 정리된 정보가 있으면 안내 부탁드립니다.

2 답변

0 투표

IANA 타임존을 DB 설계에 적용할 때의 핵심은 시간은 항상 UTC로 저장하고, 타임존은 IANA 식별자로 별도 관리하는 것입니다. 아래 기준이 일반적으로 가장 안정적이고 확장성이 좋습니다.


1. 시간 저장 원칙

  • 모든 datetime은 UTC 기준으로 저장
    • created_at, updated_at, answered_at
  • DB 컬럼 타입은 가능하면 TIMESTAMP WITH TIME ZONE(PostgreSQL) 또는 UTC 기준 DATETIME 사용
  • 애플리케이션 레벨에서만 타임존 변환 처리

2. IANA 타임존 관리 방식

  • 사용자 또는 콘텐츠 기준으로 IANA 타임존 ID 저장
    • 예: Asia/Seoul, America/New_York
  • 예시 컬럼
    • timezone VARCHAR(64)
  • UTC Offset(+09:00 등)는 저장하지 않음
    • DST(서머타임) 변경으로 인해 오차 발생 가능

3. 질문 / 답변 테이블 설계 예시

(1) 질문 테이블

  • question_id
  • title
  • content
  • author_user_id
  • author_name_snapshot
  • created_at_utc
  • timezone

(2) 답변 테이블

  • answer_id
  • question_id
  • content
  • author_user_id
  • author_name_snapshot
  • created_at_utc
  • timezone

작성 당시의 표시명을 유지해야 한다면 author_name_snapshot을 함께 저장하는 방식이 유리합니다.


4. 사용자명 저장 전략

  • user_id + snapshot 병행 추천
    • user_id → 정합성, 권한 관리
    • snapshot → 닉네임 변경 이력 보존
  • 커뮤니티 / Q&A 서비스에서는 스냅샷 방식이 실무적으로 많이 사용됨

5. 프론트엔드 표시 흐름

  1. 서버 → UTC datetime + IANA timezone 전달
  2. 클라이언트 → 사용자 로컬 타임존 또는 저장된 IANA 기준으로 변환
  3. 표준 라이브러리 사용 권장
    • JavaScript: Intl.DateTimeFormat
    • Backend: moment-timezone, luxon, java.time.ZoneId

6. 참고할 만한 IANA 공식 자료

  • IANA Time Zone Database (tz database)
  • RFC 6557 / Olson database
  • 각 언어별 timezone 처리 공식 문서

정리하면

  • DB = UTC + IANA ID
  • Offset 계산은 하지 않음
  • 변환은 항상 애플리케이션/클라이언트에서 수행

이 구조가 글로벌 서비스, 장기 운영, DST 대응까지 가장 안전합니다.

0 투표

아래는 IANA(Time Zone Database, tzdb) 자료를 구할 때 “공식/표준/실무” 기준으로 쓸만한 링크를 한 번에 모은 리스트입니다. (표 + 마지막에 전체 링크 모음까지 포함)

IANA 타임존 자료 링크 리스트 (전체)

구분 자료/페이지 용도 링크
공식(필수) IANA Time Zone Database 메인 tzdb 공식 진입점(배포 방식, 안내, 링크) [1]
공식(필수) tz-link (IANA/Olson tzdb 요약 페이지) tzdb 개념/운영/링크 정리(입문+레퍼런스) [2]
공식(필수) tzdata/tzcode “최신 릴리즈” 안내 최신 버전 받는 방법(편의 링크 안내) [2]
공식(파일) zone.tab (IANA 원본 파일) “대표 타임존 선택”용 테이블 [3]
공식(파일) zone1970.tab (IANA 원본 파일) 1970년 이후 기준의 타임존 구역 정리 [4]
소스(권장) tzdb 소스 레포 (eggert/tz) tzdb 데이터+도구(zic 등) 원본/사실상 표준 [5]
배포(공식 채널) IANA FTP 배포 tzdata/tzcode 아카이브 다운로드 [6]
배포(공식 채널) IANA rsync 배포 서버에서 주기적으로 tzdb 동기화 [7]
메일링(필수) tz-announce (릴리즈 공지) “새 tzdb 버전 나왔는지” 가장 빠르게 확인 [8]
메일링(필수) tz 토론 리스트(메인) 정책 변경/이슈/제안 토론 추적 [9]
표준(필수) RFC 9636 (TZif 포맷) tzfile(TZif) 포맷 표준(최신) [10]
표준(참고) RFC 8536 (구버전 TZif) 9636 이전 표준(호환/레거시 참고) [11]
DB(벤더 문서) MySQL Time Zone Support MySQL에서 named time zone 테이블/갱신 방법 [12]
DB(벤더 문서) PostgreSQL Date/Time Types timestamptz/timezone 동작 원리 공식 문서 [13]
라이브러리(JS) Luxon zones 문서 IANA ID 기반 setZone 사용/주의점 [14]
라이브러리(JS,레거시) Moment-Timezone Docs tzdb 데이터 포함 빌드/데이터 범위 [15]
라이브러리(Java) Java ZoneId (Oracle) Java 기본 TZDB가 IANA 기반임을 명시 [16]
라이브러리(.NET) .NET Globalization & ICU IANA ID로 TimeZoneInfo 생성(크로스플랫폼) [17]
라이브러리(.NET) Noda Time TZDB 가이드 tzdb 업데이트/배포/운영 방식 참고 [18]
매핑 도구(.NET) TimeZoneConverter Windows↔IANA ID 변환(실무에서 자주 필요) [19]
표시명/로케일(참고) Unicode CLDR 메인 “타임존 표시명(예: Pacific Time)” 표준 데이터 [20]
표시명/로케일(참고) ICU TimeZone 문서 ICU의 타임존 데이터/업데이트 [21]

전체 링크 모음 (복사용)

[1] https://www.iana.org/time-zones
[2] https://data.iana.org/time-zones/tz-link.html
[3] https://data.iana.org/time-zones/data/zone.tab
[4] https://data.iana.org/time-zones/tzdb/zone1970.tab
[5] https://github.com/eggert/tz
[6] ftp://ftp.iana.org/tz/
[7] rsync://rsync.iana.org/tz/
[8] https://lists.iana.org/hyperkitty/list/[email protected]/
[9] https://lists.iana.org/postorius/lists/tz.iana.org/
[10] https://www.rfc-editor.org/rfc/rfc9636.html
[11] https://datatracker.ietf.org/doc/html/rfc8536
[12] https://dev.mysql.com/doc/refman/8.3/en/time-zone-support.html
[13] https://www.postgresql.org/docs/current/datatype-datetime.html
[14] https://github.com/moment/luxon/blob/master/docs/zones.md
[15] https://momentjs.com/timezone/docs/
[16] https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html
[17] https://learn.microsoft.com/en-us/dotnet/core/extensions/globalization-icu
[18] https://nodatime.org/3.2.x/userguide/tzdb
[19] https://github.com/mattjohnsonpint/TimeZoneConverter
[20] https://cldr.unicode.org/
[21] https://unicode-org.github.io/icu/userguide/datetime/timezone/
구로역 맛집 시흥동 맛집
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
...