본문으로 건너뛰기
In-App Purchases & Subscriptions

구독 앱의 App Store 환불을 처리하는 최선의 방법

App Store 구독 환불이 어떻게 작동하는지, 그리고 환불 요청과 구독 거래를 처리할 때 개발자가 알아야 할 것을 알아보세요.

5 min read
구독 앱의 App Store 환불을 처리하는 최선의 방법

취소와 환불은 같은 것으로 취급되는 경우가 아주 많지만, 구독 앱에서는 전혀 다른 문제입니다. 취소는 다음 갱신을 중단시키고 현재 기간은 그대로 유지합니다. 환불은 이미 결제된 금액에 관한 것이며, 거래 상태, 이용 권한(entitlement), 그리고 고객이 지금 당장 열 수 있어야 하는 것을 바꿉니다.

이 차이 때문에 App Store 구독 환불에는 받은 편지함이 아니라 워크플로가 필요합니다. 환불, 구독 상태, 이용 권한, 고객 접근 권한, 매출 기록이 모두 함께 움직여야 하며, 그중 일부만 움직이면 더 이상 결제하지 않은 유료 접근 권한을 가진 고객이 생깁니다.

핵심 요약

• 취소와 환불은 서로 다른 이벤트입니다. 같은 핸들러에 연결하지 마세요.

• 환불 결정은 Apple이 내립니다. 개발자는 요청이 있을 때 정보를 제공하고, 그 이후 자체 시스템을 관리합니다.

• 환불 이벤트는 App Store Server Notifications를 통해 전달되며, 이를 위해서는 정상 작동하고 검증된 엔드포인트가 필요합니다.

• 구독 이용 권한은 부분 취소(partial revocation)를 포함해 거래 상태와 항상 일치해야 합니다.

• 결과를 내부에서 추적하세요. 환불을 감지하는 것과 기록하고 조치하는 것은 다릅니다.

• 자동화는 놓치는 이벤트와 수작업을 줄여줍니다. Apple의 결정에는 아무런 영향을 주지 않습니다.

구독 앱에서 App Store 환불이 다른 이유는 무엇인가요?

구독은 단순한 구매가 아니라 결제 관계를 수반하기 때문입니다. 한 기간을 환불하면 대개 그 관계가 끝나므로, 환불된 금액뿐 아니라 이후에 예상되던 갱신까지 잃게 됩니다.

일회성 구매에서는 생기지 않는 접근 권한 문제도 있습니다. 각 기간은 일정 시간 동안의 이용 권한을 부여하며, 환불은 이를 조기에 종료해야 합니다. 따라서 이용 권한 로직은 달력 날짜가 아니라 거래 이벤트에 반응해야 합니다.

구독 앱의 App Store 환불 절차는 어떻게 되나요?

고객은 개발자가 아니라 Apple에 환불을 요청하며, 이는 Apple의 환불 요청 절차를 통해 이루어집니다. 개발자 쪽 절차는 이와 병렬로 진행됩니다:

고객이 환불을 요청합니다

Apple이 요청을 검토합니다

환불 관련 알림을 받을 수 있습니다

Apple이 지원하는 응답 기회를 제공하는 경우 응답합니다

Apple이 결정을 내립니다

결과를 추적합니다

이용 권한이 업데이트됩니다

Apple의 경로는 고객을 향하며, 개발자가 통제할 수 없는 결정으로 끝납니다. 개발자의 경로는 기술적인 것이며, 알림이 도착하는 순간 시작됩니다.

개발자는 App Store 환불을 어떻게 처리해야 하나요?

이벤트를 추적하고, 거래와 고객을 식별하고, Apple이 요청하면 응답한 다음, 결과가 확인되면 이용 권한과 매출 기록을 업데이트합니다:

1. 서버 엔드포인트에서 환불 이벤트를 모니터링합니다.

2. 디코딩된 페이로드에서 거래를 식별합니다.

3. 고객 계정과 매칭합니다.

4. Apple이 정보를 원하는지, 결과를 통보하는지 확인합니다.

5. 자체 기록에서 구매 및 사용(consumption) 데이터를 수집합니다.

6. 동의를 얻은 상태로, 기한 내에 Apple의 워크플로를 통해 응답합니다.

7. 해당 거래에 결과를 기록합니다.

8. 구독 이용 권한을 업데이트합니다.

9. 올바른 보고 기간에 반영합니다.

10. 패턴이 계속 보이도록 이력을 보관합니다.

App Store Server Notifications는 환불에 어떻게 도움이 되나요?

백엔드에 무언가 바뀌었다는 것을 거의 실시간으로 알려줍니다. App Store Server Notifications는 환불 관련 이벤트에 대해 서명된 페이로드를 전달합니다. 환불이 승인되면 REFUND, 거부되면 REFUND_DECLINED, Apple이 이전에 승인한 환불을 되돌리면 REFUND_REVERSED가 전달됩니다.

이것만으로 완전한 시스템이 되지는 않습니다. 엔드포인트에 장애가 생기면 알림을 놓칠 수 있고, 그럴 때 개발자 쪽에서는 아무 오류도 발생하지 않습니다. Apple의 서버 API가 환불 이력을 제공하는 이유가 바로 여기에 있으므로, 핸들러와 함께 주기적인 대사(reconciliation)를 실행하세요.

Apple 구독 환불 이후 개발자는 무엇을 해야 하나요?

기록만 하지 말고 대응하세요. 환불을 감지하는 것은 여러 단계 중 첫 번째일 뿐입니다.

이용 권한을 종료해 유료 접근이 끝나도록 하세요. 환불된 기간은 대개 구독을 종료시키므로 구독 상태를 업데이트하세요. 거래 기록에 결과를 기록하고, 금액을 올바른 기간으로 옮기고, 지원팀이 볼 수 있게 하세요.

팀들이 놓치는 경우 하나: Apple은 자동 갱신 구독에 대해 비례 배분(prorated) 환불을 지원합니다. 이 경우 거래의 일부만 취소되며, 취소된 비율이 거래 페이로드에 포함되어 돌아옵니다. 전부 아니면 전무 방식의 이용 권한 로직은 이런 경우를 잘못 처리합니다.

개발자는 App Store에서 구독 환불을 어떻게 처리해야 하나요?

모든 취소를 환불로 취급하지 마세요. Apple의 결정을 뒤집으려 하지 마세요. 그럴 수 있는 방법이 없습니다. 응답할 때는 추측이 아니라 실제 거래 데이터를 사용하세요. 환불은 되돌려질 수 있으므로, 접근 권한을 양방향으로 거래 상태와 일치시키세요. 각 이벤트를 발생하는 대로 문서화하세요.

환불로 인한 매출 누수를 어떻게 줄일 수 있나요?

Apple이 환불을 승인한 시점과 개발자 시스템에 반영되는 시점 사이의 간격을 좁히면 됩니다. 흔한 누수 사례: 밤사이 만료된 응답 기한, 몇 주 늦게 감지된 환불, 업데이트되지 않은 이용 권한 상태, 분석할 환불 이력의 부재.

목표는 정당한 환불을 막는 것이 아닙니다. 실제로 문제를 겪은 고객은 돈을 돌려받아야 합니다. 목표는 실행되지 않은 워크플로 때문에 돈을 잃지 않는 것입니다.

반복적이거나 의심스러운 환불 행동은 어떻게 처리해야 하나요?

신중하게, 그리고 개인이 아니라 패턴을 보면서 처리해야 합니다. 과거 데이터는 조사할 가치가 있는 신호를 드러낼 수 있습니다. 한 계정의 반복 환불, 집중 사용 직후의 환불 요청, 연관 계정들 사이의 군집 같은 것들입니다.

이런 신호는 판결이 아니라 조사의 계기로 다루세요. 패턴은 고장난 페이월이나 혼란스러운 갱신 안내를 가리키는 것일 수도 있습니다. 이 모든 것을 가능하게 하는 것은 신뢰할 수 있는 식별이며, 바로 여기서 appAccountToken과 환불 방어가 등장합니다. 거래에서 계정으로 이어지는 안정적인 연결이 없으면 패턴을 전혀 볼 수 없습니다.

데이터가 무엇을 보여주든 고객은 여전히 정상적인 지원을 받아야 하며, 환불 결정은 어떤 경우에도 Apple이 내립니다.

환불 성과는 어떻게 측정할 수 있나요?

자체 거래 데이터로 자체 기준선을 세우는 것부터 시작하세요. 공개된 벤치마크는 여러분의 가격대나 제품 구성과 맞지 않습니다.

추적할 만한 지표: 접수된 요청 수, 확인 가능한 경우 승인 및 거부 결과, 환불률, 구독 환불 금액, 응답 빈도와 속도, 놓친 기한, 계정별 반복 빈도. 응답 관련 지표는 대부분의 팀에 없는 두 가지이며, 워크플로가 제대로 작동하는지를 보여주는 지표입니다.

App Store 환불 관리를 자동화할 수 있나요?

대부분 가능합니다. 거의 모든 단계가 결정론적이기 때문입니다: 알림 모니터링, 환불 이벤트 식별, 거래와 계정 매칭, 응답 작성 및 제출, 결과 추적, 내부 시스템 업데이트, 환불 이력 관리.

자동화는 Apple의 결정을 통제하지 않으며, 어떤 도구도 그럴 수 없습니다. 자동화가 바꾸는 것은 개발자 쪽 절차가 일관되게, 제때 실행되는지 여부입니다.

Google Play에 관한 참고 사항

두 스토어는 공유 로직이 대개 깨질 만큼 다릅니다. Apple은 검토 중에 개발자에게 정보를 요청할 수 있고, Google은 무효화된 구매(voided purchases)를 개발자가 직접 가져가도록 제공합니다. 별도의 연동으로 다루세요.

RefundSensor가 구독 앱 개발자에게 주는 도움

App Store 환불 관리가 카테고리이고, RefundSensor는 그중 개발자 쪽을 담당합니다: 환불 워크플로 모니터링, Apple이 지원하는 응답 경로 처리, 결과 추적, 그리고 볼륨이 늘어나도 기록을 한곳에 유지하는 것입니다.

환불을 막거나 Apple의 결정에 영향을 주지는 않습니다. 없애주는 것은 수동 모니터링과 놓치는 단계입니다.

이 규칙들이 문서화된 곳

앱 또는 콘텐츠 환불 요청 — Apple의 고객용 절차, 그리고 지역에 따라 환불 자격이 다르다는 안내.

Send Consumption Information — 응답 워크플로: 동의, 12시간 기한, 요청 필드.

App Store Server Notifications — 환불 이벤트가 백엔드에 전달되는 방식과 알림 유형.

아직 수동으로 처리하고 있다면

밤사이 발생하는 환불 이벤트와 계속 흘러가는 기한은 대시보드를 확인하는 사람에게 맡기기에 적합하지 않습니다. RefundSensor는 개발자 쪽을 처리합니다. 이벤트 모니터링, 기한 내 지원되는 응답 제출, 그리고 이용 권한 및 매출 기록까지 이어지는 결과 추적입니다.

자주 묻는 질문

이미 결제한 구독 기간의 금액을 Apple이 돌려주는 것입니다. 향후 갱신만 중단시키는 취소와 달리, 환불은 거래 상태를 바꾸므로 이용 권한과 매출 기록도 그에 맞춰 바뀌어야 합니다.

고객이 Apple에 환불을 요청합니다. Apple이 이를 검토하고, 개발자 서버에 사용 정보를 요청할 수 있으며, 그 후 결정을 내려 결과를 알림으로 보냅니다. 개발자는 결과를 추적하고 이에 맞게 이용 권한과 재무 기록을 업데이트합니다.

아니요. Apple이 결정하며 이를 뒤집을 수단은 없습니다. 요청이 있을 때 사용 정보를 제공하고 현재 엔드포인트에서 선호하는 결과를 표시할 수는 있지만, Apple은 이를 다른 요소와 함께 고려해 다르게 결정할 수 있습니다.

취소는 다음 갱신을 중단시키고 현재 결제된 기간은 그대로 둡니다. 환불은 이미 결제한 금액을 돌려주며 접근 권한을 조기에 종료할 수 있습니다. 두 가지는 서로 다른 이벤트로 도착하며, 같은 로직으로 처리하면 이용 권한 버그가 생깁니다.

환불 이벤트를 서명된 페이로드로 서버에 전달하므로 폴링 없이 백엔드가 반응할 수 있습니다. 엔드포인트 장애 시 이벤트가 조용히 유실되므로 이것만으로는 완전하지 않습니다. Apple의 환불 이력과 주기적으로 대사하는 작업을 함께 운영하세요.

자동으로 되는 일은 없습니다. Apple은 결제를 취소하지만, 개발자가 조치하기 전까지 데이터베이스는 그대로입니다. 이용 권한을 종료하고, 구독 상태를 업데이트하고, 거래의 일부만 취소되는 비례 배분 환불 사례를 처리하세요. Apple이 환불을 되돌릴 경우 접근 권한을 복원할 준비도 해두세요.

기계적인 부분은 가능합니다. 알림 검증, 거래와 계정 매칭, 응답 기한 추적, 이용 권한 업데이트, 환불 이력 보관은 모두 결정론적입니다. 사람이 해야 할 일은 패턴을 해석하고 그것이 가격 정책이나 제품에 어떤 의미인지 판단하는 것입니다.

#App Store Subscription Refund#App Store Refunds#Apple Subscription Refunds#Subscription Management#In-App Purchases#Apple CONSUMPTION_REQUEST
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers