펑션에서 두 사용자 재화의 조건부 트랜잭션 구현 방법 및 데이터베이스 서버 SDK 지원 여부

안녕하세요. 두 명이 참여하는 4구·3구 경기의 재화와 전적 정산을 구현하고 있어 공식 지원 방법을 문의드립니다.

  • 프로젝트명: magicCushion
  • 환경: Unity 6000.5.7f1, .NET 8
  • 펑션 개발 도구: 1.0.2에 포함된 Backend.dll
  • 검사일: 2026-10-09
  • 스테이터스 코드: 펑션 호출 HTTP 200, 내부 트랜잭션 실패 404
  • 에러 코드: NotFoundException
  • 에러 메시지: gameinfo not found

경기 시작 시 양쪽 입장료를 차감하고, 종료 시 승자에게 합계를 지급하거나 무승부이면 반환하려고 합니다. 같은 사용자의 다른 재화 변경과 경쟁할 수 있으므로 양쪽 지갑 버전과 경기 상태를 하나의 원자적 트랜잭션으로 검사·갱신해야 합니다. 서버만 수정하고 클라이언트가 직접 변경할 수 없는 저장소가 필요합니다.

호출자는 Backend.Initialize(ref stream) 이후 Backend.BMember.GetUserInfo()로 인증을 확인했습니다. 운영 재화가 아닌 공개 게임정보 진단 테이블에서 다음 결과를 직접 확인했습니다.

  1. GetV2로 A/B의 공개 행 조회: 성공.
  2. SetUpdateV2(table, inDate, owner_inDate, param) 두 개를 TransactionWriteV2로 묶어 A/B 갱신: 성공, 내부 204.
  3. SetUpdate(table, where, param)에서 owner_inDate·RunId·Slot·Version 조건으로 호출자 A의 두 행 갱신: 성공, 내부 204.
  4. 같은 조건 방식으로 B 행 갱신: 내부 404 NotFoundException, gameinfo not found.
  5. A/B/경기 상태 대용 행을 같은 조건 방식으로 묶어 갱신: 전체 실패, 모든 값 유지.

확인을 부탁드리는 사항은 다음과 같습니다.

  1. 펑션 서버 권한으로 B 소유 행에 버전 조건 또는 잔액 조건을 검사하며 갱신하는 공식 API가 있나요? 메서드 시그니처와 최소 예제를 부탁드립니다.
  2. SetUpdateV2 또는 다른 트랜잭션 API에 갱신 조건을 전달할 수 있나요? 조건 불일치 시 나머지 사용자·경기 상태·영수증 쓰기도 모두 롤백되어야 합니다.
  3. 기존 Where 기반 트랜잭션의 조건은 실제 커밋 시점에도 검사되나요, 아니면 먼저 행을 찾는 조회 조건인가요? 동일 버전에 대한 네 동시 요청 중 하나만 성공한 관찰 결과는 있으나 공식 보장 범위를 확인하고 싶습니다.
  4. 현재 데이터베이스 기능을 .NET 8 펑션에서 이용할 수 있나요? 가능하다면 공식 서버 SDK/API, 서버 인증, ClientAccess=false 테이블 접근 방법을 부탁드립니다. 아래 2026-02-24 담당자 답변에서는 펑션 미지원으로 안내되어 변경 여부를 확인하려고 합니다.
  5. 다른 사용자의 비공개 경기 기록을 서버에서 저장하는 공식 방법이 있나요?
  6. 코인·4구/3구 전적·경기 상태·영구 중복 방지 영수증을 함께 처리할 때 권장하는 뒤끝만의 구성은 무엇인가요? 별도의 외부 서버는 사용하고 있지 않습니다.

인증키, 토큰, 실제 사용자 식별자는 제외했습니다. 안내 부탁드립니다. 감사합니다.

참고 문서:

안녕하세요 개발자님,
문의해주신 내용은 상세히 확인하여 안내드릴 수 있도록 하겠습니다.
답변에 다소 시간이 소요될 수 있는 점 양해 바랍니다.

좋아요 1

문의하신 내용 확인하여 순차적으로 답변드립니다.

1. 펑션에서 타 사용자 데이터의 조건부 수정
뒤끝 펑션은 별도의 서버 권한이 아니라 펑션을 호출한 사용자의 권한으로 동작합니다.
타 유저의 데이터를 조건으로 검사하며 수정하는 API는 제공되지 않습니다.

2. 펑션을 통한 SetUpdateV2 및 트랜잭션의 조건부 갱신
SetUpdateV2에는 갱신 조건을 전달할 수 없습니다.
SetUpdate의 Where는 호출자 본인의 행을 검색하는 조건입니다.
조건에 맞는 행이 검색되지 않으면 말씀하신 에러가 발생하며 트랜잭션 전체가 반영되지 않습니다.
본인 행에 한해서만 Where를 조건처럼 활용하실 수 있으며, 타 사용자 행에는 적용되지 않습니다.

3. Where 조건의 검사 시점
Where 조건은 수정 대상 행을 조회하는 시점에 확인되며, 실제 수정 시점에 다시 검증되지는 않습니다.
게임정보 테이블을 사용하는 경우 버전 조건을 이용한 동시성 제어는 보장되지 않습니다.
동시 요청 중 하나만 성공한 테스트 결과가 있더라도, 이는 보장된 동작이 아니라는 점 참고 부탁드립니다.

4. 신규 Database의 .NET 8 펑션 지원
현재 신규 Database는 뒤끝 펑션에서 사용하실 수 없으며, 추후 업데이트 지원할 예정입니다.

5. 타 사용자 비공개 경기 기록 저장
1번 및 4번의 이유로, 펑션에서 타 사용자 소유의 데이터를 생성하거나 수정할 수 없습니다.
현재 이를 위한 공식 방법은 제공되지 않습니다.

6. 권장 구성
양쪽 사용자의 재화·전적, 경기 상태, 중복 지급 방지 기록을 하나의 원자적 처리로 묶는 구성은 현재 뒤끝 기능만으로는 구현이 어렵습니다.
재화 차감·지급처럼 정합성이 중요한 작업은 동시 요청에 대한 안전성이 보장되어야 하므로, 현재 지원 범위 내에서 해당 구조로 구현 안내를 드리지 못하는 점 양해바랍니다.