글로벌 서비스를 위한 시간 정보 관리

몇 년 전만 해도 게임 개발 시 처음부터 해외 서비스를 고려하는 경우는 드물었다. 그만큼 국내 시장이 빨리 성장하기도 했고, 해외 서비스를 위해서는 클라이언트 배포, 서버 설치를 위한 IDC 확보 등의 문제가 있었기 때문이기도 하다. 그러나 COC, 도탑전기 등의 글로벌 서비스를 통해 크게 성공하는 게임들의 등장과, 각종 마켓 및 클라우드 서비스의 활성화, 국내 시장 내의 경쟁 심화 등으로 인해 개발 시작 시점부터 글로벌 서비스를 염두에 두는 게임들이 많아지고 있다.

1
▲ 가장 성공한 글로벌 서비스 게임 중 하나인 COC
(출처 : http://clashofclans.co.kr/)

글로벌 서비스를 위해서는 언어 문제, 현지화 문제 등 고려해야 할 사항들이 많지만, 의외로 간과하는 경우가 많으면서도 대처하기 쉽지 않은 문제가 시차, 정확히 말하면 시간대와 관련된 문제이다. 단순히 클라이언트에서의 시각 표시 정도의 문제부터 각종 게임 내 이벤트의 일정 설정 문제, 운영 위탁 등의 이유로 특정 시간대에 맞춰 시간을 표시해야 하는 경우 등, 게임 내에서 시간 표시가 사용되는 경우는 적지 않다. 본 칼럼에서는 시간대를 다루는 것이 어려운 이유와 개발 시 고려해야 할 사항들을 정리하려 한다.

시간대란, 정치적이나 경제적인 이유 등으로 같은 기준으로 시간을 계산하는 지역을 말한다. 정오라는 단어의 의미를 생각한다면 태양이 가장 높이 떠 있을 때, 즉 낮 12시이겠지만, 한국의 경우 일본에 맞춰진 시간대를 사용하기 때문에 실제로는 일본 – 정확히는 일본 내의 특정 지역 – 에서 태양이 가장 높게 떠 있는 시간이 정오가 된다.

2

▲ 시간대가 다르기 때문입니다. (출처 : 나무위키 )

따라서 시각을 정확히 기록하려면 해당 시각이 어느 시간대를 기준으로 하였는지에 대한 정보가 필요하다. 매일 한 번씩 진행되는 이벤트가 있을 경우 시작 시간을 단순이 오전 9시로만 기록한다면 중국이나 동남아에서 접속하는 사용자들에게 해당 이벤트가 현지 기준으로 몇 시에 시작하는지 표시해 줄 수 없다. 최소한 9시가 한국이 속한 시간대를 기준으로 한 시각이라는 정보라도 있어야 중국 시간대와의 차이를 계산하여 보여줄 수 있다.

그렇다면 시간대에 대한 정보는 어떻게 기록해야 하는가? 우선 생각해 볼 수 있는 방법은 모든 시각 관련 정보를 기록 시, 해당 시각 산정에 사용된 시간대에 대한 정보와 함께 기록하는 것이다. 하지만 이는 한 서비스 내에서 두 개의 시각 정보를 비교 시 반드시 양쪽의 시간대 정보를 확인해야 하기에 운영 중 실수가 발생할 여지가 많고, 저장 공간이나 통신 용량도 더 차지하며 무엇보다도 귀찮다. 어차피 동일 서비스에서 사용할 거라면, 사용할 시간대 정보를 지정해 두고 모든 시각 정보를 해당 시간대 정보에 맞추는 편이 혼선을 줄일 수 있을 것이다.

그렇다면 어느 시간대를 기준으로 삼는 것이 좋을까? 이 칼럼을 읽는 독자분들은 대부분 한국에서 게임 개발을 진행하실 테니 한국 시간대를 사용하는 게 편하리라 생각하시는 분들도 있을 것이다. 하지만 대부분의 환경에서 제공되는 시간대 관련 개발 라이브러리에서는 시간대 별 시차 정보 등을 모두 UTC를 기준으로 하여 계산, 제공한다. 이러한 상황에서 한국 시간대를 사용한다면 필요한 시간대로의 변환을 위해 UTC로 변환하는 과정이 한 번 더 필요할 것이다. 요즘에는 해외 서비스 시 운영이나 이벤트 진행 등을 현지 파트너와 진행하는 경우 등 동일 서비스를 운영하더라도 둘 이상의 시간대 관리가 필요한 경우도 많아지고 있으며, 최소한 클라이언트에서 표시되는 시각은 대부분 변환이 필요한 만큼 보다 변환이 쉬운 UTC 시간대를 이용하는 것을 추천한다.

UTC로 시각을 기록 및 전송한다면, 필요에 따라 특정 시간대에 맞게 변환하는 과정도 필요하다. 그렇다면 시간대는 어떻게 관리하는 것이 좋을 지에 대해서도 알아보자. 시간대를 표시하는 가장 흔한 방법은 영국 표준시를 나타내는 시간대인 GMT 시간대와 몇 시간 차이가 나는지 기술하는 것이다. 예를 들자면 한국이 속한 시간대는 GMT+9, 미국 서부 지역이 속한 시간대는 GMT-7 로 표시한다. 하지만 이러한 시간 차이에 대한 정보만으로는 변환할 수 없는 경우가 있다.

우선 작은 문제부터 살펴보자면, 모든 시간대가 GMT와 시간 단위로 차이가 나지 않는다는 것이다. 예를 들어, 아마 게임을 서비스하려는 분은 없겠지만, 북한이 GMT+8:30 시간대를 사용한다. 이 칼럼을 작성하는 시점에, 이러한(시간 단위로 시차가 딱 떨어지지 않는) 시간대를 사용하는 지역 중 게임 서비스를 고려할 만한 시장은 별로 없기에 큰 문제는 아닐 수 있다. 하지만 시간대는 변할 수 있기 때문이 미리 고려해서 손해 볼 부분은 없을 것이다. 예를 들자면, 최근 높은 스마트폰 보급률로 주목을 받는 이란은 GMT+4:30 시간대를 사용한다.

좀 더 큰 문제는 일광절약 시간제가 적용되는 지역의 경우이다. 일 년 중 특정 기간에만 GMT와의 시차가 바뀌며, 하루 중에도 시차가 바뀐다. 일 년 중 일광절약 시간제가 적용되는 기간도 나라마다 다르다. 같은 국가 내에서 같은 시간대를 사용하더라도 특정 지방에서만 시행하는 경우도 있다. 따라서 단순히 시간 차이만을 기록해서는 정확한 변환은 불가능하다. 일광절약 시간제는 미국이나 유럽 등 글로벌 서비스 시 고려할 만한 주요 지역들에서도 사용되므로 무시하기도 어렵다.

따라서 일광적약 시간제 관련 정보를 포함하는, 별도의 시간대 표시 방식을 사용하는 것이 좋다. 이러한 용도로 널리 사용되는 시간대 표시 방법에는 크게 영문 대문자 3~4글자로 시간대를 표현하는 time zone abbreviation 과 주로 지역/도시 or 국가 형태로 시간대를 표현하는 IANA time zone, 일명 Olson time zone이 있다.

time zone abbreviation 은 다음과 같은 문제점이 있기에 권장하지 않는다. 우선 동일 지역, 동일한 시간대라도 일광절약 시간제의 적용 여부에 따라 별도의 약어가 존재하는 문제가 있다. 예를 들면 호주 중부 시간대의 경우 일광절약 시간제가 적용되는 경우에는 ACDT, 적용되지 않는 경우에는 ACST라 표시하며, 미국 서부의 시간대의 경우에는 적용 여부에 따라 PDT/PST로 표시한다. 그리고, 몇몇 시간대의 경우 분명 다른 시간대임에도 이름이 같은 경우가 있다. CST라는 시간대의 경우, Central Standard Time( 미 중부 시간대 ), CST( China Standard Time )등 4개( 일광절약 시간제를 고려하면 5개! )의 다른 시간대를 나타내는 약어이다.

IANA timezone은 위에서 언급한 대로 일반적으로 지역/도시 형태로 해당 지역에서 사용하는 시간대를 표시한다. 예를 들면 유럽 내 프랑스 파리의 시간대는 Europe/Paris, 아시아 내 싱가포르의 시간대는 Asia/Singapore 로 표시하는 식이다. 따라서 사용하려는 시간대와 일치하는 이름을 찾아서 지정해 줘야 하는 문제가 있지만 위의 abbreviation 과는 달리, 해당 지역의 일광절약 시간제 관련 정보( 연중 적용 기간, 하루 중 적용 시간 등 )를 포함하고 있기 때문에 적용 여부와 관계 없이 동일한 이름을 사용한다. 그 외에 윤초 등 시각 표시에 관련된 많은 정보들을 포함하여 관리되기 때문에 수고를 들일 만한 가치가 있다.

정리하자면 글로벌 서비스를 목표로 하는 게임에서 시간 관련 정보를 다룰 때에는
1. DB나 통신 프로토콜 내에서의 시각 표시는 UTC 를 사용을 권장
2. 변환 등을 위해 시간대를 지정할 경우에는 IANA timezone 사용을 권장
정도로 정리할 수 있겠다.

글로벌 서비스를 고려하지 않더라도 시간과 연관된 개발은 복잡하다. 특히 시각만이 아닌, 날자 요일 등을 같이 고려해야 하는 경우, 시간대가 바뀌면 날자 역시 바뀔 수 있기 때문에 더욱 더 어려운 문제가 된다. 모든 기능이 마찬가지이지만, 시간대 관련 기능은 구현 시작 시부터 고려하지 않으면 변경 비용이 매우 비싸질 수 있다. 당장은 국내 서비스만을 고려하더라도 시간과 관련된 기능 구현 시 시간대와 관련된 내용을 고려한다면 이후의 상황 변화에 좀 더 유연하게 대처할 수 있을 것이다.

아이펀팩토리 아이펀 디플로이 테크니컬 디렉터 민영기

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중