`Calendar.UTCOnlyTimeZoneDatabase`
Calendar.UTCOnlyTimeZoneDatabase
Etc/UTC 타임존에서만 동작하는, Elixir에 내장된 타임존 데이터베이스예요.
그 외의 모든 타임존에 대해서는 {:error, :utc_only_time_zone_database}를 돌려줍니다.
본문
시간을 다룰 때 타임존은 피할 수 없는 주제예요. 같은 순간도 어느 지역에서 보느냐에 따라 표시되는 시각이 달라지니까요. Elixir의 Calendar 모듈은 이런 타임존 정보를 Calendar.TimeZoneDatabase라는 behaviour를 통해 얻는데, 그 behaviour의 구현체 중 하나가 바로 이 Calendar.UTCOnlyTimeZoneDatabase입니다.
이름에서 알 수 있듯 이 데이터베이스는 오직 UTC(Etc/UTC) 하나만 지원해요. 타임존 조회 요청이 들어왔을 때, Etc/UTC이면 해당 타임존 데이터를 돌려주고, 그 외의 어떤 타임존이든 간에 {:error, :utc_only_time_zone_database}를 반환합니다. 즉 "이 데이터베이스는 UTC만 다룰 줄 안다"는 사실을 오류 형태로 알려주는 거죠.
그렇다면 이런 제한적인 구현체는 왜 필요할까요? Elixir는 별도의 타임존 데이터를 내장하고 있지 않아서, 기본적으로 타임존 정보를 얻으려면 시스템이나 외부 데이터 소스에 의존해야 해요. 하지만 시스템의 타임존 데이터를 신뢰할 수 없는 환경이거나, 다른 타임존을 전혀 다룰 필요가 없는 경우에는 단순한 구현체가 유용합니다. 특히 분산 시스템에서 모든 서버가 UTC로 통일되어 있을 때는, 무거운 타임존 데이터베이스를 붙일 필요 없이 이 모듈만으로 충분할 때가 많아요.
실전에서는 Calendar.put_time_zone_database/1 같은 함수로 사용할 타임존 데이터베이스를 지정할 수 있어요. 어떤 상황에서는 이 UTCOnlyTimeZoneDatabase이면 충분하고, 실제 전 세계 타임존과 일광 절약 시간(DST)까지 정확히 다뤄야 하는 상황이라면 Calendar.TimeZoneDatabase가 정의하는 behaviour를 구현한, 더 완전한 데이터베이스를 선택하면 됩니다.
더 알아보기
- 타임존 데이터 소스가 지켜야 할 계약은
Calendar.TimeZoneDatabase문서에서 확인하세요. - 사용할 타임존 데이터베이스를 교체하는 방법은
Calendar모듈 문서에서 다룹니다. - Erlang의 기본 타임존 데이터는
:time_zone_database관련 문서를 참고할 수 있어요.