빠른 답변: Google Play는 구매가 환불되거나 취소되었음을 알 수 있는 두 가지 방법을 제공합니다. Real-time Developer Notifications(RTDN)는 Google Cloud Pub/Sub를 통해 이벤트가 발생하는 즉시 서버로 푸시합니다. Voided Purchases API를 사용하면 필요할 때마다 취소된 구매 목록을 가져올 수 있습니다. 이 둘은 대체재가 아닙니다. RTDN은 속도를 제공하고 Voided Purchases API는 안전망을 제공하며, 신뢰할 수 있는 설정은 아무것도 놓치지 않도록 두 가지를 모두 사용합니다.
Google이 두 가지 메커니즘을 제공하는 이유
Google Play에서는 대부분의 환불이 별도의 확인 없이 이루어집니다. Google이 환불을 처리하고 권한을 취소하며, 여러분의 역할은 이를 파악해 앱과 분석 데이터를 정확하게 유지하는 것입니다. (이의 제기가 가능한 경우와 불가능한 경우는 Google Play Refunds & Chargebacks를 참조하세요.)
Google은 이를 파악하기 위한 두 가지 도구를 제공하며, 각각 정반대 방향에서 문제를 해결합니다. 하나는 이벤트가 발생할 때마다 여러분에게 푸시합니다. 다른 하나는 원할 때마다 목록을 요청할 수 있게 해줍니다. 두 가지를 함께 사용하면 서로의 약점을 보완하지만, 하나만 사용하면 각각 빈틈이 생깁니다.
안드로이드 환불 추적에 집중하는 개발자라면 이 차이를 이해하는 것이 중요합니다. 실시간 이벤트 스트림과 과거 데이터 조정(reconciliation) 메커니즘은 환불 모니터링 문제의 서로 다른 부분을 해결하기 때문입니다.
Real-time Developer Notifications(푸시)
Real-time Developer Notifications(RTDN)는 푸시 메커니즘입니다. 환불이나 취소된 구매를 포함해 구독이나 구매에 어떤 일이 발생하면, Google은 여러분의 백엔드가 구독 중인 Google Cloud Pub/Sub 토픽에 이벤트를 게시합니다. 핵심은 즉시성입니다. 몇 시간 뒤에야 알게 되는 것이 아니라 이벤트가 발생한 시점에 가깝게 알 수 있습니다.
RTDN Google Play 통합을 찾고 있는 개발자라면, 이 메커니즘이 Google Play 결제 이벤트와 백엔드를 연결하는 수단입니다. 응답 기한이 약 24시간인 지급거절(chargeback) 검토처럼 시간이 민감한 사안에서는 이 즉시성이 전부입니다. 주기적으로 확인하는 방식에 의존한다면, 여러분에게 없던 시간을 이미 잃은 셈입니다.
단, RTDN은 Pub/Sub 위에서 동작하므로 Google Cloud 프로젝트 설정, 토픽, Google Play에 대한 올바른 게시 권한, 그리고 여러분 쪽의 구독자가 필요합니다. 단일 webhook보다 움직여야 할 부분이 많고, 바로 이 지점에서 많은 개발자가 막힙니다.
Voided Purchases API(풀)
Google Play Voided Purchases API는 풀 메커니즘입니다. 취소, 환불, 지급거절, 또는 철회된 주문 목록을 반환하며, 필요할 때마다 조회할 수 있습니다. 이벤트를 기다리는 대신 Google에 직접 "무엇이 취소되었는가?"를 물어보는 방식입니다.
이 API의 강점은 완전성과 복구력입니다. 푸시 알림이 지연되거나, 누락되거나, 전혀 처리되지 않았더라도 Google Play Voided Purchases API를 풀 방식으로 조회하면 취소된 구매가 결국 드러납니다. 이렇게 조정(reconcile)을 수행해 여러분의 기록이 Google의 기록과 일치하는지 확인할 수 있습니다.
단점은 본질적으로 즉각적이지 않다는 점입니다. 직접 조회해야 하는 방식이므로, 단독으로는 트리거가 아니라 안전망의 역할을 합니다.
하나가 아니라 둘 다 필요한 이유
사람들이 흔히 헷갈리는 부분이 바로 이것입니다. "둘 중 더 나은 것을 선택"하는 문제가 아닙니다.
RTDN 단독으로는 속도를 얻지만 완전성은 보장되지 않습니다. 알림을 놓치거나 잘못 처리하면 그 이벤트는 여러분의 시야에서 그냥 사라집니다.
Voided Purchases API 단독으로는 완전성을 얻지만 속도는 얻지 못합니다. 다음에 조회할 때가 되어서야 환불 사실을 알게 됩니다.
RTDN Google Play는 백엔드에 실시간 신호를 제공하는 반면, Google Play Voided Purchases API는 누락되거나 지연된 이벤트를 위한 조정 계층을 제공합니다.
신뢰할 수 있는 설정은 RTDN을 실시간 트리거로 사용하고, Voided Purchases API를 푸시 경로에서 놓친 것을 포착하는 조정 계층으로 사용합니다. 속도와 안전망의 조합입니다. 둘 중 하나만 사용하면 결국 빠지게 될 구멍이 남습니다.
복잡해지는 지점
이를 올바르게 구축하는 작업은 생각보다 복잡하며, 한 번만 하면 끝나는 작업이 아니라 지속적인 노력이 필요합니다:
Pub/Sub 프로비저닝. 토픽을 생성하고, Google Play에 게시 권한을 부여하고, 백엔드를 구독시키고, 권한을 정확하게 설정하는 단계는 반나절, 어쩌면 그 몇 배의 시간을 잡아먹기 쉬운 작업입니다. 이 Pub/Sub 플레이 빌링 설정은 결제 인프라가 성장하는 동안에도 계속 안정적으로 유지되어야 합니다.
동기화해야 할 두 시스템. 이제 푸시 컨슈머와 예약된 풀-조정(pull-and-reconcile) 작업을 함께 운영하며, 두 시스템이 서로 일치하는지 확인해야 합니다.
중복 제거와 순서 처리. 동일한 이벤트가 두 번 이상 도착하거나 순서가 뒤바뀌어 도착할 수 있으므로, 처리 로직은 멱등성(idempotent)을 가져야 합니다.
최신 상태 유지. Google은 결제 API와 이벤트 유형을 계속 수정하므로, 여러분의 통합도 이에 맞춰 발전시키지 않으면 조용히 구식이 되어버립니다.
Google Play 환불 알림. 여러분의 시스템은 관련된 각 Google Play 환불 알림을 올바르게 처리하고, 이를 적절한 구매, 권한, 고객 기록과 연결해야 합니다.
개별적으로 보면 이 중 특별히 어려운 것은 없습니다. 하지만 이를 모두 합치면, 어차피 이의 제기가 거의 불가능한 환불을 정확하게 추적하기 위해 구축하고 유지보수해야 할 상당한 수준의 인프라가 됩니다.
이것이 환불 처리와 맞물리는 방식
이 모든 조각을 모으면, Google Play 환불 처리는 두 가지 축으로 나뉩니다. 이의 제기가 가능한 유일한 사안(지급거절 검토)을 기한 내에 포착하는 것, 그리고 이의 제기가 불가능한 나머지 모든 것을 정확하게 기록해 권한과 분석 데이터를 정직하게 유지하는 것입니다. 이 두 축 모두 RTDN + Voided Purchases 기반이 견고해야 성립합니다.
RTDN과 Voided Purchases API로 Google Play 환불을 추적하는 방법을 궁금해하는 팀이라면, 답은 빠른 이벤트 감지에는 RTDN을, 조정 및 복구에는 Voided Purchases API를 사용하는 것입니다. 이를 통해 백엔드는 환불, 취소된 구매, 지급거절에 대해 더 완전한 그림을 얻게 됩니다.
이것이 바로 RefundSensor가 대신 관리해주는 계층입니다. Pub/Sub 토픽을 자동으로 프로비저닝하므로 Play Console에 토픽 이름 하나만 붙여넣으면 되고, RTDN을 실시간으로 처리하며, 취소된 구매와 대조해 아무것도 놓치지 않도록 조정하고, 기한 내에 지급거절 검토에 대한 거절 권고를 제출하며, 그 외 모든 환불을 Apple 환불과 함께 하나의 대시보드에 기록합니다. 두 메커니즘을 직접 구축하거나 유지보수하지 않고도 올바른 이중 메커니즘 설정의 결과를 얻을 수 있습니다.
공식 자료 {#official-sources}
Google의 결제 API는 계속 변경되므로, 공식 문서를 최종 기준으로 삼으세요:
하나의 설정, 두 가지 메커니즘, 유지보수는 제로. RefundSensor는 Pub/Sub을 자동으로 프로비저닝하고, RTDN을 실시간으로 처리하며, 취소된 구매와 대조해 조정하고, Google Play와 Apple의 지급거절 검토를 하나의 대시보드에서 처리합니다. 무료로 시작하기 →
게시 후 추가할 내부 링크: Google Play refunds cornerstone · Apple refund automation cornerstone · the 12-hour window.
자주 묻는 질문
RTDN은 Pub/Sub을 통해 이벤트를 실시간으로 서버에 푸시합니다. 반면 Voided Purchases API는 필요할 때마다 취소된 주문 목록을 가져올 수 있게 해줍니다. RTDN은 속도를 제공하고, Voided Purchases API는 완전성을 제공합니다.
신뢰할 수 있는 설정을 원한다면 그렇습니다. RTDN은 실시간 트리거이고, Voided Purchases API는 푸시 경로에서 놓친 것을 위한 조정 안전망입니다. 둘 중 하나만 사용하면 빈틈이 남습니다.
일반적으로 환불, 지급거절, 또는 권한 철회로 인해 더 이상 유효하지 않은 주문을 말합니다. 취소된 구매를 추적하면 권한과 분석 데이터를 정확하게 유지할 수 있습니다.
RTDN은 Google Cloud Pub/Sub 위에서 동작하므로 토픽, Google Play에 대한 게시 권한, 그리고 여러분 쪽의 구독자가 필요합니다. 즉, URL 하나를 붙여넣는 것보다 움직여야 할 부분이 많습니다. RefundSensor는 Pub/Sub 토픽을 자동으로 프로비저닝해 이러한 번거로움을 없애줍니다.
대부분은 불가능합니다. 일반적인 환불과 권한 철회는 Google이 결정합니다. 이의 제기가 가능한 유일한 경우는 검토 중인 지급거절(chargeback)이며, 이는 RTDN을 통해 포착해 약 24시간의 기한 내에 대응해야 합니다.



