확인 결과, 해당 유저들의 동일한 결제 건에 대한 영수증 검증 요청이 약 0.03초 미만 간격으로 두 차례 뒤끝 서버에 전달된 것으로 확인되었습니다.
두 요청의 결제 정보는 동일했으며, 실제로 결제가 두 번 발생한 것이 아니라 클라이언트의 IAP 처리 과정에서 같은 결제 건이 중복으로 전달된 것으로 보입니다.
IAP 결제 과정에서는 아래와 같은 경우 동일한 결제 건의 검증 요청이 두 번 이상 전달될 수 있습니다.
1. 검증 요청 재시도
검증 요청을 보낸 뒤 네트워크 지연, 응답 타임아웃, 앱 종료 등으로 결과를 받지 못하면, 클라이언트가 결제가 완료되지 않은 것으로 판단하여 같은 결제 정보를 다시 보낼 수 있습니다.
2. 여러 처리 경로에서 동일 거래 전달
결제 직후 실행되는 처리 로직과 미완료 거래를 감지하는 리스너가 같은 거래를 각각 처리하면, 검증 요청이 중복으로 전달될 수 있습니다.
중복요청 내역들은 모두 스토어 검증에서 모두 유효한 영수증으로 확인되어 각각 성공으로 반환되었습니다.
스토어의 검증 성공은 전달된 영수증이 유효하다는 의미이며, 결제가 두 번 발생했다는 의미는 아닙니다.
뒤끝에서도 영수증 정보를 기준으로 동일 결제 건의 중복 처리를 막는 로직을 적용하고 있습니다.
다만 이번처럼 같은 요청이 거의 동시에 처리되는 경우, 요청 간 경합으로 중복 방지 로직이 온전히 동작하지 않을 수 있음을 확인했습니다.
이는 보완이 필요한 부분으로 판단하여 내부 담당 부서에 전달했으며, 동시 요청 상황에서도 중복 처리가 발생하지 않도록 개선을 검토하겠습니다.
클라이언트에서도 영수증 검증 요청이 동기처리 방식을 사용하여 동시에 전달되지 않도록 구성해 주시기를 권장드립니다.
동일한 결제 건에 대해 검증 요청이 여러 번 발생하더라도, 이전 요청의 응답을 받은 뒤 다음 요청이 전달되도록 순차적으로 처리해 주시면 뒤끝의 중복 방지 로직이 적용되게 됩니다.