본문으로 건너뛰기
App Store Refund Management

Apple 환불 요청을 추적하고 기한 내에 대응하는 방법

Apple 환불 요청 추적이 앱 개발자가 환불을 모니터링하고 구독 매출을 보호하는 데 어떻게 도움이 되는지 알아보세요

5 min read
Apple 환불 요청을 추적하고 기한 내에 대응하는 방법

대부분의 팀에게 Apple 환불을 추적하고 있는지 물어보면 그렇다고 답합니다. 그런데 무엇을 저장하는지 물어보면, 환불 한 건당 한 줄, 사후에 기록한 날짜와 금액이 전부인 경우가 대부분입니다.

그것은 추적이 아니라 로그입니다. 환불이 발생했다는 사실만 알려줄 뿐, 그 과정에서 Apple이 무언가를 물어봤는지, 누가 답했는지, 그 답이 실제로 전달됐는지, 해당 고객의 이용 권한이 현실과 일치하는지는 알려주지 않습니다.

이 차이가 중요한 이유는 이 프로세스의 일부 단계에 기한이 있기 때문입니다. Apple은 한 단계에 12시간의 창을 주며, 이 창이 닫히면 다시 열 수 없습니다. 추적 메커니즘보다 큰 그림을 보고 싶다면 모바일 앱 매출 손실 없이 App Store 환불을 관리하는 방법 가이드를 참고하세요. 이 글은 무엇을 기록하고 언제 행동해야 하는지에 대한 내용입니다.

핵심 요약

• 환불의 최종 결정은 Apple이 내립니다. 개발자는 요청을 승인하거나 거부하지 않습니다.

• 환불 요청은 여러 개의 서로 다른 상태를 거칩니다. 마지막 상태만 저장하면 유용한 정보의 대부분을 잃게 됩니다.

• 일부 환불 워크플로에서는 고객 동의를 받은 상태에서 12시간 안에 소비 정보를 전송할 기회가 주어집니다.

• 응답을 제출하는 것과 그 응답이 수락되는 것은 다른 일입니다. 시도가 아니라 결과를 추적하세요.

• 환불 결과가 이용 권한 로직과 매출 기록까지 반영되어야 추적이 끝난 것입니다.

• 자동화는 주로 이벤트 누락과 응답 창 만료를 방지합니다. Apple의 결정에는 아무런 영향을 주지 않습니다.

Apple 환불 요청 추적이란 무엇인가요?

Apple 환불 요청 추적은 첫 알림부터 마무리하는 이용 권한 업데이트까지, 환불 요청이 여러분 쪽에서 거치는 모든 상태를 따라가는 것을 의미합니다. 환불 기록이 아니라 프로세스 기록입니다.

이 상태들이 중요한 이유는 각각이 실제로 다른 이벤트인데도 팀들이 이를 하나로 뭉뚱그리는 일이 잦기 때문입니다.

상태

의미

요청 수신

환불 요청이 존재하며 Apple이 이를 알려왔습니다

응답 기회 열림

Apple이 정보를 요청하고 있으며 시간이 흐르고 있습니다

응답 제출됨

여러분이 무언가를 회신했습니다

응답 수락됨

Apple이 실제로 받아들였습니다 — 전송한 것과는 다릅니다

환불 승인

Apple이 환불을 승인했습니다

환불 거부

Apple이 환불을 승인하지 않았습니다

환불 취소

Apple이 이전에 승인한 환불을 되돌렸습니다

이용 권한 업데이트됨

앱이 이제 결과를 반영합니다

마지막 행만 여러분의 제품에 관한 것입니다. 그 위의 모든 행은 마지막 행을 제대로 처리할 수 있는지를 결정합니다. "환불 승인"만 저장하는 팀은 고객이 왜 여전히 접근 권한을 갖고 있는지, Apple이 물었을 때 누가 답했는지 설명할 수 없습니다.

개발자는 Apple 환불 요청을 어떻게 추적하나요?

개발자는 Apple의 서버 측 알림 시스템과 자체 거래 기록을 통해 Apple 환불 활동을 추적합니다. 정확한 경로는 이벤트 유형과 Apple이 정보를 요청하는지 여부에 따라 달라집니다. 이벤트는 App Store Server Notifications를 통해 설정한 URL로 서명된 페이로드 형태로 도착하며, 백엔드가 이를 검증하고 처리합니다.

핸들러에서 구분해야 할 환불 관련 이벤트는 두 종류입니다. 하나는 여러분에게 무언가를 요청하고, 다른 하나는 무슨 일이 일어났는지 알려줍니다.

요청하는 쪽은 Apple CONSUMPTION_REQUEST 알림입니다. Apple이 환불 요청을 검토하는 동안 구매에 대한 정보를 원한다는 의미입니다. 이것은 환불이 아니며, 항상 도착한다고 가정하지 않도록 핸들러를 작성하는 것이 좋습니다.

알려주는 쪽은 결과를 다룹니다. 승인은 REFUND, 거부는 REFUND_DECLINED, Apple이 이전에 승인한 환불을 되돌린 경우는 REFUND_REVERSED입니다. 세 번째가 대부분의 핸들러가 놓치는 부분입니다.

이 둘의 기반에는 자체 거래 저장소가 있으며, 이것이 있어야 모든 것을 해석할 수 있습니다. 알림은 Apple의 식별자를 참조하므로, 대조할 구매 기록이 없으면 어디에도 연결할 수 없는 이벤트만 남게 됩니다.

개발자는 어떤 정보를 추적해야 하나요?

정보의 출처에 따라 나누어 보세요. 이 중 한쪽만 권위 있는 출처이기 때문입니다.

Apple에서 거래 페이로드로 제공하는 것: 거래 식별자와 원래 거래 식별자, 제품 식별자, 구매 날짜, 그리고 환불된 거래의 경우 취소 날짜와 취소 사유입니다. 이 사유 필드는 앱 문제로 인한 환불과 그 외 이유로 인한 환불을 구분해 주며, 보기보다 유용합니다.

계정 토큰은 그 중간에 있습니다. 여러분이 구매 시점에 생성해 첨부하고 Apple이 페이로드로 되돌려주는 값으로, 거래에서 특정 사용자로 거슬러 올라갈 수 있게 해줍니다.

그 외의 모든 것은 여러분이 관리해야 합니다. 내부 사용자 식별자, 알림 유형과 도착 시각, 응답 필요 여부, 전송한 내용과 회신 결과, 당시의 구독 상태, 처리 후의 이용 권한 상태, 그리고 환불이 반영된 보고 기간입니다.

두 개의 타임스탬프가 사실상 이 목록에서 가장 유용한 필드입니다. Apple의 이벤트와 여러분의 조치 사이의 시간 차이가 추적이 제대로 작동하는지를 보여주는 유일하게 정직한 척도입니다.

App Store 환불 추적 단계별 가이드

1. 환불 관련 이벤트 수신

이벤트는 설정한 서버 엔드포인트에 도착합니다. 엔드포인트가 잘못 설정되었거나 장애가 있어도 환불은 그대로 진행되며, 여러분 쪽에는 아무런 오류 없이 그저 알림을 받지 못하게 됩니다.

2. 알림 검증

페이로드를 처리하기 전에 Apple의 인증서 체인으로 서명을 검증하고 번들 ID를 확인하세요. 수신하는 모든 것을 신뢰하는 엔드포인트는 누구든 데이터를 써넣을 수 있는 엔드포인트입니다.

3. 관련 거래 식별

디코딩된 페이로드의 식별자를 구매 기록과 대조한 뒤 사용자 계정으로 연결하세요. 구매 시점에 계정 토큰을 첨부했다면 조사가 아닌 단순 조회로 끝납니다.

4. Apple이 정보를 요청하는지 확인

알림 유형에 따라 분기하세요. 소비 요청에는 응답 경로가 필요하고, 결과 알림에는 상태 업데이트가 필요합니다. 둘을 동일하게 처리하면 응답 창을 놓치게 됩니다.

5. 지원되는 소비 정보 수집

자체 기록에서 값을 가져오세요. 구매가 전달되었는지, 샘플 콘텐츠가 제공되었는지, 얼마나 소비되었는지 등입니다. Apple의 Send Consumption Information 문서에 필드와 유효한 값이 정리되어 있습니다. 그 전에 반드시 동의를 확인하세요. Apple은 데이터 공유에 유효한 고객 동의를 요구하며, 동의를 얻는 것은 개발자의 책임이고, 동의 없는 요청은 즉시 거부됩니다.

6. 문서화된 창 안에 제출

Apple의 현재 문서는 알림 후 12시간 이내 응답을 요구합니다. 정확한 값을 전송하고, 호출이 성공했다고 가정하지 말고 실제로 성공했는지 확인하세요.

7. 최종 결과 추적

어떤 결과 알림이 언제 도착했는지 기록하세요. 장애 중 파이프라인에서 이벤트가 유실되었다면, Apple의 서버 API가 제공하는 환불 이력으로 놓친 내용을 복구할 수 있습니다. 알림만 신뢰하는 대신 주기적인 대조 작업으로 실행할 가치가 있습니다.

8. 이용 권한 및 접근 업데이트

환불 승인 시 권한을 회수하고, 환불 취소 시 복원하며, 거래의 일부만 취소되는 비례 배분 케이스도 처리하세요. 고객이 앱을 다시 열든 열지 않든 상태가 정확하도록 서버 측 이벤트를 기준으로 구동하세요.

9. 매출 기록과 대조

환불을 올바른 기간과 제품에 연결하세요. 이것이 없으면 엔지니어링과 재무가 같은 달에 대해 서로 다른 버전을 갖게 됩니다.

Apple 환불 요청에 대응하는 방법

Apple이 요청할 때 동의를 받은 상태에서 창 안에 소비 정보를 전송하는 것이 대응입니다. 무언가를 승인하거나 거부하는 방식의 대응은 개발자에게 제공되지 않습니다. 결정은 Apple이 합니다.

전송하는 내용은 기록에서 가져온, 구매에 실제로 일어난 일을 설명해야 합니다. 추정치도, 원하는 결과 쪽으로 유리하게 조정한 수치도 아니어야 합니다. 정직하지 않다는 점을 넘어, 정확하게 공유한다는 조건으로 동의를 얻은 데이터이기 때문입니다.

대부분의 추적 설정이 놓치는 운영상의 핵심이 있습니다. 응답을 제출하는 것과 수락되는 것은 서로 다른 두 상태입니다. 호출이 검증에 실패해 오류를 반환할 수 있는데, 아무도 결과를 확인하지 않으면 로그상에서 실패한 제출은 성공한 제출과 똑같이 보입니다. 시도했다는 사실만이 아니라 응답 상태를 저장하세요.

Apple이 환불을 결정한 뒤에는 어떻게 되나요?

Apple은 결과를 알림으로 보내고 자기 쪽에서 결제를 취소합니다. 그 다음 작업은 여러분에게 넘어옵니다.

기억해야 할 구분이 있습니다. Apple이 환불을 승인한 것은 하나의 이벤트이고, 여러분의 시스템이 이를 올바르게 반영하는 것은 별개의 이벤트입니다. Apple 쪽의 절반은 여러분이 무엇을 하든 완료됩니다. 여러분 쪽의 절반은 알림이 도착하고, 거래와 매칭되고, 계정으로 연결되고, 그 계정의 접근 권한이 업데이트되었을 때만 완료됩니다.

이 둘이 어긋나면 환불을 받았으면서도 결제한 모든 것을 계속 보유하는 고객이 생깁니다. 고객 입장에서는 잘못된 것이 없으니 아무도 신고하지 않습니다. 몇 달 뒤 대조 작업에서 드러나거나, 아예 드러나지 않을 수도 있습니다.

구독은 특히 주의가 필요합니다. 환불된 기간은 보통 구독을 계속 유지하는 것이 아니라 종료시키므로, 상태도 그렇게 표시되어야 합니다. 지원팀에도 이 기록이 필요합니다. 상담원이 누군가에게 dashboard 확인을 부탁하지 않고도 무슨 일이 있었는지 볼 수 있어야 하기 때문입니다.

수동 Apple 환불 추적이 어려워지는 이유

부주의 때문이 아닙니다. 작업의 성격이 사람이 대응 가능한 시간과 맞지 않기 때문입니다.

환불 요청은 고객이 제출하는 시점에 언제든 도착하고, 응답 창은 밤이든 주말이든 계속 흘러갑니다. 각 이벤트마다 조회, 계정 매칭, 동의 확인, 사용량 수치, 제출, 이용 권한 업데이트가 필요합니다. 작은 작업들이지만 시간 제한이 있고 반복적이며, 제대로 처리되면 눈에 띄지 않습니다.

규모가 커지면 양상이 바뀝니다. 여러 앱이 있고, 거래 데이터는 한 시스템에, 계정 데이터는 다른 시스템에 있습니다. 아무도 백필하지 않아 과거 환불 데이터는 빈약하게 남고, 이용 권한 불일치는 표시되지 않은 채 쌓이며, 재무팀이 분기 마감 때 불일치를 발견합니다. 응답 창이 의미 있었던 시점은 이미 한참 지난 뒤입니다.

Apple 환불 추적을 자동화할 수 있나요?

네, 그리고 거의 모든 단계가 결정론적이기 때문에 대부분 자동화해야 합니다.

자동화는 환불 이벤트를 모니터링하고 검증하며, 각 요청을 도착 즉시 기록하고, 거래를 계정으로 연결하고, 알림 유형에 따라 분기하고, 기록에서 소비 데이터를 조합하고, 응답 창과 제출 결과를 추적하고, 이용 권한 상태를 업데이트하고, 환불 이력을 조회 가능한 상태로 유지할 수 있습니다.

자동화가 할 수 없는 것은 Apple에 영향을 미치는 일입니다. 자동화가 환불 가능성을 낮추지도 않고, 결정을 어느 방향으로도 밀어붙일 수 없습니다. 달라지는 것은 여러분 쪽 프로세스가 일관되게, 그리고 창 안에 수행되는지 여부입니다.

RefundSensor가 Apple 환불 관리에 도움이 되는 방식

App Store 환불 관리가 이 작업이 속하는 범주이며, RefundSensor는 그중 개발자 쪽을 위해 만들어졌습니다. Apple 환불 워크플로를 모니터링하고, 지원되는 응답 단계를 자동화하며, 환불 이벤트와 결과와 기록을 여러 dashboard에 흩어놓는 대신 한곳에 모아둡니다.

실제로는 누군가 알림을 지켜보지 않아도 스토어의 창 안에 응답이 이루어지고, 물량이 늘어나도 환불 기록이 정확하게 유지됩니다.

Apple의 결정을 바꾸지는 못하며, 어떤 Apple 환불 관리 소프트웨어도 그럴 수 없습니다. 바뀌는 것은 각 요청이 남기는 수동 작업의 양입니다.

이 규칙들이 문서화된 곳

위의 기술적 내용은 세 가지 Apple 자료를 근거로 합니다. 직접 읽어보고 주기적으로 다시 확인하세요. 이 영역은 여러 차례 바뀌어 왔습니다.

Request a refund for apps or content — 고객 대상 절차입니다. 요청이 어디서 시작되는지, 고객에게 안내되는 24~48시간의 업데이트 기간, 국가나 지역에 따라 자격 요건이 다르다는 Apple의 안내를 이해하는 데 유용합니다.

Send Consumption Information — 개발자 응답 워크플로입니다. 동의 요건, 12시간 창, 요청 필드를 다룹니다. 응답 처리를 구축하기 전에 반드시 읽어보세요.

App Store Server Notifications — 환불 이벤트가 백엔드에 도달하는 방식, 서명된 페이로드 형식, 그리고 CONSUMPTION_REQUEST, REFUND, REFUND_DECLINED, REFUND_REVERSED를 포함한 알림 유형을 다룹니다.

환불 이벤트를 아직 수동으로 지켜보고 있다면

수동 추적은 새벽 2시에 알림이 도착하고 누군가 dashboard를 열기 전에 창이 닫히는 날까지만 버팁니다. 이 실패는 조용하게 일어나며, 그래서 비용이 큽니다.

여러분의 설정이 그렇다면, RefundSensor가 Apple 환불 워크플로의 개발자 쪽을 처리합니다. 이벤트를 모니터링하고, 응답을 창 안에 유지하며, 결과가 기록과 이용 권한 로직에 반영되도록 보장합니다.


자주 묻는 질문

App Store Server Notifications와 자체 거래 기록을 통해 추적합니다. 이벤트는 설정한 서버 엔드포인트에 서명된 페이로드로 도착합니다. 이를 검증하고, 거래를 고객과 연결하고, 이벤트를 기록하고, Apple이 정보를 요청했다면 응답하고, 결과가 도착하면 저장합니다.

환불 요청이 개발자 쪽에서 거치는 각 상태를 따라가는 것입니다. 요청 수신, 응답 기회, 응답 제출 및 수락, Apple의 결과, 그리고 마무리하는 이용 권한 업데이트까지 포함합니다. 최종 결과만 저장하면 무슨 일이 있었는지 설명하는 데 필요한 정보를 잃게 됩니다.

네. Apple은 결과를 서버 알림으로 보냅니다. REFUND는 승인, REFUNDDECLINED는 거부, REFUNDREVERSED는 이전에 승인된 환불이 취소되었다는 의미입니다. 환불된 거래의 페이로드에는 취소 날짜와 사유 코드도 포함됩니다.

Apple이 요청할 때, 유효한 고객 동의가 있는 상태에서, 자체 기록의 정확한 값을 사용해 소비 정보를 전송하는 방식으로 대응합니다. 환불을 승인하거나 거부할 수는 없습니다. 여러분의 응답은 Apple 검토의 입력값 중 하나이며, 제출이 성공했다고 가정하지 말고 실제로 성공했는지 확인해야 합니다.

Apple이 환불 요청을 검토하는 동안 구매에 대한 정보를 원한다는 것을 서버에 알리는 App Store Server Notification입니다. 환불 알림도 아니고 결정도 아닙니다. 응답에는 고객 동의가 필요하며, Apple은 12시간 이내 응답을 요구합니다.

Apple의 현재 문서는 알림 후 12시간 이내 응답을 요구합니다. 요청은 어느 시간에든 도착하므로, 이 단계가 자동화에 가장 적합합니다. 오래된 통합에 의존하지 말고 Apple 페이지에서 현재 요건을 확인하세요.

여러분이 바꾸지 않으면 아무것도 바뀌지 않습니다. Apple이 결제를 취소해도 여러분의 데이터베이스는 달라지지 않습니다. 백엔드에서 환불 승인 시 이용 권한을 회수하고, Apple이 환불을 취소하면 복원하고, 거래의 일부만 취소되는 경우도 처리해야 합니다.

기계적인 부분은 가능합니다. 알림 검증, 거래와 계정 매칭, 응답 창과 제출 결과 추적, 이용 권한 업데이트, 환불 이력 관리는 모두 결정론적입니다. 사람이 해야 할 일은 동의 흐름을 설계하고 환불 패턴이 제품에 대해 무엇을 말해주는지 읽어내는 것입니다.

#Apple Refund Request Tracking#Apple Refunds. App Store Refunds#Apple Refund Management#Refund Tracking#Subscription Revenue Protection
Refund SensorRefund Sensor TeamRefund defense for App Store and Google Play developers