장애가 발생한 뒤 Apple과 Google 모두 구독 갱신일을 연장할 수 있게 해 주지만, 한도는 전혀 다르다
앱이 다운되었을 때 환불 요청을 기다리는 대신 구독 갱신일을 연장할 수 있습니다. Apple의 최대 90일 연장과 Google Play의 결제 연기가 어떻게 작동하는지, 각 스토어가 어디에 선을 긋는지, 각 방법에 어떤 비용이 드는지 살펴봅니다.

핵심 요약
- Apple의 App Store Server API를 사용하면 개발자는 유료이면서 활성 상태인 자동 갱신 구독의 갱신일을 1일에서 90일까지 연장할 수 있습니다. 서비스 장애, 이벤트 취소, 라이브 스트리밍 중단을 보상하기 위한 기능입니다.
- Apple은 고객 한 명당 365일 이내에 갱신일 연장을 두 번까지 허용합니다. 연장은 적용되면 되돌릴 수 없으며, Apple이 새 갱신일을 고객에게 이메일로 알립니다.
- 무료 혜택 기간 중이거나, 결제 재시도 중이거나, 만료일이 지난 유예 기간에 있거나, 이미 만료된 구독은 Apple이 연장하지 않습니다. 구독에는 최소 한 번의 유료 기간이 있어야 합니다.
- Apple 갱신일 연장으로 추가된 일수는 개발자의 구독 수익 배분율이 70%에서 85%로 오르는 데 필요한 1년의 유료 서비스 기간에 포함되지 않습니다.
- Google Play의 purchases.subscriptionsv2.defer는 호출 한 번에 구독의 다음 결제일을 최소 하루, 최대 1년까지 늦춥니다. 사용자는 요금을 내지 않고 전체 이용 권한을 유지하며, Google은 SUBSCRIPTION_DEFERRED 알림을 보냅니다.
- 갱신일 연장은 현금을 돌려주지 않으므로 개발자는 결제 금액을 그대로 갖지만, 추가된 기간 동안의 컴퓨팅, 스토리지, API 호출 비용을 이를 메워 줄 갱신 수익 없이 부담합니다. 환불은 구매 금액을 돌려주고, 그 고객에게 서비스를 제공하느라 이미 쓴 돈은 하나도 돌아오지 않습니다.
- 장애로 인해 인앱 구매 항목이 전달되지 않았고 Apple이 CONSUMPTION_REQUEST를 보낸다면, 정직한 deliveryStatus는 UNDELIVERED_SERVER_OUTAGE입니다. 또한 Apple은 DELIVERED 이외의 모든 상태에서 consumptionPercentage를 0으로 설정하도록 요구합니다.
다운타임은 모든 구독자에게 가장 깔끔한 환불 사유가 되며, 그들이 이를 말하지 못하게 막을 방법은 없습니다. 할 수 있는 일은 누군가 요청하기 전에 잃어버린 날들을 돌려주는 것입니다. 두 앱 스토어 모두 구독 갱신일을 연장할 수 있게 해 주므로, 고객은 현금 대신 무료 이용 기간을 받습니다. Apple은 연장 한 번을 최대 90일로 제한하고 1년에 두 번까지 허용합니다. Google은 호출 한 번으로 결제를 최대 1년까지 연기할 수 있게 해 줍니다. 절차, 알림, 그리고 그 밑에 깔린 비용이 크게 달라서 하나의 장애 대응 계획으로 두 스토어를 모두 다룰 수는 없습니다.
장애가 환불 위험에 미치는 영향
환불은 개발자가 아니라 스토어가 결정합니다. App Store에서는 고객이 Apple에 요청하고 Apple이 결정합니다. CONSUMPTION_REQUEST 알림을 받으면 Send Consumption Information을 통해 12시간 안에 소비 데이터를 보낼 수 있습니다. 개발자가 낼 수 있는 목소리는 그것이 전부입니다.
Google Play에서는 구매자가 구매 후 48시간 이내라면 개발자에게 묻지 않고 환불을 받을 수 있습니다. 그 이후의 요청은 개발자에게 옵니다. Google이 개발자의 증거를 요구하는 유일한 흐름은 개발자 검토 대상으로 표시된 지불 거절(chargeback)이며, orders.reviewrefund를 통해 24시간 이내에 답변해야 합니다. 지불 거절에 대한 은행의 결정은 최종적입니다.
즉, 어느 스토어도 환불을 막을 방법을 주지 않습니다. 개발자가 통제할 수 있는 것은 서비스가 복구되었을 때 구독자가 여전히 손해를 봤다고 느끼는지 여부입니다. 빠르게 제공하고 분명하게 알리는 추가 구독 기간이 바로 두 스토어가 이를 위해 만들어 둔 도구입니다.
App Store에서 구독 갱신일을 연장하는 방법
App Store Server API에는 이를 위한 엔드포인트가 두 개 있습니다. Extend a Subscription Renewal Date는 구독 하나에 적용되며, originalTransactionId로 대상을 지정합니다. Extend Subscription Renewal Dates for All Active Subscribers는 하나의 productId에 속한 모든 대상 구독자에게 적용되며, 장애가 일부 지역에만 영향을 줬다면 storefrontCountryCodes로 범위를 제한할 수 있습니다.
각 요청에는 세 가지가 들어갑니다. 1에서 90 사이의 숫자인 extendByDays, extendReasonCode, 그리고 직접 생성하는 requestIdentifier입니다. 사유 코드 3은 서비스 문제 또는 장애를 의미합니다. 코드 1은 고객 만족, 코드 2는 기타 사유, 코드 0은 미신고입니다.
Apple이 연장해 주는 구독
최소 한 번의 유료 기간을 거친 활성 자동 갱신 구독만 대상이 됩니다. Apple은 다음 구독을 건너뜁니다.
- 무료 체험처럼 무료 혜택 기간 중인 구독.
- 결제 재시도 상태에 있는 비활성 구독.
- 결제 유예 기간 중이면서 만료일이 이미 지난 구독.
- 지난 365일 동안 이미 갱신일 연장을 두 번 받은 구독.
- 만료된 구독.
가족 공유는 자동으로 함께 적용됩니다. Apple이 가족 공유를 지원하는 구매 구독을 연장하면 가족 구성원의 구독도 함께 연장됩니다. 가족 구성원의 구독을 직접 지정할 수는 없습니다.
일괄 요청은 느리므로 알림을 지켜보세요
Apple에 따르면 모든 활성 구독자를 연장하는 요청은 구독자 수에 따라 몇 시간, 길게는 며칠이 걸릴 수 있습니다. 200 응답은 Apple이 처리 중이라는 뜻일 뿐입니다. 결과는 App Store Server Notifications V2가 알려 줍니다.
| 알림 | 하위 유형 | 의미 |
|---|---|---|
| RENEWAL_EXTENDED | 없음 | 구독 하나의 갱신일이 연장됨 |
| RENEWAL_EXTENSION | FAILURE | 구독 하나의 연장이 실패함 |
| RENEWAL_EXTENSION | SUMMARY | 일괄 요청 전체가 완료됨 |
FAILURE가 올 때마다 페이로드에 있는 서명된 거래에서 originalTransactionId를 꺼내 단일 구독용 엔드포인트로 다시 시도하세요. 폴링을 선호한다면 Get Status of Subscription Renewal Date Extensions가 요청 완료 여부와 연장 성공 및 실패 건수를 알려 줍니다.
Google Play의 결제 연기 작동 방식
Google의 방식은 purchases.subscriptionsv2.defer이며, 구매 토큰마다 한 번씩 호출합니다. 요청 본문에는 세 개의 필드를 가진 deferralContext가 들어갑니다. etag는 purchases.subscriptionsv2.get에서 가져오며, 구독의 최신 etag와 일치하지 않으면 호출이 실패합니다. deferDuration은 날짜를 얼마나 미룰지 지정합니다. 그리고 validateOnly를 true로 설정하면 구독을 건드리지 않고 시험 실행만 합니다.
Google의 결제 가이드는 API 호출 한 번당 범위를 하루에서 1년으로 정하고 있습니다. 더 늘리려면 새 만료일이 오기 전에 다시 호출하면 됩니다. 자동 갱신 구독에서는 연기가 다음 갱신일을 옮깁니다. 선불 요금제에서는 만료 시간을 옮깁니다. 부가 항목이 있는 구독에서는 모든 항목이 같은 기간만큼 연기됩니다. 응답에는 각 항목의 새 expiryTime이 나열됩니다.
연기 기간 동안 사용자는 구독 상태와 전체 이용 권한을 유지하며 추가 기간에 대해 요금을 내지 않습니다. Google은 SUBSCRIPTION_DEFERRED 실시간 개발자 알림을 보냅니다. 기존의 purchases.subscriptions.defer는 지원 중단되었으므로 새 코드에서는 v2 메서드를 사용해야 합니다.
Google은 고객에게 알리지 않으니 직접 알려야 합니다
Apple은 연장이 성공할 때마다 고객에게 이메일을 보냅니다. Google의 결제 가이드에는 사용자에게 보내는 메시지에 대한 설명이 전혀 없습니다. 환불 요청을 미리 막는 것이 목적이라면 구독자가 추가 기간이 있다는 사실을 알아야 합니다. 앱 안에서, 그리고 이메일로 직접 알리고 며칠인지, 왜인지 설명하세요.
Apple과 Google 비교
| Apple App Store | Google Play | |
|---|---|---|
| API | Extend a Subscription Renewal Date 및 일괄 엔드포인트 | purchases.subscriptionsv2.defer |
| 요청당 기간 | 1일에서 90일 | 1일에서 1년 |
| 횟수 | 고객당 365일 이내 두 번 | 명시된 한도 없음, 새 만료일 전에 다시 호출 |
| 일괄 처리 | productId당 한 번 호출, 스토어프런트별 선택 가능 | 구매 토큰당 한 번 호출 |
| 무료 체험 | 대상 아님 | Google 가이드에 언급 없음 |
| 알림 | RENEWAL_EXTENDED, RENEWAL_EXTENSION | SUBSCRIPTION_DEFERRED |
| 고객 안내 | Apple이 이메일 발송 | 개발자 몫 |
| 되돌리기 | 불가 | Google 가이드에 언급 없음 |
연장 비용과 환불 비용 비교
환불과 연장은 서로 다른 곳에서 돈을 가져갑니다. 환불은 고객이 해당 기간에 낸 금액을 돌려줍니다. 그 고객에게 서비스를 제공하느라 이미 쓴 비용은 모두 그대로 남습니다. 세션마다 드는 컴퓨팅, 모델 API 호출, 스토리지, 그리고 고객이 이용한 콘텐츠의 크리에이터에게 지급한 금액이 그렇습니다.
연장은 결제 금액을 지킵니다. 그 대가는 갱신 수익 없이 제공하는 서비스입니다. 추가된 하루하루마다 활성 구독자는 같은 비용을 계속 발생시킵니다. 가벼운 사용자라면 거의 0에 가깝습니다. AI 기능을 많이 쓰는 사용자라면 추가 30일은 수익 없는 30일치 모델 호출을 의미할 수 있습니다. 연장 기간은 전하고 싶은 사과의 크기가 아니라 장애의 길이에 맞추세요.
| 포기하는 것 | 환불 | 갱신일 연장 |
|---|---|---|
| 구독 결제 금액 | 고객에게 반환 | 유지 |
| 고객에게 서비스하느라 이미 쓴 비용 | 손실 | 손실 |
| 추가 기간 동안의 컴퓨팅, 스토리지, API 호출 | 없음, 이용 종료 | 개발자 부담, 아직 갱신 없음 |
| 이후의 구독 | 환불로 이용 권한이 취소되면 종료 | 활성 유지, 새 날짜에 갱신 |
Apple의 수수료 비용
Apple은 구독자의 유료 서비스 첫해에는 갱신 금액의 70%를, 그 이후에는 85%를 지급합니다. Apple의 구독 페이지에 따르면 갱신 연장 일수는 유료 서비스 일수에서 제외됩니다. 따라서 30일 연장은 해당 구독자가 85%로 넘어가는 시점을 30일 늦춥니다. App Store Small Business Program에 참여하고 있다면 이미 85%를 받고 있으므로 이 비용은 해당되지 않습니다.
Google Play의 지불 거절 비용
2026년 8월 3일 이후의 주문에서 카드 소지자가 지불 거절에서 이기면, Google Play 개발자는 구매 가격에서 Play 서비스 수수료를 뺀 금액에 은행 수수료까지 부담합니다. 장애는 화가 난 고객을 은행으로 향하게 만드는 바로 그런 사건입니다. 고객에게 먼저 도착하는 연기가 뒤집을 수 없는 분쟁보다 훨씬 저렴합니다.

연장이 맞는 도구가 아닌 경우
구매한 것이 구독이 아니었을 때
갱신일 연장은 구독에만 적용됩니다. 장애로 소모성 아이템이나 일회성 잠금 해제가 망가졌다면 해당 항목을 다시 전달하세요. Apple이 이에 대해 CONSUMPTION_REQUEST를 보내면 실제로 일어난 일을 보고하세요. Apple의 deliveryStatus 필드에는 이를 위한 값 UNDELIVERED_SERVER_OUTAGE가 있으며, Apple은 DELIVERED 이외의 모든 상태에서 consumptionPercentage를 0으로 설정해야 한다고 말합니다.
고객이 이미 Apple 연장 두 번을 모두 썼을 때
Apple의 한도는 고객 한 명당 365일 이내 두 번의 연장입니다. 1년에 장애가 두 번 나면 둘 다 소진되고, 세 번째에는 스토어를 통해 제공할 수 있는 것이 아무것도 남지 않습니다. originalTransactionId마다 사용한 연장 횟수를 추적해 두면 일괄 요청의 FAILURE 알림에 놀랄 일이 없습니다.
고객이 무료 체험 중일 때
Apple은 무료 혜택 기간 중인 구독을 연장하지 않습니다. 체험 사용자가 잃은 것은 유료가 아닌 무료 기간이므로 환불 위험은 낮습니다. 보상을 하고 싶다면 인앱 메시지가 어떤 API 호출보다 저렴합니다.
다음 장애를 위한 체크리스트
- 장애 시작 시각과 종료 시각, 영향을 받은 제품과 지역을 기록합니다.
- 잃어버린 시간을 메울 일수를 정합니다. Apple에서는 사유 코드 3을 사용하고 1일에서 90일 범위를 지킵니다.
- Apple에서는 productId마다 일괄 요청을 한 번 보내고, 일부 지역만 영향을 받았다면 storefrontCountryCodes로 범위를 제한합니다.
- RENEWAL_EXTENSION FAILURE를 수신하고, 각각을 단일 구독용 엔드포인트로 다시 시도합니다.
- Google Play에서는 활성 구매 토큰을 하나씩 순회하며 각 etag를 읽고, 먼저 validateOnly로 실행한 다음 실제로 연기합니다.
- Google이 알려 주지 않으므로 Google Play 구독자에게는 추가 기간을 직접 알립니다.
- 이용 권한 만료일은 자체 날짜 계산이 아니라 RENEWAL_EXTENDED와 SUBSCRIPTION_DEFERRED를 기준으로 업데이트합니다.
- 계정별로 사용 로그를 보관합니다. 그러면 환불 요청이나 지불 거절이 결국 들어오더라도 Apple은 12시간, Google은 24시간 안에 증거를 준비할 수 있습니다.
자주 묻는 질문
- App Store 구독 갱신일은 몇 번까지 연장할 수 있나요?
- 고객 한 명당 365일 이내에 두 번입니다. 연장 한 번은 1일에서 90일까지 가능하며, 지난 365일 동안 이미 두 번 연장된 구독은 더 이상 연장할 수 없습니다.
- 구독을 연장하면 Apple이 고객에게 알려 주나요?
- 네. 갱신일 연장이 성공하면 Apple은 변경된 갱신일을 담은 이메일을 고객에게 보냅니다. Google Play의 결제 가이드에는 이런 메시지에 대한 설명이 없으므로 Android에서는 구독자에게 직접 알려야 합니다.
- Google Play 구독은 얼마나 연기할 수 있나요?
- Google의 결제 가이드에 따르면 purchases.subscriptionsv2.defer 호출 한 번에 하루에서 1년까지입니다. 더 연기하려면 새 만료일이 오기 전에 API를 다시 호출하세요. 사용자는 전체 이용 권한을 유지하며 연기된 기간에 대해 요금을 내지 않습니다.
- Apple 갱신일 연장을 취소할 수 있나요?
- 아니요. Apple에 따르면 구독 갱신 연장이 적용된 뒤에는 되돌릴 방법이 없습니다. 요청을 보내기 전에 제품, 일수, 스토어프런트를 확인하세요.
- 갱신일 연장이 Apple의 85% 수익 배분에 영향을 주나요?
- 네. Apple은 갱신 연장 일수를 유료 서비스 일수에서 제외하므로, 연장하면 구독자가 70%에서 85%로 넘어가는 시점이 추가한 일수만큼 늦어집니다. App Store Small Business Program에 참여한 개발자는 이미 85%를 받고 있습니다.
- 무료 체험 중인 구독을 연장할 수 있나요?
- App Store에서는 안 됩니다. Apple은 무료 혜택 기간 중인 구독을 결제 재시도 중, 유예 기간 만료, 만료된 구독과 함께 제외합니다. 최소 한 번의 유료 기간이 있는 활성 구독만 대상이 됩니다.
출처 및 추가 자료
- Apple Developer: Extending the renewal date for auto-renewable subscriptions
- Apple Developer: Extend a Subscription Renewal Date
- Apple Developer: Extend Subscription Renewal Dates for All Active Subscribers
- Apple Developer: extendReasonCode
- Apple Developer: Auto-renewable subscriptions
- Apple Developer: deliveryStatus
- Google Play Developer API: purchases.subscriptionsv2.defer
- Google Play Billing: Manage subscriptions and one-time purchases
- Google Play Billing: Subscription lifecycle
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store와 Google Play 환불 자동 처리
계속 읽기
과도한 환불 요청은 환불액보다 더 큰 손실을 부릅니다. 두 앱 스토어 모두 이를 품질 신호로 보기 때문입니다
Apple 가이드라인 5.6.4는 과도한 환불 요청을 앱이 품질 기준에 미달한다는 징후로 꼽고, Google의 개발자 배포 계약은 환불률을 근거로 신규 개발자의 앱을 삭제할 수 있게 합니다. 각 스토어가 무엇이라고 규정하는지, 삭제되면 무엇을 잃는지, 위험을 어떻게 피하는지 정리했습니다.
환불을 처리하기 전에 App Store 서버 알림을 검증하세요. 누구나 웹훅 URL로 요청을 보낼 수 있습니다
환불 알림은 서명을 확인하기 전까지는 하나의 HTTPS 요청에 불과합니다. App Store 서버 알림과 Google Play RTDN 메시지를 검증하는 방법, 각 스토어가 무엇에 서명하는지, 그리고 위조된 환불이나 잘못 거부된 환불이 어떤 비용을 초래하는지 설명합니다.