게임 내 시각 설정과 표기에는 모호한 면이 있습니다. 어떤 이벤트가 자정 정각에 종료된다고 해 봅시다. 23:59:59는 아직 이벤트가 유효한 시각입니다. 이로부터 1초가 지나 자정 정각이 되면 이벤트가 종료됩니다. 만약 자정 정각으로부터 몇 초 전에 이벤트 인터페이스를 열고 잠깐 꾸물거리다가 자정을 넘겨 서브밋 하면 어떻게 해야 할까요.

이 질문을 해 보면 척수반사적으로 자정 정각에 이벤트 인터페이스가 스스로 닫히게 해야 한다는 답변을 듣기도 하는데 이는 그리 간단하지 않습니다. 어떤 인게임 이벤트는 이벤트 자체가 스케줄을 가지고 있고 어떤 이벤트는 이벤트에 사용되는 아이템이 스케줄을 가지고 있기도 합니다. 이벤트 인터페이스가 이벤트 종료 시점에 스스로 닫히려면 인터페이스 스스로가 자신이 유효한 시간을 알고 있어야 한다는 의미인데 이를 설계하려고 보면 게임 상의 모든 씬이나 팝업이 스스로 유효한 시간 범위를 알고 있도록 해야 하는 오버헤드에 부딪칩니다. 이런 상황을 단순하게 회피하기 위해 이벤트 인터페이스는 자신이 열릴 때만 유효한 시간 내인지 확인하고 실제 시간 확인은 서브밋 할 때 수행하곤 합니다.

그런데 초 단위로 이벤트를 종료시키는 것도 단순하지는 않습니다. 이론 상 자정 1초 전에는 이벤트 아이템이 유효하고 자정 정각에는 이벤트 아이템이 유효하지 않아야 합니다. 그런데 서버와 클라이언트, 또는 클라이언트와 클라이언트 사이에는 시차가 있습니다. 그래서 초 단위로 이벤트를 운용하기 어렵습니다. 불가능하지는 않을 겁니다. 하지만 결과에 비해 비용이 높습니다.

이벤트를 자정에 끝내기 위해 00:00:00에 끝나도록 설정해 봅시다. 서버와 클라이언트, 또 클라이언트와 클라이언트 사이에 시간이 조금씩 차이 나긴 하지만 고객들 중 소수만이 문제를 겪을 겁니다. 가령 나는 아직 몇 초 남았다고 생각하고 이벤트 아이템을 서브밋 했는데 서버 시간은 조금 더 빨라 아이템을 교환하지 못할 수 있긴 하지만 실제 서비스에서는 드물게 일어나 무시할 만한 수준입니다. 다만 매 시간 정각에 이벤트를 종료 시키기에는 부담스럽습니다. 게임 서비스의 반복 작업들의 시작 시각이 매 시간 정각으로 설정되어 있을 가능성이 있습니다. 가령 길드 대전 순위를 1시간마다 집계한다면 매 시간 정각에 할 가능성이 높습니다. PvP 순위에 따라 보상을 주는 이벤트를 정각에 종료하면 마지막 이벤트 PvP 종료시점과 집계시작시점이 겹쳐 이번 집계에 반영되지 않을 수도 있습니다.

이런 모호함을 간단히 회피하는 방법은 이벤트 종료 시각이나 아이템이 유효한 시각 범위를 매 시 59분으로 설정하는 것입니다. 이론적으로 59분 0초에 이벤트가 종료되거나 아이템이 유효하지 않게 되며 이후 1분 동안은 다른 이벤트, 집계, 관리작업이 일어나지 않는 빈 시간일 가능성이 높아 상대적으로 안전합니다. 하지만 이벤트 시각이나 아이템의 유효 시간 종료 시각이 정시가 아니라 59분으로 설정되어 있으면 이를 잘 못 인식할 가능성이 있습니다. 마치 39,800원을 4만원이 아니라 3만원에 가깝다고 착각하는 현상을 가격 표시에 적극적으로 활용하는 것처럼 07:59:00은 7시에 더 가깝다고 인지할 수 있어 좋은 방법은 아닙니다.

크고 바쁜 개발팀에서 여러 시각 약속이 잘 이루어지지 않으면 이런 문제가 쉽게 일어나는데 예정된 다운타임, 집계시작시각, 이벤트 시작 및 종료 시각 정책을 미리 약속해 놓으면 고객에게 59분 59초 같은 인지하기 어려운 시각 표기를 노출하지 않을 수 있습니다.