랭킹 리셋을 클라이언트쪽에서 인지할 수 있는 방법

  • 뒤끝 SDK 버전 : 5.7.2
  • 프로젝트명 : stepisland
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

매일 몬스터 사냥 수로 랭킹을 잡아서 보상을 주는 랭킹 시스템을 구상 중입니다.
그래서 서버쪽에는 초기화 기간 1일짜리 랭킹을 만들어 놓고 그날 토탈 킬 수를 업데이트하는 식으로 운영하려는데

토탈 몬스터 킬 수를 로컬에서 보유하고 있는데 다음날이 되어 서버가 랭킹을 리셋하여도 (서버/클라 시간 sync 등의 문제 때문에) 클라이언트가 리셋을 인지 못하면 이 수치를 새로 집계하지 않고 이전 토탈 킬수를 기록해 버릴지도 모른다는 문제가 있습니다.

예를 들자면 리셋 시간이 12:00 라고 가정하고

11:57 클라이언트에서 100마리까지 사냥함
11:58 서버에 토탈 100마리 사냥했음 업데이트 함
11:59 클라이언트에서 101마리까지 사냥함
12:00 서버에서 랭킹 리셋됨
(서버와 클라이언트간에 시간 차이로 날짜 리셋을 인지 못함)
12:00 서버에 토탈 101마리 사냥했음 업데이트 함
=> 해당 클라이언트는 새 랭킹 시작하자 마자 101마리를 기록해 버림, 랭킹에 문제 생김

그래서 해결 방법으로 클라이언트가 랭킹 데이터를 업데이트하려 할 때 해당 랭킹이 리셋되었는지를 인식할 수 있으면 토탈 킬 수를 리셋시키고 새로 집계하는 방식으로 하려고 합니다만 그런 방법이 있는지 궁금합니다.

또는 이런 문제가 다른 게임에서도 흔한 전형적인 케이스일 것 같은데 이를 해결하는 다른 방법이 있는지 궁금합니다

안녕하세요 개발자님,
뒤끝의 랭킹 시스템은 매일 새벽 4시~5시 사이 초기화가 진행됩니다.
이에 랭킹 초기화 시간중 업데이트를 시도하거나, 초기화 이후 랭킹을 조회하는 경우 아래와 같은 에러들이 발생하게 됩니다.

  • 초기화 시간의 랭킹
    랭킹 초기화 이후 새로 등록된 랭킹이 없는 상태이기에 다음과 같은 에러가 발생하게 됩니다.
statusCode : 404
errorCode : NotFoundException
message : userRank not found, userRank을(를) 찾을 수 없습니다
  • 초기화 시간의 랭킹 갱신
    초기화 시간 중에는 랭킹 갱신이 불가하여 아래와 같은 에러가 발생합니다.
statusCode : 428
errorCode : Precondition Required
message : Precondition Required ranking is being counted

이를 활용하여 랭킹 조회 후 데이터가 존재하지 않는 경우 로컬 데이터가 초기화 되도록 구성해주면 되나
매 랭킹 업데이트 시마다 랭킹을 조회하는 경우 호출량이 증가하게 됩니다.

따라서 일일 랭킹에 대해서는 매일 오전 5시 이후에 내 랭킹 정보 불러오기를 한차례 호출하도록 하고
데이터가 존재하지 않을 때 로컬 데이터를 0으로 초기화하여 새로운 데이터를 업데이트할 수 있도록 구성해 주세요. :D

좋아요 1