모든 글
Playbook7분 소요

같은 구독에 두 번 결제된 고객은 대개 두 플랫폼에서 결제했고, 그중 환불을 결정할 수 있는 건 한쪽뿐입니다

고객이 같은 구독에 두 번 결제되는 경우, 대개 하나는 App Store에서, 다른 하나는 Google Play나 웹사이트에서 구매한 것입니다. 각각을 누가 환불할 수 있는지, 비용이 얼마나 드는지, 두 번째 결제를 어떻게 막는지 정리했습니다.

책상 위에 iPhone과 Android 휴대폰이 나란히 놓여 있고, 옆에는 같은 금액의 결제 두 건이 찍힌 은행 거래 내역서가 있어 같은 구독에 두 번 결제된 고객을 보여 줍니다

핵심 요약

  • 같은 구독에 두 번 결제된 고객은 대개 App Store와 Google Play처럼 서로 다른 두 스토어에서 구매한 것입니다. 각 스토어는 자기 구매 건만 따로 청구하고 따로 환불합니다.
  • 개발자는 App Store 구매를 환불할 수 없습니다. 결정은 Apple이 합니다. 고객은 reportaproblem.apple.com이나, 앱이 StoreKit의 beginRefundRequest로 여는 환불 시트를 통해 요청합니다. Apple은 승인 또는 거절까지 최대 48시간이 걸린다고 밝힙니다.
  • Google Play에서는 개발자가 Play Console의 Order management나 orders.refund API로 주문을 환불할 수 있습니다. 단, 이 API는 3년이 지난 주문은 환불할 수 없습니다.
  • Google Play 구독의 가장 최근 주문을 환불하면 구독이 즉시 삭제되고 이후 갱신도 취소됩니다. 그보다 이전 주문을 환불하면 구독은 계속 유지됩니다.
  • Apple은 자동 갱신 구독을 포함한 모든 상품 유형의 환불 요청에 대해 CONSUMPTION_REQUEST를 보냅니다. 고객이 동의했다면 개발자는 12시간 안에 Send Consumption Information으로 응답할 수 있습니다.
  • 2026년 8월 3일 이후에 발생한 Google Play 주문의 경우, 지불 거절 한 건당 구매 금액에서 Play 서비스 수수료를 뺀 금액에 은행의 지불 거절 수수료를 더한 만큼을 개발자가 부담합니다.
  • Apple 구매에는 appAccountToken을, Google Play 구매에는 난독화된 계정 ID를 설정해 두면, 두 번째 결제가 일어나기 전에 두 스토어 구독 뒤에 있는 한 명의 고객을 서버에서 알아볼 수 있습니다.

Apple과 Google의 결제 시스템 어디에도 한 사람이 같은 달에 두 곳 모두에 구독료를 내는 것을 막는 장치는 없습니다. 고객이 같은 구독에 두 번 결제되었다면 거의 항상 이런 경우입니다. iPhone에서 구독한 뒤 Android 태블릿이나 웹사이트에서 다시 구독했고, 앱은 첫 번째 플랜을 알아보지 못했습니다. 고객은 결제 두 건을 보고 연락해 옵니다. 문제는 그중 한 건만 직접 환불할 수 있고, 그것도 Apple을 통해 구매한 건이 아닐 때만 가능하다는 점입니다. 각각이 어떻게 작동하는지, 중복 결제가 얼마의 비용을 만드는지, 재발을 어떻게 막는지 살펴보겠습니다.

고객이 같은 구독에 두 번 결제되는 이유

구매는 각 스토어가 따로 관리합니다. App Store 구독은 Apple이, Google Play 구독은 Google이, 웹 플랜은 결제 대행사가 청구합니다. 서로의 존재를 전혀 모릅니다. 두 구매가 만날 수 있는 곳은 여러분의 서버뿐이고, 그것도 두 구매 모두 같은 계정에 연결되는 ID를 갖고 있을 때만 가능합니다.

이중 결제로 이어지는 흔한 경로는 다음과 같습니다.

  • 고객이 iOS에서 Android로, 또는 그 반대로 휴대폰을 바꾸고, 새 앱에 페이월이 뜨자 다시 구독합니다.
  • 고객이 웹사이트에서 구독한 뒤 앱을 설치했지만 로그인하지 않아서, 앱이 스토어 구독을 하나 더 판매합니다.
  • 고객이 앱을 삭제하고 플랜도 끝났다고 생각합니다. Google 고객센터에 따르면 앱을 삭제해도 Google Play 구독은 취소되지 않습니다. App Store 플랜도 Apple 계정에서 취소할 때까지 계속 갱신됩니다.

"앱이랑 웹사이트가 서로 연동이 안 되는 게 분명하네요"

지원 이메일에서 보게 될 불만은 이런 것입니다. 고객 입장에서는 일리 있는 말입니다. 제품 하나를 샀는데 또 돈을 내라고 하니, 양쪽 모두의 실수였더라도 함정처럼 느껴집니다. 가장 빨리 진정시키는 방법은 어떤 구매는 직접 환불해 줄 수 있고 어떤 구매는 Apple에 요청해야 하는지 분명하게 말해 주는 것입니다.

각 결제는 누가 환불할 수 있나

지원 답변이 가장 많이 틀리는 지점이 여기입니다. 약속할 수 있는 건 직접 통제할 수 있는 것뿐입니다.

중복 구매처환불 결정권자플랜 갱신을 멈추는 방법개발자가 할 수 있는 일
App StoreApple만 가능. reportaproblem.apple.com 또는 앱 내 환불 시트를 통해고객이 자신의 Apple 계정에서 취소CONSUMPTION_REQUEST. 고객이 동의했다면 12시간 안에 응답
Google Play, 구매 후 48시간 이내고객이 Google에 요청하거나 개발자가 환불최신 주문을 환불하면 이후 갱신이 취소됨Google 셀프 서비스 환불에는 관여할 수 없음
Google Play, 48시간 경과 후개발자. Play Console 또는 orders.refund로최신 주문을 환불하면 이후 갱신이 취소됨개발자가 결정
웹사이트개발자. 결제 대행사를 통해개발자가 직접 취소개발자가 결정

개발자가 App Store 구독을 환불할 수 있나요?

아니요. App Store 환불은 모두 Apple이 처리합니다. 개발자가 할 수 있는 일은 고객의 수고를 줄여 주는 것입니다. StoreKit의 beginRefundRequest는 구매 정보와 사유 목록이 미리 채워진 Apple 환불 시트를 앱 안에서 엽니다. Apple 문서에 따르면 App Store가 요청을 승인하거나 거절하는 데 최대 48시간이 걸립니다. 앱 밖에서는 고객이 reportaproblem.apple.com에 로그인해 "Request a refund"(환불 요청)를 고르고, 사유를 선택한 뒤 해당 구독을 선택합니다.

Google Play 쪽은 직접 환불하기

Google Play에서는 개발자가 주도권을 쥡니다. Play Console에서 Order management를 열고 주문을 선택해 환불합니다. Play Console 고객센터는 구독에 대해 명확하게 설명합니다. 가장 최근 주문을 환불하면 구독이 즉시 삭제되고 이후 갱신도 취소됩니다. 그보다 이전 주문을 환불하면 구독은 계속 유지됩니다. 자동화한다면 orders.refund API가 같은 일을 합니다. revoke 플래그로 접근 권한을 즉시 끊을 수 있고, 3년이 지난 주문은 받지 않습니다.

중복 구독이 만드는 비용

중복 결제분은 원래 가져갈 수 있는 매출이 아니었습니다. 돈 문제의 핵심은 환불 외에 얼마나 더 드느냐입니다.

깔끔한 경우

한 고객이 App Store와 Google Play 양쪽에서 월 $9.99를 석 달 동안 내다가 알아챘다고 해 봅시다. 중복 결제는 총 $29.97입니다. Google Play 주문 세 건을 직접 환불하면 $29.97을 돌려주고 문제는 그날로 끝납니다. 고객이 대신 App Store 쪽을 Apple에 요청하면 환불 금액은 Apple이 정하고, 개발자는 서버 알림으로 결과를 알게 될 뿐입니다. 어느 쪽이든 한 플랫폼의 석 달 치 매출은 돌려주게 됩니다.

비싼 경우

진짜 손실은 고객이 지원팀을 포기하고 은행에 전화할 때 생깁니다. 은행이 결정하면 지불 거절은 확정됩니다. Google Play는 한 번의 반론 기회를 줍니다. 지불 거절 검토로, orders.reviewrefund를 통해 24시간 안에 응답해야 합니다. 2026년 8월 3일 이후에 발생한 Google Play 주문의 경우, 지불 거절에서 지면 구매 금액에서 Play 서비스 수수료를 뺀 금액에 은행의 지불 거절 수수료를 더한 만큼을 부담합니다. 1분이면 처리할 수 있었던 $29.97 환불이 $29.97에 통제할 수 없는 수수료까지 더한 금액으로 바뀝니다.

그동안 계속 나가는 비용

두 플랜이 모두 활성 상태인 동안, 백엔드는 한 사람에게 서비스하면서도 구독을 두 건으로 봅니다. 구독 단위로 좌석을 세거나, 데이터를 동기화하거나, 유료 서드파티 API를 호출한다면, 고객 한 명을 위해 컴퓨팅, 스토리지, API 호출 비용을 두 배로 내고 있을 수 있습니다. 두 레코드를 합치면 이 비용은 사라집니다.

노트북으로 고객 지원 받은편지함을 보며 옆에 스마트폰을 두고 중복 구독 환불을 처리하는 개발자

고객 지원에서 이중 결제를 처리하는 방법

빠르게, 메시지 한 통으로 답하세요. 주고받는 횟수가 늘어날 때마다 은행 분쟁으로 갈 가능성이 커집니다.

  • 고객이 연락해 온 이메일 주소가 아니라 고객의 계정으로 두 구매를 모두 조회하세요.
  • 어느 플랜을 유지하고 싶은지 물어보세요. 대개 지금 쓰고 있는 기기 쪽입니다.
  • 중복 구매가 Google Play나 웹사이트에 있다면 직접 환불하고 처리가 끝났다고 알려 주세요.
  • 중복 구매가 App Store에 있다면 reportaproblem.apple.com으로, 또는 앱에 환불 버튼을 만들어 두었다면 그 버튼으로 안내하고, Apple 계정 설정에서 구독을 취소하라고 알려 주세요.
  • 이후 Apple이 CONSUMPTION_REQUEST를 보냈고 고객이 동의했다면, 12시간 안에 정확한 사용 데이터로 응답하세요. 한 번도 쓰지 않은 중복 플랜이라면 Apple이 쉽게 승인합니다.

두 번째 결제를 미리 막는 방법

예방은 어떤 환불보다 싸고, 필요한 도구는 이미 두 스토어 모두에 있습니다.

모든 구매를 자체 계정 ID에 연결하기

iOS에서는 계정마다 UUID를 생성해 appAccountToken 구매 옵션으로 전달하세요. Apple은 트랜잭션과 구독 갱신 정보에 같은 값을 돌려줍니다. 구매가 앱 밖에서 이루어졌다면 Set App Account Token 엔드포인트로 나중에 토큰을 붙이거나 업데이트할 수 있습니다. Android에서는 64자 이하의 해시된 계정 ID를 setObfuscatedAccountId에 전달하세요. 원본 개인 정보는 절대 넣지 마세요.

페이월을 보여 주기 전에 이용 권한 확인하기

페이월이 뜨기 전에, 로그인한 계정이 어느 플랫폼에서든 이미 활성 플랜을 갖고 있는지 자체 서버에 확인하세요. 로그인 안내를 먼저 보여 주고, 페이월은 활성 플랜이 없는 계정에만 보여 주세요.

한 계정에 활성 플랜이 두 개인지 감시하기

스토어를 통틀어 활성 구독이 두 개 이상인 계정이 있는지 매일 확인하세요. 첫 주에 잡아내면 석 달 치가 아니라 한 달 치만 환불하면 되고, 지불 거절 대신 짧은 이메일 한 통으로 끝납니다.

RefundHalt는 App Store와 Google Play 구독을 여러분의 계정 ID와 연결해 추적합니다. 그래서 두 번 결제하는 고객은 은행이 알아채기 전에 '플랜 두 개를 가진 한 명의 고객'으로 드러납니다.

자주 묻는 질문

고객이 같은 구독에 두 번 결제된 이유는 무엇인가요?
대개 App Store와 Google Play, 또는 스토어와 웹사이트처럼 두 플랫폼에서 구매했기 때문입니다. 각 스토어는 자기 구독만 청구하고 다른 쪽의 존재를 모르기 때문에, 한쪽이 취소될 때까지 둘 다 갱신됩니다.
고객의 App Store 구독을 제가 환불할 수 있나요?
아니요. App Store 구매는 Apple만 환불할 수 있습니다. StoreKit의 beginRefundRequest로 앱 안에서 Apple 환불 시트를 열거나, 고객을 reportaproblem.apple.com으로 안내할 수 있습니다. Apple은 승인 또는 거절까지 최대 48시간이 걸린다고 밝힙니다.
중복된 Google Play 구독은 어떻게 환불하나요?
Play Console의 Order management에서 주문을 환불하거나 orders.refund API를 호출하세요. 가장 최근 주문을 환불하면 구독이 즉시 삭제되고 이후 갱신도 취소됩니다. 이 API는 3년이 지난 주문은 환불할 수 없습니다.
구독을 환불하면 구독도 취소되나요?
Google Play에서는 가장 최근 주문을 환불하면 이후 갱신이 취소되지만, 그보다 이전 주문을 환불하면 구독은 계속 유지됩니다. App Store에서는 환불은 Apple이 결정하고, 구독 취소는 고객이 자신의 Apple 계정에서 합니다.
iOS와 Android에서 사용자가 두 번 구독하지 않게 하려면 어떻게 하나요?
모든 구매에 자체 계정 ID를 붙이세요. Apple에서는 appAccountToken을, Google Play에서는 난독화된 계정 ID를 사용합니다. 그런 다음 페이월을 보여 주기 전에 어느 플랫폼에서든 활성 플랜이 있는지 서버에서 확인하고, 사용자에게 먼저 로그인하도록 안내하세요.

출처 및 추가 자료

RefundHalt

App Store와 Google Play 환불 자동 처리

계속 읽기

다음 환불 요청은 이미 오고 있습니다.

이의를 제기하지 못한 환불에 관한 지원 이메일을 하나 더 읽는 시간이면 RefundHalt 설정을 마칠 수 있습니다.