구독 환불은 일회성 환불과 다르게 작동하며, 당신이 얼마나 결정권을 갖는지는 이용 중인 스토어가 정합니다
구독 환불은 단일 판매가 아니라 청구 기간 전체를 되돌립니다. App Store에서는 Apple이 결정하고 당신의 서버는 결과만 알게 됩니다. Google Play에서는 전액 환불인지 일할 환불인지 당신이 직접 고릅니다. 각 스토어가 구독 환불을 어떻게 처리하는지, 그리고 환불 한 건이 당신에게 얼마의 비용을 물리는지 알아봅니다.

핵심 요약
- 구독 환불은 일회성 환불과 같지 않습니다. 되돌려지는 단위는 청구 기간이며, 두 스토어 모두에서 구독 주문을 환불하면 구독이 취소되고 접근이 차단됩니다.
- App Store에서는 모든 구독 환불을 Apple이 결정합니다. 고객이 reportaproblem.apple.com에서 Apple에 요청하고, Apple이 판정하며, 당신의 서버는 REFUND, REFUND_DECLINED, REFUND_REVERSED 알림을 통해서만 결과를 알게 됩니다.
- Apple이 구독 환불을 승인하면 해당 거래에 revocationDate가 붙고 구독의 autoRenewStatus가 false로 설정되므로, 갱신이 멈추고 고객은 접근을 잃습니다.
- Apple은 자동 갱신 구독을 당신의 사용 지표가 아니라 경과 시간으로 측정합니다. 연간 요금제의 6개월째에 있는 사람은 약 50%를 소비한 것이며, 그에 대해 표현할 수 있는 환불 선호는 GRANT_PRORATED뿐입니다.
- Google Play에서는 환불을 당신이 직접 발행합니다. purchases.subscriptionsv2.revoke는 현재 기간 전체를 돌려주는 fullRefund, 또는 사용하지 않은 권리 기간만 돌려주는 proratedRefund 중 하나를 받습니다.
- Google Play에서 어느 주문을 환불하느냐가 결과를 바꿉니다. 가장 최근 주문을 환불하면 구독이 즉시 제거되고 향후 갱신이 취소됩니다. 더 오래된 주문을 환불하면 구독은 유효한 채로 남습니다.
- Google Play의 제한은 엄격합니다. three years보다 오래된 주문은 환불할 수 없고, 부분 환불은 March 2018 이후에 이루어진 주문에만 적용되며, 유료 앱에는 적용되지 않고, 한 번 발행한 환불은 되돌릴 수 없습니다.
구독을 환불하는 것과 단일 인앱 구매를 환불하는 것은 같은 버튼처럼 느껴집니다. 하지만 그렇지 않습니다. 일회성 구매는 당신이 돌려주는 한 건의 결제입니다. 구독은 살아 있는 권리가 붙은 반복 결제이므로, 구독 환불은 일회성 환불이 결코 묻지 않는 두 가지 질문에 답해야 합니다. 현재 기간 중 얼마를 돌려줄 것인가, 그리고 구독은 계속 돌아갈 것인가입니다. App Store와 Google Play는 이 두 질문에 정반대로 답하며, 그 간극이 당신이 얼마나 통제권을 갖는지, 그리고 얼마의 돈이 당신의 계좌에서 빠져나가는지를 결정합니다.
간단한 지도는 이렇습니다. App Store에서는 Apple이 결정권을 쥐고 당신은 나중에 알게 됩니다. Google Play에서는 당신이 조작 장치를 쥐고 전액인지 일할인지 직접 고릅니다. 이 글은 두 스토어, 각 스토어가 사용하는 정확한 필드와 알림, 구독이 여러 번 청구되었을 때 어느 주문을 다루는지, 그리고 이미 쓴 컴퓨팅 비용까지 계산했을 때 구독 환불이 실제로 얼마나 드는지를 짚어 봅니다.
구독 환불은 일회성 환불과 어떻게 다른가
두 스토어 모두 환불을 특정 주문을 되돌리는 것으로 취급합니다. 일회성 구매에는 주문이 하나뿐이라 고를 것이 없습니다. 구독은 청구 기간마다 하나씩인 주문의 사슬이며, 활성이거나 아닌 권리가 붙어 있습니다. 바로 그 구조 때문에 구독 환불에는 일회성 환불에는 없는 선택이 따릅니다.
되돌려지는 단위는 청구 기간이다
구독을 환불할 때 당신은 평생 치의 결제를 돌려주는 것이 아닙니다. 당신이 다루는 것은 사슬 속의 한 건, 보통은 가장 최근의 한 건이며, 그것은 단일 청구 기간입니다. 전액 환불은 그 기간 전체를 돌려줍니다. 일할 환불은 고객이 아직 쓰지 않은 기간의 부분만 돌려줍니다. 어느 쪽이든 당신이 되돌리는 판매는 한 기간의 가격이지, 고객이 앱과 함께한 전체 이력이 아닙니다.
누가 결정하는가가 진짜 차이다
더 날카로운 갈림길은 권한입니다. App Store에서는 구독 환불이 애초에 일어날지 여부를 Apple이 결정하고, 당신은 기껏해야 맥락을 제공합니다. Google Play에서는 당신이 결정하고, API는 당신이 말한 그대로 정확히 실행합니다. 고객에게는 같은 결과지만 개발자가 앉는 자리는 완전히 다르며, 그에 따라 각 경우를 처리하기 위해 만드는 것도 달라집니다.
App Store는 구독 환불을 어떻게 처리하는가
Apple 쪽에서 당신은 작은 마이크를 든 관객입니다. 고객이 Apple과 이야기하고, Apple이 판단을 내리며, 당신의 서버는 결과를 읽습니다.
고객이 Apple에 요청하고, Apple이 판정한다
App Store 고객은 당신이 아니라 reportaproblem.apple.com에서 구독 환불을 요청합니다. Apple은 자체 신호에 비추어 요청을 검토하고 결정합니다. 당신이 승인하는 것이 아니며, Google Play처럼 구독 환불을 발행하게 해 주는 Apple 콘솔 버튼도 없습니다. Apple은 구매로부터 최대 90 days 동안 검토 요청을 받아들일 수 있고, 일단 판정을 내리면 그 결정은 Apple의 것입니다.
환불이 도착할 때 당신의 서버가 보는 것
당신은 App Store Server Notifications V2를 통해 결과를 알게 됩니다. 승인된 환불은 REFUND 알림으로 도착하고, 그 거래에는 접근이 언제 끝나야 하는지 표시하는 revocationDate가 붙습니다. 구독의 autoRenewStatus는 false로 설정되므로 갱신이 멈추고 고객은 권리를 잃습니다. Apple이 요청을 거부하면 REFUND_DECLINED를 받고, Apple이 나중에 이미 승인한 환불을 되돌리면 REFUND_REVERSED를 받고 구독이 되살아납니다. 당신의 일은 이것들을 읽고 접근을 전환하는 것이지, 표를 던지는 것이 아닙니다.
| 알림 | 의미 | 당신이 할 일 |
|---|---|---|
| REFUND | Apple이 환불을 승인함. 거래에 revocationDate가 붙음 | 접근을 취소하고 autoRenewStatus를 false로 취급 |
| REFUND_DECLINED | Apple이 고객의 환불 요청을 거부함 | 아무것도 바뀌지 않음. 구독은 유지됨 |
| REFUND_REVERSED | Apple이 승인했던 환불을 되돌림 | 접근과 판매를 복원 |
Apple은 구독을 당신의 지표가 아니라 시간으로 측정한다
소비형 상품이라면 소비 데이터를 통해 얼마나 사용되었는지를 Apple에 알릴 수 있습니다. 자동 갱신 구독의 경우 Apple이 경과 시간으로부터 소비를 스스로 계산합니다. Apple 자신의 예시는 연간 구독의 6개월째에 있는 고객으로, 그중 약 50%를 소비했습니다. 그러므로 당신의 사용 지표가 구독의 숫자를 정하지 않습니다. 당신이 당길 수 있는 유일한 레버는 refundPreference이며, 구독에 관계된 값은 GRANT_PRORATED로, Apple이 사용하지 않은 부분만 돌려주기를 바란다는 뜻입니다. 그것은 선호이지 결정이 아닙니다. 판정은 여전히 Apple이 합니다.
Google Play는 구독 환불을 어떻게 처리하는가
Google Play는 결정을 당신의 손에 맡깁니다. 구독을 직접 환불하고, 얼마를 돌려줄지 고르고, 접근을 끝낼지 정하게 해 주는 Play Console 화면과 일련의 API 메서드가 있습니다. 이는 Apple과 정반대의 자세이며, 당신이 제대로 해야 하는 선택이 따라옵니다.
전액이냐 일할이냐, 그것은 당신의 판단
지금 구독을 환불하고 취소하는 방법은 purchases.subscriptionsv2.revoke이며, revocationContext와 함께 호출합니다. fullRefund를 넘기면 Google Play는 구독을 종료하고 현재 청구 기간의 전액을 돌려줍니다. proratedRefund를 넘기면 Google Play는 구독을 종료하고 남은 미사용 권리 기간만 돌려줍니다. 예전 메서드는 전액 환불만 할 수 있었고, 그것이 새 메서드를 쓰는 이유입니다. 일할 취소는 두 줄짜리 본문으로, proratedRefund를 감싼 revocationContext이며, 기간 전체에는 fullRefund로 바꿔 넣습니다. 어느 취소든 SUBSCRIPTION_REVOKED 실시간 개발자 알림을 발생시키며, 그것이 접근을 차단하라는 신호입니다.
어느 주문을 환불하느냐가 무슨 일이 일어날지를 바꾼다
Google Play는 orders.refund를 통해 취소 없이 주문을 환불하는 것도 허용하며, 여기서 미묘한 규칙이 작용합니다. 구독에서 가장 최근 주문을 환불하면 그 주문이 환불되고 구독은 즉시 제거되며 향후 갱신이 취소됩니다. 사슬 속의 더 오래된 주문을 환불하면 그 주문은 환불되지만 구독은 유효한 채로 남습니다. orders.refund의 revoke 매개변수는 주문이 가장 최신일 때만 취소하므로, 유효한 구독의 접근을 끝내려면 대신 purchases.subscriptionsv2.revoke를 사용합니다.
| 동작 | 환불되는 주문 | 구독에 일어나는 일 |
|---|---|---|
| 가장 최근 주문 환불 | 최신 청구 기간 | 즉시 제거, 향후 갱신 취소 |
| 더 오래된 주문 환불 | 지난 청구 기간 | 유효하게 유지, 계속 갱신 |
| subscriptionsv2.revoke, 전액 또는 일할 | 현재 기간 | 지금 종료, SUBSCRIPTION_REVOKED 발송 |

개발자를 걸려 넘어지게 하는 제한들
몇 가지 딱딱한 경계가 사람들을 붙잡으며, 그 어느 것도 순탄한 경로에 있지 않습니다.
- three years보다 오래된 주문은 아예 환불할 수 없습니다.
- 부분 환불은 March 2018 이후에 이루어진 주문에만 작동하고, 유료 앱 구매에는 결코 적용되지 않습니다.
- 한 주문에 여러 부분 환불을 쌓을 수 있지만, 주문 총액에 이르거나 그것을 넘을 수는 없습니다.
- 한 번 발행한 환불은 되돌릴 수 없습니다.
Google Play는 보통 하루 안에 환불 결정을 돌려주지만, 최대 나흘이 걸릴 수도 있습니다. 환불이 당신 자신의 접근 제어에 반영되어야 할 때는 그 지연을 감안해 두십시오.
구독 환불이 실제로 당신에게 얼마의 비용을 물리는가
환불되는 결제가 청구서 전부인 적은 결코 없습니다. 구독 주문이 전달된 순간, 당신은 이미 그것에 실제 돈을 썼습니다. 컴퓨팅, 모델 API 호출, 스토리지, 그리고 그 기간에 묶인 온갖 지급입니다. 환불은 판매를 돌려줍니다. 그것을 제공하기 위해 당신이 쓴 것은 돌려주지 않습니다. 구독에서는 손실의 모양이 당신이 어떤 환불을 발행하는지에 달려 있습니다.
전액이냐 일할이냐는 돈에 관한 결정
Google Play에서 전액 환불은 현재 기간 전체를 돌려주므로, 당신은 그 기간의 매출 전부를 잃으면서 그 기간에 이미 발생시킨 비용은 모두 떠안습니다. 일할 환불은 사용하지 않은 조각만 돌려주므로, 고객이 실제로 누린 부분의 매출은 지킵니다. 고객이 10달러 요금제에서 월 기간의 60%를 지났다면, 전액 환불은 당신에게 10달러 전부의 비용을 물리고, 일할 환불은 사용하지 않은 40%에 해당하는 약 4달러의 비용을 물립니다. Apple도 구독 환불 규모를 정할 때 자기 쪽에서 같은 경과 시간 논리를 적용합니다.
| 환불 유형 | 고객이 돌려받는 것 | 당신이 지키는 것 |
|---|---|---|
| 전액 환불 | 현재 기간 전체, 10.00 | 이 기간에서 남는 것 없음 |
| 일할 환불 | 사용하지 않은 40%, 약 4.00 | 사용한 60%, 약 6.00 |
결코 돌아오지 않는 비용
당신이 어떤 환불을 발행하든 그 기간의 하류 비용은 사라졌습니다. 당신이 값을 치른 모델 API 호출, 당신이 렌더링한 영상, 당신이 프로비저닝한 스토리지, 당신이 이미 보낸 크리에이터 지급, 그 어느 것도 구독 환불이 처리되어도 되돌아오지 않습니다. 고객이 실제로 사용한 것에 맞춰 환불 규모를 정하고, 그들이 얼마나 오래전에 구독했는지로 결코 정하지 마십시오. 경과 시간은 비용이 아니며 두 스토어 모두 그것을 비용으로 취급하지 않기 때문입니다. 그리고 August 3, 2026 이후로, Google Play 구독 결제가 당신이 발행하는 환불이 아니라 은행 차지백으로 끝나면, 당신은 은행의 차지백 수수료까지 떠안습니다. 당신이 먼저 환불을 승인하면 그것은 피할 수 있습니다.
사람이 지켜보지 않아도 구독 환불을 처리하는 방법
이 중 어느 것도 누군가 대시보드를 읽기를 기다려서는 안 됩니다. 알림은 어느 시각에나 도착하며, 접근은 환불이 착지하는 순간에 전환되어야 하고 다음 날 아침이 아닙니다.
결과를 읽고 두 스토어 모두에서 접근을 취소한다
App Store에서는 REFUND, REFUND_DECLINED, REFUND_REVERSED를 수신하고 revocationDate와 autoRenewStatus를 사용해 접근을 자동으로 끝내거나 복원합니다. Google Play에서는 SUBSCRIPTION_REVOKED와 무효화된 구매 신호를 수신하고 같은 일을 합니다. 이것이 RefundHalt가 당신을 위해 돌리는 배관입니다. 알림이 들어오고, 계정이 매칭되고, 접근이 전환되며, 루프에 사람이 없습니다.
분쟁 전에 증거를 준비해 둔다
실제로 당신의 입력을 요구하는 좁은 창, 소비형 상품에 대한 Apple의 12시간 CONSUMPTION_REQUEST와 Google Play의 24시간 차지백 검토는 증거가 이미 존재할 때만 도움이 됩니다. 모든 구매에 계정 식별자를 붙이십시오. Apple에서는 appAccountToken UUID를, Google Play에서는 64 characters 이하의 해시된 setObfuscatedAccountId를 붙이고, 각 유료 기간이 무엇을 전달했는지 기록하십시오. 그러면 토큰이 도착할 때 케이스는 이미 구축되어 있고, 창 안에서 답하는 것은 기계의 일이지 허둥지둥하는 일이 아닙니다.
자주 묻는 질문
- 구독을 환불하는 것은 일회성 구매를 환불하는 것과 다릅니까?
- 네. 일회성 구매는 당신이 돌려주는 단일 주문입니다. 구독은 살아 있는 권리가 붙은 주문의 사슬이므로, 구독 환불은 하나의 청구 기간에 작용하고 구독이 계속 돌아갈지도 함께 결정합니다. App Store와 Google Play 모두에서 구독 주문을 환불하면 구독이 취소되고 접근이 끝나며, 흔히 기간 전체를 돌려줄지 사용하지 않은 부분만 돌려줄지 고를 수 있습니다.
- 개발자가 App Store 구독 환불을 직접 발행할 수 있습니까?
- 아니요. App Store 구독 환불은 Apple이 결정합니다. 고객이 reportaproblem.apple.com에서 요청하고, Apple이 판정하며, 당신은 REFUND, REFUND_DECLINED, REFUND_REVERSED 알림을 통해 결과를 알게 됩니다. 당신이 제공할 수 있는 유일한 입력은 GRANT_PRORATED 같은 refundPreference이며, Apple은 그것을 결정이 아니라 선호로 취급합니다.
- Google Play에서 일할 구독 환불을 어떻게 발행합니까?
- revocationContext를 proratedRefund로 설정해 purchases.subscriptionsv2.revoke를 호출합니다. Google Play는 구독을 종료하고 남은 미사용 권리 기간만 돌려준 뒤 SUBSCRIPTION_REVOKED 알림을 보냅니다. 대신 fullRefund를 넘기면 현재 기간 전체를 돌려줍니다. 예전 취소 메서드는 전액 환불만 할 수 있었습니다.
- 왜 내 Google Play 환불이 구독을 취소하지 않았습니까?
- 사슬 속의 더 오래된 주문을 환불했기 때문입니다. Google Play에서는 가장 최근 주문을 환불하면 구독이 즉시 제거되고 향후 갱신이 취소되지만, 더 오래된 주문을 환불하면 그 기간은 환불되어도 구독은 유효한 채로 남습니다. orders.refund의 revoke 매개변수는 주문이 가장 최신일 때만 취소하므로, 유효한 구독을 끝내려면 purchases.subscriptionsv2.revoke를 사용하십시오.
- 구독 주문은 얼마나 오래전 것까지 환불할 수 있습니까?
- Google Play에서는 three years보다 오래된 주문은 환불할 수 없습니다. 부분 환불은 March 2018 이후에 이루어진 주문에만 작동하고 유료 앱에는 결코 적용되지 않으며, 한 번 발행한 환불은 되돌릴 수 없습니다. App Store에서는 Apple이 구매로부터 최대 90 days까지 고객의 환불 요청을 받아들이고 각각을 스스로 판단합니다.
출처 및 추가 자료
- Android Developers: Manage subscriptions and one-time purchases
- Play Console Help: Manage your app's orders and issue refunds
- Google Play Developer API: orders.refund
- Google Play Developer API: purchases.subscriptionsv2.revoke
- Google Play Help: Refund policies for apps, games, and in-app purchases
- Apple Developer: Handling refund notifications
- Apple Developer WWDC21: Support customers and handle refunds
RefundHalt
App Store와 Google Play 환불 자동 처리
계속 읽기
차지백과 환불의 차이는 누가 결정하느냐에 있고, 최종적인 것은 둘 중 하나뿐이다
App Store나 Google Play의 환불은 스토어가 지급하고 스토어가 결정한다. 차지백은 고객의 은행이 돈을 되찾아 가는 것으로, 은행이 결정하며 이의를 제기할 수 없다. 앱 개발자에게 이 둘의 차이는 이제 돈의 문제다. 2026년 8월 3일 부터 Google Play가 차지백 비용을 당신에게 떠넘기기 때문이다.
8월 3일부터 Google Play 차지백 비용이 개발자에게 넘어왔고, 이제 각 분쟁이 당신에게서 무엇을 가져가는지 정리한다
Google Play가 조용히 차지백을 대신 부담하기를 중단했습니다. 2026년 8월 3일 당일 또는 그 이후에 이루어진 주문에 대해, 분쟁이 제기된 주문마다 당신은 Play의 서비스 수수료를 뺀 구매 대금에 은행 수수료를 더해 되갚게 됩니다. 무엇이 바뀌었는지, 이제 차지백 한 건의 비용이 얼마인지, 그리고 당신이 반박할 수 있는 24시간의 창구를 정리합니다.