Backend.UPost.ReceivePostItem 기능 관련해서 질문드립니다.

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.14.1
  • 프로젝트명 : 픽셀 법사 키우기(DEV)
  • 스테이터스 코드 : 400
  • 에러 코드 : TransactionCanceledException
  • 에러 메시지 :

안녕하세요.
우편 기능 사용중 에러가 발생하여 문의드립니다.

문제 상황

1.동일한 컴퓨터에서 LD 플레이어 두 개를 실행하여 각각 다른 계정으로 제 게임을 플레이 중입니다.
2. LD 플레이어의 멀티 컨트롤 기능을 사용해 두 인스턴스에서 동일한 마우스 입력을 동기화했습니다.
3. 두 계정 모두 관리자 우편을 받아보는 작업을 진행했으며, Backend.UPost.ReceivePostItem API를 호출했습니다.
4. 이 과정에서 한쪽 인스턴스에서 스테이터스코드: 400, 에러코드: TransactionCanceledException 에러가 발생했습니다.

문제 발생 예상 시나리오

  1. 관리자 우편 발송 시, 동일한 inDate 값을 가진 우편을 받습니다.
  2. LD 플레이어 멀티 컨트롤로 인해 두 개의 인스턴스에서 동시에 동일한 inDate 우편을 처리하려는 요청이 서버로 전송됩니다.
  3. 뒤끝 서버가 트랜잭션 관리 과정에서 동일한 inDate에 대한 중복 요청으로 인해 하나의 요청만 처리하고, 다른 요청은 충돌 방지를 위해 취소합니다.
  4. 이에 따라 TransactionCanceledException 에러가 발생한 것으로 보입니다.

의심되는 문제 원인

  1. 관리자 우편의 동일한 inDate
    관리자 우편이 모든 계정에 동일한 inDate 값으로 제공되어, 서버가 이를 동일 데이터로 처리하려고 한 것 같습니다.
  2. LD 플레이어 멀티 컨트롤로 인한 동시성 문제
    LD 플레이어의 멀티 컨트롤 기능으로 인해 두 개의 인스턴스에서 동일한 타이밍에 요청이 발생하면서 서버에서 트랜잭션 충돌이 발생했을 가능성 있을거 같습니다.
  3. 뒤끝의 트랜잭션 관리 정책
    동일한 inDate를 사용하는 두 요청이 동시에 도착할 경우, 하나의 요청만 처리하고 나머지를 취소하는 트랜잭션 관리 로직이 적용되어 있을 수도 있을거 같습니다.

위 내용 확인 한번 부탁드립니다.
감사합니다.

안녕하세요 개발자님,
문의해주신 내용과 관련하여 상세 확인 후 안내드릴 수 있도록 하겠습니다.

좋아요 1

기다려주셔서 감사합니다.
문의하신 내용 확인 시, 많은 유저들이 동시에 우편을 수령하려고 시도할 경우 Transaction Conflict가 발생할 확률이 높아집니다.
Transaction Conflict는 우편 수령 시 데이터 충돌을 방지를 위해 존재하는 에러로,
이 에러가 발생하면 뒤끝 SDK는 자동으로 다시 서버에 재요청을 보내며 최대 3번까지 재시도하게 됩니다.
다만, 매우 많은 유저들이 재시도를 하는 경우 3번 모두 실패할 수 있으며,
이 경우, 유저가 우편을 재수령 할 수 있도록 유도하는 방식으로 에러를 처리해 주시면 감사하겠습니다.

좋아요 1