이슈 해결과정 기록

글로벌 서비스 운영을 위한 API 설계 방법 (feat. Timezone)

PI.314 2022. 11. 14. 20:31

글로벌 서비스를 운영하려면 Timezone과 Offset에 대한 개념에 대해 이해가 필요하다.

 

Timezone

호주 Timezone 정보

타임존은 동일한 로컬 시간을 따르는 지역을 의미하며, 주로 해당 국가에 의해 법적으로 지정된다. 보통 국가별로 각자의 고유한 타임존을 사용하고 있으며, 호주나 미국처럼 면적이 넓은 나라인 경우 지역별로 각기 다른 타임존을 사용하기도 한다. 

 

Offset

서울 Timzone 정보

그리고 경도별로 조정된 시간의 차이를 Offset이라고하는데, 경도에 따라 국가 및 지역을 구분해서 대략적인 Offset으로 통일하고 있다.

서울의 경우 Offset값이 +09:00인데, 즉 UTC +00:00인 영국의 런던시간이 0시일 때에 한국은 9시간이 빠른 오전 9시를 뜻한다.

참고
UTC는 그리니치 평균시(GMT)로 불리기도 하는데, UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용되어 사용되며 기술적인 표기에서는 UTC가 사용된다.

 

Timezone과 Offset에 대해서 알아보았다.
그러면 어떻게 API를 설계하면 될까?

1. Client로 부터 UTC 기준 date와 timezone을 파라미터로 받는다.

2. Server에서 ZonedDateTime 클래스를 활용하여 date with timezone값으로 변환한다.

3. DB에서 데이터 조회 시, Query Condition에서 변환된 date with timezone 값을 사용한다.

4. 조회한 데이터를 Client에게 반환한다.

 

근데 OffsetDateTime 클래스도 Offset 정보를 포함하고 있는데,
왜 ZonedDateTime 클래스를 사용하는 것일까?

ZonedDateTime 클래스는 ZoneRegion 정보가 포함되어 있는데, ZoneRegion에 따라서 DST 적용유무가 다르기 때문이다.

 

DST는 다음편 DST에 대해 알아보자 포스팅을 참고하자.