트랜잭션 사용 시 에러 발생

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

  • 뒤끝 SDK 버전 : 5.8.0
  • 프로젝트명 : 던전은 우리 집
  • 스테이터스 코드 : 400
  • 에러 코드 : ValidationException
  • 에러 메시지 : Transaction request cannot include multiple operations on one item

안녕하세요, 담당자님!
다름이 아니라 현재 뽑기 시 SetInsert 10개의 쿼리가 담긴 트랜잭션을 날리는데
위와 같은 오류가 떴길래 문의 드립니다.
해당 오류는 같은 로우에 접근 시 발생하는걸로 알고 있는데
아래 사진과 같이 브레이크포인트 건 후 값을 확인했을 때 같은 로우에 접근하는 부분은 없어보여서요.
한번 확인 부탁드려도 될까요?

스크린샷 2022-10-13 오후 1.28.42
스크린샷 2022-10-13 오후 1.28.52
스크린샷 2022-10-13 오후 1.29.00
스크린샷 2022-10-13 오후 1.29.07
스크린샷 2022-10-13 오후 1.29.19

안녕하세요 개발자님,
트랜잭션은 동일한 row를 한 트랜잭션안에 업데이트 할 수 없습니다.
혹은 그러한 로직으로 구성되어있는지 확인해주세요.
(인벤토리 테이블안에 유저당 가지는 row가 하나인데 해당 row를 트랜잭션 Update가 여러번 추가되어있을 경우)

안녕하세요, 담당자님!

해당 트랜잭션 리스트는 전부 Update가 아닌 Insert인데
같은 로우에 접근할 수 없지 않나요? ㅠ.ㅠ
10개의 새로운 로우를 생성하는 트랜잭션 리스트라고 저는 이해를 했습니다.
확인 한번 부탁드려도 될까요?

SetInsert 외에 이용하고 계신 다른 트랜잭션이 있는지 확인 요청드립니다.

없습니다. 해당 요청은 새로운 장비를 획득했을 때 보내는 요청으로서 오로지 insert만 있습니다.
또한 만약 그 외의 요청이 있다고 한다면, 현재 요청 실패 시 최대 3번까지 재요청 하는 코드가 있는데 3번 모두 실패로 나와야 할텐데 다시 시도하면 성공하더라구요.

관련하여 담당 부서를 통해 확인중에 있습니다.
상세 확인이 이루어지는 대로 다시금 답변 드리겠습니다.

안녕하세요, 담당자님!
혹시 확인 되셨는지 여쭤봐도 될까요?

안녕하세요 개발자님,
안내가 지연되어 죄송합니다.
현재 아직 확인중에 있으며 조속히 확인하여 안내드릴 수 있도록 하겠습니다.
답변이 늦어져 죄송합니다.

앗 넵!! 늦은 시간에도 답변해 주셔서 대단히 감사합니다!

안녕하세요, 담당자님!
이전에 문의 드렸던 시점으로부터 한달 정도의 시간이 지났는데
혹시 문의드렸던 트랜잭션 관련 오류는 어떻게 되었는지 여쭤봐도 될까요?

안녕하세요 개발자님,
답변이 오랜기간 이루어지지 못해 대단히 죄송합니다.

현재 해당 요청은 skill_inventory라는 한 테이블안에서 10개의 Transaction을 통해 생성하고 있습니다.
한 테이블 내에 게임 데이터를 구분하기 위해서는 inDate가 모두 달라야하는데, 여기서 가끔 데이터가 만들어지는 시간이 겹치면서 inDate가 동일하게 되면서 해당 에러가 발생할 수 있습니다.
(뒤끝에서는 한 테이블에 유저당 한개의 데이터만을 가지는 것을 의도하고 있습니다.)

해당 경우로 말씀하신 에러는 의도치 않게 간혈적으로 발생할 수 있습니다.
다만 다음과 같이 동일한 테이블에 다수의 데이터를 동시에 삽입하는 로직은 현재 뒤끝에서는 추천하고 있지 않는 로직이며, 현재 뒤끝 구조상 픽스에는 오랜 시간이 소요될 것으로 보입니다.

뒤끝의 경우 데이터가 많이 증가할수록 읽기량과 쓰기량의 비용 증가와 함께 응답시간이 길어질 수 있으며, 부하의 원인이 되곤 합니다.
만약 인벤토리를 구현하고 싶은 경우, 한 스킬당 한개의 row를 생성하는 것 보다는 skill이라는 한 데이터 안에 skill1이나 skill2등 여러가지의 스킬 정보를 저장하는 것이 더 바람직합니다.
이부분 참고하여 개선이 가능하다면 해당 방향으로 권장드립니다.

안녕하세요, 담당자님!
답변해 주셔서 정말 감사합니다!
다만 현재 스킬 구조 상 구조 변경이 불가능하고,
재전송 로직 때문에 일단 사용 시 문제는 없어서 이대로 가야할 것 같습니다 ㅠ.ㅠ

그럼 답변 다시 한번 감사드리며,
오늘부터 기온이 뚝 떨어진다고 하는데,
따뜻한 음식과 옷차림으로 활기차게 겨울을 이겨내시면 좋겠습니다 :smile:

좋아요 1

안녕하세요
동일한 문제가 발생되고 있어서 문의 드립니다.
현재까지 수정 혹은 회피법은 없는 것일까요?
대략적인 빈도는 어떻게 되는지 알 수 있을까요?
그냥 단순히 Transaction 으로 insert 할때 실패하면 될때까지 하면 되는건지 문의 드립니다.

안녕하세요, 개발자님.
뒤끝에서는 테이블당 1개의 row 사용을 권장하고 있습니다.
트랜잭션 쓰기를 통해 하나의 테이블에 다수의 row 를 insert 하게되는 경우,
위 안내 내용과 같이 에러가 발생하며 실패하게 됩니다.
테이블 내 다수의 데이터가 필요한 경우 1개의 row를 생성하여 컬럼을 통해 구분하여 저장하는 방법을 추천드립니다.