유료 앱 환불은 서버에 절대 도달하지 않습니다. 그래서 앱이 직접 알아채야 합니다
선결제 유료 앱의 환불은 서버가 수신하는 모든 알림을 건너뜁니다. Google은 구매자에게 2시간의 반품 기간을 주고 앱을 제거하며, Apple은 계약에 따라 90일 이내에 환불할 수 있고, 둘 다 증거를 요구하지 않습니다. 각 스토어가 무엇을 알려 주는지, 비용이 얼마나 드는지, 앱 안에서 어떻게 확인하는지 정리했습니다.

핵심 요약
- 유료 앱 환불은 인앱 구매가 아니라 앱 다운로드 자체의 가격에 대한 환불이며, Apple과 Google 모두 이에 대한 서버 알림을 문서화하지 않았습니다.
- Google Play Console 고객센터에 따르면 구매자는 유료 앱을 구매한 후 최대 2시간 안에 반품하고 전액 환불을 받을 수 있으며, 같은 앱은 한 번만 반품할 수 있습니다.
- Google Play 환불 정책에 따르면 앱은 환불 과정에서 제거되며, 같은 앱을 다시 구매한 구매자는 두 번째 환불을 받을 수 없습니다.
- Apple의 App Store Server Notifications V2에서 REFUND 유형은 소모성, 비소모성, 자동 갱신 구독, 비갱신 구독을 다룹니다. 앱 구매는 이 목록에 없습니다.
- Apple Developer Program 사용권 계약의 Schedule 2 제6.3조에 따라 Apple은 다운로드 후 90일 이내에 취소한 구매자에게 환불할 수 있고, 개발자는 그 금액을 Apple에 상환합니다.
- Apple의 StoreKit 문서는 앱 구매의 서명된 기록인 AppTransaction에 revocationDate를 명시하고 있으며, 앱은 기기에서 이를 확인할 수 있습니다.
- CONSUMPTION_REQUEST와 Google Play의 orders.reviewrefund는 모두 앱 다운로드 구매에 대해 문서화되어 있지 않습니다. 따라서 유료 앱 환불은 개발자의 증거 없이 결정됩니다.
선결제 유료 앱의 환불은 대부분의 환불 도구가 지켜보지 않는 옆문으로 처리됩니다. 구매자가 앱 안에서 산 무언가가 아니라 앱 자체를 반품하면, Apple과 Google은 서버에 알림을 단 한 건도 보내지 않은 채 정산금에서 그 금액을 회수합니다. Google은 적어도 앱을 제거합니다. iOS에서는 Apple 공식 포럼의 개발자들이 환불받은 구매자가 앱을 계속 사용한다고 보고합니다. 유료 앱을 판매한다면, 유료 앱 환불은 보고서의 마이너스 한 줄로만 보게 되는 유일한 환불입니다. 앱이 기기에서 직접 확인하지 않는 한 그렇습니다.
Google Play와 App Store의 유료 앱 환불 규칙
두 스토어 모두 다운로드 구매를 고유한 규칙을 가진 별도의 상품으로 취급합니다. 각 스토어의 문서 내용은 다음과 같습니다.
| 규칙 | Google Play | App Store |
|---|---|---|
| 빠른 셀프 서비스 반품 | 구매 후 최대 2시간 이내, 전액 환불 | 문서화되지 않음 |
| 더 긴 요청 기간 | 구매자는 48시간 이내에 요청 가능, 이후에는 개발자에게 연락 | 개발자 계약 Schedule 2에 따라 Apple은 다운로드 후 90일 이내에 환불 가능 |
| 횟수 | 앱당 한 번. 재구매분은 다시 환불할 수 없음 | 문서화되지 않음 |
| 앱은 어떻게 되는가 | 환불 과정에서 제거됨 | 문서화되지 않음. 환불받은 구매자가 계속 이용한다고 개발자들이 보고 |
| 개발자의 환불 가능 여부 | 가능. Play Console에서 전액 환불만 가능 | 불가능 |
| 서버 알림 | 문서화되지 않음 | 문서화되지 않음 |
| 증거 요청 | 문서화되지 않음 | 문서화되지 않음 |
Google Play 2시간 반품의 작동 방식
Google의 Play Console 고객센터는 이를 분명히 밝힙니다. 유료 앱을 구매한 사용자는 최대 2시간 안에 반품하고 전액 환불을 받을 수 있으며, 앱은 한 번만 반품할 수 있습니다. Google의 소비자 환불 정책은 여기에 더해, 구매 내용에 따라 48시간 이내에는 환불을 받을 수 있고, 앱은 환불 과정에서 제거되며, 같은 앱을 다시 구매한 사람은 그 앱에 대해 환불을 받을 수 없다고 설명합니다. 48시간이 지나면 Google은 구매자를 개발자에게 안내합니다.
Apple이 유료 앱을 환불하는 방식
App Store에서는 구매자가 reportaproblem.apple.com을 통해 Apple에 요청하고, 사유를 고른 뒤 앱을 선택합니다. Apple은 24시간에서 48시간 이내에 진행 상황을 알려 준다고 안내합니다. App Store 구매는 개발자가 직접 환불할 수 없습니다. 최대 한도는 계약이 정합니다. Apple Developer Program 사용권 계약 Schedule 2 제6.3조는 구매자가 다운로드 후 90일 이내에 취소를 원하거나, 앱이 개발자의 사양 또는 관련 법률에 부합하지 않으면 Apple이 전액을 환불할 수 있고, 개발자는 그 금액을 Apple에 상환하거나 크레딧을 제공한다고 규정합니다.
유료 앱 환불 소식이 서버에 전혀 전달되지 않는 이유
두 스토어가 보내는 환불 신호는 모두 인앱 구매를 위해 만들어졌습니다. Apple은 notificationType을 알림을 발생시킨 인앱 구매 또는 외부 구매 이벤트로 설명합니다. REFUND 유형은 소모성, 비소모성, 자동 갱신 구독 또는 비갱신 구독을 다룹니다. Get Refund History는 고객이 환불받은 인앱 구매를 반환합니다. 앱 다운로드는 이 중 어느 목록에도 없습니다.
Google도 마찬가지입니다. 실시간 개발자 알림은 구독, 일회성 제품, 무효화된 구매를 다루며, 무효화된 구매의 productType은 구독 아니면 일회성 구매입니다. Voided Purchases API는 일회성 인앱 주문과 구독에 적용된다고 설명하며, 30일 전까지만 조회할 수 있습니다.
유료 앱 환불도 CONSUMPTION_REQUEST를 발생시키나요?
아닙니다. Apple 문서에 따르면 CONSUMPTION_REQUEST는 고객이 소모성 인앱 구매나 자동 갱신 구독의 환불을 요청할 때 전송됩니다. 이는 두 스토어를 통틀어 개발자에게 증거를 요구하는 단 두 가지 환불 흐름 중 하나입니다. 다른 하나는 Google Play의 지불 거절 검토로, 24시간 이내에 orders.reviewrefund로 응답하며 이 역시 같은 인앱 알림 경로로 도착합니다. 둘 다 앱 다운로드에 대해서는 문서화되어 있지 않습니다. 유료 앱 환불은 개발자가 보낼 수 있는 어떤 자료도 없이 결정됩니다.
환불받은 구매자가 앱을 계속 사용하나요?
Google Play에서는 정책상 앱이 제거됩니다. iOS의 경우, Apple 포럼에는 바로 이 점을 묻는 개발자들의 스레드가 있습니다. 2025년 3월의 한 스레드는 이렇게 씁니다. “사용자가 선결제 유료 앱을 환불받아도 여전히 앱에 접근할 수 있습니다.” 2022년의 또 다른 스레드는 구매하고, 설치하고, 환불받은 뒤 계속 사용하는 구매자가 있다고 의심합니다. 2025년 6월의 세 번째 스레드는 App Store Server Notifications V2가 앱 단위 환불을 보고하기는 하는지 묻습니다. 세 스레드 모두 Apple의 답변이 없습니다.
유료 앱 환불로 잃는 돈
정산 쪽은 예측할 수 있습니다. Google의 Play Console 고객센터에 따르면 환불 시 Google이 서비스 수수료를 돌려주므로, 정산금에서 차감되는 것은 정가가 아니라 개발자의 몫입니다. Google이 이미 대금을 지급한 뒤 발생한 환불은 향후 정산금에서 차감되며, 잔액이 48시간 이상 마이너스로 유지되면 Google이 은행 계좌에서 인출할 수 있습니다. Apple 쪽은 계약상 가격과 같은 금액을 상환해야 합니다. 실제로는 RevenueCat이 2022년에 Apple이 Extended Partner Share로 표시되는 수수료 차감 후 금액을 차감했다고 보고했습니다. 즉 Apple은 자기 몫을 가져가지 않았습니다.
돌아오지 않는 비용은 그 구매자에게 서비스를 제공하느라 이미 지출한 비용입니다. 예를 들어 보겠습니다. $6.99짜리 유료 사진 앱이 클라우드 모델로 필터를 처리하고 프로젝트를 클라우드 스토리지에 동기화합니다. 그 구매자를 데려온 광고에도 비용을 지불했습니다.
| 비용 항목 | Google Play에서 돌려받는가 | App Store에서 돌려받는가 |
|---|---|---|
| $6.99 중 개발자 몫 | 정산금에서 회수됨 | 정산금에서 회수됨 |
| 스토어 서비스 수수료 또는 커미션 | Google이 개발자에게 돌려줌 | RevenueCat의 보고에 따르면 부과되지 않음 |
| 이미 사용된 클라우드 추론 및 API 호출 | 아니요 | 아니요 |
| 동기화된 프로젝트의 스토리지 | 아니요 | 아니요 |
| 구매자 확보를 위한 광고비 | 아니요 | 아니요 |
| 구매자가 앱을 계속 사용할 때의 지속적인 서버 비용 | 종료됨. 앱이 제거됨 | 앱이 확인할 때까지 계속됨 |
iOS에서 비용이 커지는 곳이 바로 마지막 행입니다. 앱을 그대로 가진 환불 구매자는 계속 백엔드를 호출하고, 환불 이후의 모든 추론 요청, 동기화, API 호출은 수익이 뒷받침하지 않는 비용이 됩니다. 서버 비용이 없는 유료 앱이라면 환불은 판매 한 건을 잃는 것입니다. 백엔드가 있는 앱이라면 계속 쌓이는 청구서가 될 수 있습니다.
앱 안에서 유료 앱 환불을 감지하는 방법
서버에는 아무것도 전달되지 않으므로, 확인은 기기에서 시작해 서버에 알리는 방식이어야 합니다.
iOS에서는 AppTransaction의 revocationDate를 읽습니다
AppTransaction은 고객의 앱 구매에 대한 App Store의 서명된 기록입니다. Apple의 StoreKit 문서는 이제 여기에 앱 구매의 철회 날짜로 설명되는 revocationDate 속성을 명시합니다. 실행 시 AppTransaction.shared를 읽고, 결과를 검증하고, revocationDate가 nil이 아니면 환불된 다운로드로 취급하세요. 서명된 값을 서버로 보내 해당 계정에 대한 서비스를 중단할 수 있게 하세요.
- Apple에 따르면 appTransactionID는 환불이나 재구매 후에도 같은 Apple 계정에서 변하지 않습니다. 이를 기록의 키로 사용하면 다시 결제한 구매자를 식별할 수 있습니다.
- AppTransaction.refresh()는 App Store에서 새 기록을 가져오지만 로그인 프롬프트를 표시합니다. Apple은 복원 버튼을 탭하는 것처럼 사용자가 명시적으로 동작한 뒤에만 호출하라고 안내합니다.
- 서명된 값은 기기에 있습니다. Apple 문서에는 이에 대한 서버 알림이 설명되어 있지 않으므로, 서버는 앱이 보고하는 내용만 알 수 있습니다.

Android에서는 Play Integrity에 라이선스 판정을 요청합니다
대부분의 경우는 Google의 앱 제거로 해결되지만, 백업에서 사이드로드한 사본처럼 제거 이후에도 남는 사본이 있을 수 있습니다. Play Integrity API는 로그인한 계정에 대해 appLicensingVerdict를 반환합니다. LICENSED는 사용자에게 앱 사용 자격이 있다는 뜻입니다. UNLICENSED는 자격이 없다는 뜻이며, Google은 GET_LICENSED 대화상자를 표시하라고 제안합니다. UNEVALUATED는 사용자가 Google Play에 로그인하지 않은 경우처럼 Google이 확인하지 못했다는 뜻입니다. Google은 또한 일부 구형 기기에서는 앱을 제거한 후에도 사용자의 자격이 유지된다고 설명합니다. 따라서 LICENSED가 모든 기기에서 유효한 구매의 증거가 되지는 않습니다.
서버를 문지기로 삼으세요
클라이언트 확인은 패치로 무력화될 수 있습니다. 지킬 가치가 있는 것은 백엔드가 수행하는 유료 작업입니다. 그러니 마지막 보고가 환불이었거나, UNLICENSED 판정이었거나, 직접 정한 유예 기간이 지나도 판정이 전혀 없는 계정의 호출은 백엔드가 거부하도록 하세요. 그래야 환불이 공짜 컴퓨팅으로 바뀌지 않습니다.
유료 앱을 인앱 구매로 전환해야 할 때
비즈니스 모델 변경에 관한 Apple의 자체 가이드는 유료 앱에서 인앱 구매가 있는 무료 앱으로 전환하고, AppTransaction의 originalAppVersion을 사용해 유료 버전을 구매한 사람들에게 계속 프리미엄 기능을 제공하는 방법을 설명합니다. 이 전환이 환불 측면에서 주는 이점은 구체적입니다. 가격을 비소모성 항목이나 구독에 두면, 환불은 서버가 대응할 수 있는 REFUND 알림과 무효화된 구매로 도착하고, App Store의 구독 환불 요청은 CONSUMPTION_REQUEST를 발생시킵니다. 이것이 바로 RefundHalt가 수신하고 12시간 및 24시간 기한 안에 응답하는 신호입니다. 유료 다운로드는 이 중 어느 것도 주지 않습니다.
자주 묻는 질문
- Google Play에서 구매자는 유료 앱을 언제까지 반품할 수 있나요?
- Google의 Play Console 고객센터에 따르면 구매 후 최대 2시간 이내에 전액 환불을 받을 수 있으며, 앱당 한 번만 가능합니다. Google의 환불 정책은 구매자가 48시간 이내에 환불을 받을 수도 있으며, 그 이후에는 Google이 개발자에게 안내한다고도 설명합니다. 앱은 환불 과정에서 제거됩니다.
- 누군가 유료 앱을 환불받으면 Apple이 서버에 알려 주나요?
- 문서화된 알림은 없습니다. Apple의 App Store Server Notifications는 인앱 구매 이벤트를 다루며, REFUND 유형에는 소모성, 비소모성, 자동 갱신 구독, 비갱신 구독만 나와 있습니다. 앱은 기기에서 AppTransaction의 revocationDate를 읽어 서버에 보고할 수 있습니다.
- 환불받은 구매자가 유료 iOS 앱을 계속 사용할 수 있나요?
- Apple 포럼의 개발자들은 그렇다고 보고하며, Apple 문서에도 환불 후 앱을 제거하는 단계는 설명되어 있지 않습니다. 실행 시 AppTransaction의 revocationDate를 확인하고, 환불된 다운로드를 보고한 계정에는 서버가 서비스를 중단하도록 하세요.
- 유료 앱을 직접 환불할 수 있나요?
- Google Play에서는 가능합니다. Play Console에서 유료 앱에 대해 전액 환불만 할 수 있고 부분 환불은 할 수 없으며, Google은 서비스 수수료를 돌려줍니다. App Store에서는 불가능합니다. App Store 구매는 Apple만 환불할 수 있습니다.
- 사용량 증거로 유료 앱 환불에 이의를 제기할 수 있나요?
- 아니요. Apple의 CONSUMPTION_REQUEST는 소모성 항목과 자동 갱신 구독에 대해 문서화되어 있고, orders.reviewrefund를 통한 Google Play의 지불 거절 검토는 인앱 제품과 구독을 위해 만들어진 알림으로 도착합니다. 어느 스토어도 앱 구매 자체에 대한 증거 제출 흐름을 문서화하지 않았습니다.
출처 및 추가 자료
- Play Console Help: Issue refunds and cancellations
- Google Play Help: Apps, games and in-app purchases refund policies
- Google Play Developer API: Voided Purchases API
- Android Developers: Real-time developer notifications reference
- Android Developers: Play Integrity API integrity verdicts
- Apple Developer Documentation: notificationType (App Store Server Notifications V2)
- Apple Developer Documentation: AppTransaction
- Apple Developer Documentation: Supporting business model changes by using the app transaction
- Apple Developer Program License Agreement, Schedule 2 section 6.3
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer Forums: How to detect refund for paid app? (March 2025)
- Apple Developer Forums: AppTransactionId support and app-level refunds (June 2025)
- RevenueCat: Does Apple keep its commission after you refund a purchase?
RefundHalt
App Store와 Google Play 환불 자동 처리
계속 읽기
앱이 아직 App Store Server Notifications V1을 쓰고 있다면, Apple은 구독 환불에 대해 절대 묻지 않습니다
Apple은 2023년 6월 App Store Server Notifications V1을 지원 중단했고, V1에는 구독용 CONSUMPTION_REQUEST, REFUND_DECLINED, REFUND_REVERSED가 끝내 추가되지 않았습니다. V1 서버가 놓치는 것, 그로 인한 비용, 그리고 환불을 하나도 놓치지 않고 V2로 옮기는 방법을 정리했습니다.
Apple의 12개월 약정 월간 구독에서 환불 한 건은 1년 약정 전체를 끝낼 수도, 한 달분만 돌려줄 수도 있습니다
Apple의 12개월 약정 월간 구독은 환불을 두 가지로 나눕니다. 지난달을 환불하면 결제는 그대로 이어집니다. 이번 달을 환불하면 약정이 그 자리에서 끝납니다. 각 경우가 서버에 어떻게 도착하는지, 비용이 얼마인지, Apple에 무엇을 보내야 하는지 정리했습니다.