월별리포트에 사용된 서버시간 API 정보

월별리포트에서 서버 시간을 조회해서 필요한 로직을 처리하기 위해서 사용한 외부 서비스에 대한 정보입니다.
월별리포트의 경우, 예를 들어 유저가 9월에 운동한 데이터를 기반으로 10월 1일 ~ 10월 31일 사이에 9월 월별리포트를 발급하지 않으면 그 이후에는 9월 월별리포트를 발급받을 수 없도록 기획되었습니다.
이에 따라 유저가 임의로 날짜를 뒤로 돌려서 과거 리포트를 발급받는 액션을 막기 위해서 서버 기준 시간을 조회해서 월별리포트 발급 여부 체크 및 발급 프로세스가 진행되도록 구현되어 있습니다.

서비스 관련 정보

사용한 서비스: TimeZoneDB
서비스 홈페이지 로그인에 필요한 정보
아이디: bunnit
비밀번호: Popcoon!!know
API Key: JJSICUCJB31D
API 호출 시 API Key 값이 포함되어야 합니다.
사용하고 있는 API
TimeZoneDB 는 다양한 API를 제공하는데, 그 중 월별리포트에서 사용하고 있는 API는 Get Time Zone 이라는, 타임존 값을 기반으로 해당 위치의 현지 시각을 구하는 API입니다.

적용되어 있는 코드

서버 시간 쿼리하는 함수
아래 사진의 getServerDateTimeByTimezone 함수를 통해서, 디바이스가 위치한 타임존 값 기준으로 시간을 요청하거나, 실패한 경우 UTC를 기준으로 시간을 요청하는 형식으로 구현되어 있습니다.
월별리포트에서 사용되고 있는 방식
월별리포트 관련 로직에서는 getServerDateTimeByTimeZone 함수로 얻은 시간 값을 월별리포트 zustand store 인monthlyreport-store.jscurrentServerDate 라는 값에 저장해 필요한 곳에서 사용하고 있습니다.
currentServerDate값을 set 하는 함수인 setCurrentServerDate 함수가 실행되어서 서버 시간 값이 store에 업데이트 되는 시점은 2가지입니다.
앱 최초 실행 시 호츨되는 RootStack의 initLoad 함수 안에서 실행되어서 홈화면에서 월별리포트 발급 배너 표시 여부 |하단 네비게이션 바에 인디케이터 표시 여부 처리하는 loadShowPrevMonthReportBannerAndIndicator 함수에서 현재 서버 시간 확인 후 저장
월별리포트 화면에 진입 시 리포트 발급 가능 여부를 확인하기 위해서 실행되는 checkIfPrevMonthReportExists 함수에서 이전 달 리포트 존재여부 확인하기 위해서 현재 서버 시간 확인 후 저장
요약하자면 앱 최초 실행 시 currentServerDate 값이 해당 시점의 서버 시간으로 설정되고, 앱을 사용하는 동안에는 월별리포트 홈 화면 ( MonthlyReportHomeScreen )에 진입할 때 마다 currentServerDate 값이 해당 시점의 서버 시간으로 업데이트 됩니다.