뽑기 가챠 개발 중 GameData 중복 저장 처리 문의드립니다

  • 베이스/채팅/데이터베이스/월드 SDK 버전 : 뒤끝베이스 Unity SDK 5.15.0 — Backend.dll 5.15.0.0
  • 프로젝트명 : Panda_Restaurant

안녕하세요 직원 뽑기 기능을 개발하고 있습니다

Unity에서 Backend.dll 5.15.0.0을 사용 중이며, GameData 테이블은 private / 스키마 미정의 상태입니다. 현재 저장은 UpdateV2를 사용하고 있습니다.

뽑기에 사용한 다이아와 획득 직원, 중복 보상 토큰을 GameData의 같은 행에 함께 저장하려고 합니다. 이때 자동 저장과 뽑기 저장이 겹치거나, 네트워크 문제로 요청을 다시 보내는 상황을 어떻게 처리해야 할지 확인하고 싶습니다.

  1. 같은 데이터에 수정 요청이 동시에 들어오는 경우

revision 같은 버전값을 두고, “현재 값이 7일 때만 결과를 저장하면서 8로 변경”하는 방식을 생각하고 있습니다.

동일한 행에 이 조건으로 두 요청이 동시에 들어오면, 서버에서 조건 확인과 수정을 한 번에 처리해 하나만 성공하고 나머지는 실패하도록 보장되나요?

GameData.Update의 Where 조건으로 가능한지, TransactionWriteV2 안의 SetUpdate를 사용해야 하는지도 궁금합니다. 조건이 맞지 않을 때 반환되는 오류도 함께 알려주시면 감사하겠습니다.

  1. 서버에는 저장됐지만 앱에서 응답을 받지 못한 경우

뽑기마다 requestId를 만들고 결과와 함께 저장한 뒤, 응답을 받지 못하면 해당 기록을 다시 조회하는 방식을 생각하고 있습니다.

이때 조회한 값이 최신 저장 결과라고 볼 수 있나요? 기록이 조회되지 않으면 아직 처리되지 않은 요청으로 판단해도 되는지, 아니면 별도의 재조회 절차가 필요한지 궁금합니다.

같은 요청이 두 번 반영되지 않도록 지원하는 기능이나 권장 방식이 있다면 함께 안내 부탁드립니다.

현재 SDK 버전에서 지원되지 않는 부분이 있다면, 사용할 수 있는 API와 필요한 SDK 버전도 알려주시면 감사하겠습니다.

감사합니다.

안녕하세요 개발자님,
뒤끝은 중복 요청에 대한 실패 처리를 보장하지 않습니다.
동일한 요청이 짧은 시간 안에 반복되더라도 각각 처리될 수 있으므로, 클라이언트에서 중복 호출과 저장 순서를 관리해야 합니다.
GameData.Update의 Where 조건은 수정할 대상을 검색하기 위한 조건이며, 조건 확인과 저장을 하나로 묶어 보장하는 기능이 아닙니다.
TransactionWriteV2 역시 여러 작업을 모두 성공 또는 모두 실패로 처리하는 기능이므로 조건부 저장에는 사용하실 수 없습니다.

연산이 아닌 확정된 결과값을 저장하는 경우, 같은 값의 재저장 자체로 재화가 추가 차감되거나 보상이 누적되지는 않습니다.
따라서 요청별로 requestId를 저장해 재조회하는 절차는 필요하지 않습니다.
다만 자동 저장이나 다음 뽑기 저장이 그 사이에 실행되면, 이전 요청이 최신 데이터를 덮어쓸 수 있습니다.
자동 저장 시에는 저장하려는 데이터와 로컬에 캐싱된 최신 데이터를 비교하여, 변경 이전의 데이터가 저장되지 않도록 구성할 수 있습니다.
이미 전송된 요청은 로컬 비교만으로 처리 순서를 제어할 수 없으므로, 동일한 데이터를 수정하는 요청은 앞선 요청의 결과를 확인한 뒤 순차적으로 진행하는 것을 권장합니다.

각 함수 호출 후에는 반환된 성공 여부를 확인하고, 실패한 경우 에러 코드와 메시지에 따라 후속 처리를 구성해주시기 바랍니다. 호출의 성공 리턴값 및 실패 에러에 대한 정보는 함수가 안내된 개발자문서에 안내되고 있습니다.