iOS 어플리케이션에서 사용되는 "시간" 값

바닐라빈·2022년 11월 9일
0

iOS Developer

목록 보기
3/3
post-thumbnail

iOS 어플리케이션을 운영하다보면 원인을 알 수 없는 비정상동작 리포트는 필연적이다.

수많은 비정상동작 문의를 경험하다보면, iOS 기기의 설정값에 의한 비정상동작이 생기는 경우가 굉장히 많다.
오늘은 그 중 하나인 기기의 "시간 설정" 에 따른 비정상동작에 대해서 이야기 해 보려고 한다.
구글에 관련 내용을 검색해 보면, 실제로 수많은 개발자들이 이 "시간" 값의 정확도와 오차를 최소화 하기 위해 많은 고민들을 하고 있다.

어플리케이션의 동작중 "시간" 이라는 값은 굉장히 자주 쓰이게 된다.
사용자가 직접 캘린더나 타임피커를 통해서 값을 설정하도록 하는 서비스도 있지만 그렇지 않은 경우도 많다.
후자의 경우 두가지 값을 사용하게 된다.

  1. 기기의 로컬 시간
  2. 서버 시간

기기의 로컬 시간이 자동으로 설정 되어 있을 경우

오차가 매우 적고 신뢰도가 높지만, 서비스의 기준지역이 서울인 반면 고객의 위치가 서비스 기준지역이 아닌 외국인 경우 시간대가 다르게 잡히게 되어 비정상동작을 하게 될 수 있다.
그리고 기기의 로컬 시간을 임의로 세팅 한 경우도 마찬가지다.

그렇다면 반대로 서버 시간을 사용하게 되면 어떨까?

오차가 매우 적고 신뢰도가 높다. 그러나, 시간 값이 필요할때 마다 서버로 부터 시간 값을 요청하게 될 경우 수많은 요청 트랜잭션으로 서버를 점유하게 되고 그에따른 비용이 발생 하게 될 것이다.

내가 생각한 해결방안은 다음과 같았다.

  1. 로그인, 세션 재접속 등 트랜잭션을 통해 서버로부터 HostTime을 받아온다.
  2. HostTime을 받아오는 시점에 기기의 LocalTime(1)을 전역변수에 저장한다.
  3. 서비스 중 시간값을 요청 받는 시점에 기기의 LocalTime(2)을 확인하고 LocalTime(1)과의 Interval을 구하여 HostTime에 더해준다.

이 방법을 사용할 경우 서버로부터 시간값을 요청하는 횟수도 줄이면서 실제 시간과의 오차가 Millisecond 단위인 비교적 정밀한 시간값을 가지게 된다.

다만 앱이 실행중인 동안에 기기의 시간을 임의로 변경하는 경우에는 오차가 커지는 약점이 있는데 그런 케이스는 굉장히 적고 일정 시간 Term이나 트랜잭션 발생시에 보정 해 준다면 더욱 적어질 것이다.

더 나은 방법이 있다면 댓글로 알려주세요 !

profile
iOS Developer

0개의 댓글