yabos
1월 6, 2026, 1:59오후
1
안녕하세요.
한 게임에서 프로모션을 2개 이상 진행 시키려고 하는데요.
중복 지급을 막으려고 처리하다보니 이상한 점이 있어서 문의드립니다.
프로모션을 1개만 진행시킨다면 userkey를 키 값으로 쓰고
grantPromotionRewardForGame() 리턴 Success 받았을 때 받았다고 처리하면 되는데
2개 이상 진행시키면 내가 어떤 프로모션을 완료 했는지 알 수가 없습니다.
한 프로모션에서 바뀌지 않는 값을 리턴해주셔야 이게 될거 같습니다.
이걸 처리 하려면 request로 보낼 때 저장을 따로 해놓고 응답 받았을 때 따로 처리를 해야 되는데
그냥 grantPromotionRewardForGame() 반환값에 내가 보낸 프로모션 코드를 그대로 넘겨주시면
이걸로 키값을 사용해 중복을 막기가 쉬울 것 같습니다.
클라에서 보내기 전에 저장하고 받은 다음에 그 값을 쓰는것 보다 서버에서 제대로 받은 값으로만 처리하는게 안전해보입니다.
Dylan
1월 9, 2026, 1:28오전
2
안녕하세요
말씀주신 내용 빠르게 검토해볼 수 있도록 하겠습니다 !
1개의 좋아요
Dylan
1월 13, 2026, 7:34오전
3
안녕하세요
기다려주셔서 감사해요
요청시 포함하여 전달해주고 계신 promotionCode를 userkey와 함께 검증하여 중복 지급을 방지하는 방향으로 처리해주실 수 있을까요 ?
프로모션 코드를 그대로 넘겨드리는건 문제가 없으나, 현 구조에서 해당 값을 그대로 전달해야하만 하는 명확한 필요성을 아직 찾지 못한 상황이라 혹시 내부적으로 고려 중이신 배경이나 제약 사항이 있다면 함께 공유해주실 수 있을까요 ?
yabos
1월 14, 2026, 3:18오전
4
두 개의 프로모션 A,B 가 있다고 한다면
토스에서 처리된 프로모션이 어떤건지 확인 할 수 있는 방법이 없어서 그렇습니다.
프로모션A를 보냈고 토스에서 제대로 처리해주고 A를 리턴해줬는지 실수로 B를 리턴해줬는지 클라는 검증하기가 어렵습니다.
A를 보냈으니 당연히 결과를 A 보내줬다고 그냥 믿는 수 밖에 없다는거죠.
더 큰 문제는 두번째 인데
string pendingPromotionCode;
requestPromotion(code, account)
{
pendingPromotionCode = code;
}
receivePromotion()
{
Save[pendingPromotionCode , true]
}
프로모션 A,B 둘 다 동시에 만족
requestPromotion(A)
requestPromotion(B)
동시 호출
이런식으로 코드를 짜면 두 개 이상의 프로모션을 보내면 위험 할 수도 있기 때문입니다.
만약 동시에 조건이 만족되어서
프로모션 A,B를 한번에 보냈다고 치면
네트워크 지연 이슈등으로
receivePromotion 이 함수가 늦게 들어온다면 문제가 될겁니다.
pendingPromotionCode 이 값이 클라에서는 이미 프로모션B로 바뀌어있을 수도 있으니까요.
그럼 receivePromotion()을 받았을 때 프로모션 B만 받았다고 저장이 될겁니다.
그리고 애초에
receivePromotion(code)
{
Save[code, true]
}
이렇게 코드를 포함해서 응답을 주시면
받은 상태 그대로 저장하기에도 편합니다.
클라이언트에서 따로 글로벌 변수로 저장 할 필요도 없고요.
고유한 값이기 때문에 userkey로 저장 할 필요도 없습니다.
Dylan
1월 14, 2026, 4:25오전
5
앗 제가 정확하게 이해를 못한 것일 수 있습니다 ..!
// A 프로모션 지급 로직
if (지급내역.find((record) => record.userKey === userKey && record.promotionCode === 'GAME_EVENT_A') {
// 지급내역이 있으므로 중복지급하지 않음
return;
}
const result1 = await grantPromotionRewardForGame({
params: {
promotionCode: 'GAME_EVENT_A',
amount: 1000,
},
});
if (result1 === 성공) {
지급내역.insert([
userKey,
promotionCode: 'GAME_EVENT_A',
amount: 1000
]);
}
요렇게 하면 들어오는 순서와 상관없지 않나요 ..?!
yabos
1월 14, 2026, 5:18오전
6
react 에서는 저렇게 보내고 받고 간단히 처리 할 수 있겠군요.
유니티에서는 jslib으로 인앱토스와 api 주고 받는처리 할 때
보내는 쪽 따로 받는 쪽 따로 처리해서 제 코드에서 문제가 되었나봅니다.
그냥 유니티에서 보낼 때 await Request() 로 해서 위에 예제로 보여주신 로직과 비슷하게 처리하면 될 것 같습니다.
1개의 좋아요