모든 글
실전 가이드8분 소요

Apple의 DeviceCheck는 환불 악용자가 새 계정으로 가입해도 그 뒤에 있는 휴대폰을 기억합니다

환불 악용자가 새 계정을 만드는 순간 계정 차단과 구매 식별자는 효력을 잃습니다. Apple의 DeviceCheck와 Google Play의 기기 기억(device recall)은 기기마다 몇 개의 비트를 스토어 서버에 보관합니다. 무엇이 저장되는지, 언제 설정해야 하는지, 그리고 얼마나 손실을 막아 주는지 설명합니다.

유리 매장 진열대 위에 화면이 아래로 향한 채 놓인 중고 스마트폰과 거기에 묶인 황동 꼬리표. DeviceCheck가 계정이 아니라 기기에 표시를 남긴다는 것을 보여 주는 사진

핵심 요약

  • Apple의 DeviceCheck를 사용하면 서버에서 기기마다 두 개의 이진 비트를 설정하고 조회할 수 있으며, 데이터는 Apple 서버에 저장됩니다. Apple은 사기로 판단한 기기에 플래그를 지정하는 것을 의도된 용도 중 하나로 명시합니다.
  • Google Play의 기기 기억(device recall)은 Play Integrity API의 베타 기능으로, 기기마다 세 개의 맞춤 비트를 Google 서버에 저장하며 앱 재설치와 기기 초기화 후에도 유지됩니다.
  • 기기 기억 값은 같은 Google Play 개발자 계정의 모든 앱이 공유하며, 마지막 읽기 또는 쓰기 후 3년 동안 보관됩니다.
  • Play Integrity 토큰은 검증 후 최대 14일 동안 기기 기억 비트 쓰기에 사용할 수 있으며, 이는 Google Play의 48시간 셀프서비스 환불 기간을 포함합니다.
  • Apple의 환불 알림과 Google의 무효화된 구매 어디에도 기기 식별자가 없으므로, 구매를 미리 자체 계정과 연결해 둔 서버만 기기에 플래그를 지정할 수 있습니다.
  • 기기 플래그로 환불을 막을 수는 없습니다. 플래그가 결정하는 것은 자사 앱이 그 기기에 다음에 무엇을 제공할지입니다. 예를 들어 무료 크레딧, 자사가 비용을 부담하는 체험판, 서버가 서명하는 프로모션 혜택 등입니다.
  • 스토어가 결정하기 전에 개발자가 증거를 제출할 수 있는 환불 흐름은 두 가지뿐입니다. 12시간 이내에 응답하는 Apple의 CONSUMPTION_REQUEST와, 24시간 이내에 orders.reviewrefund로 응답하는 Google Play 지불 거절 검토입니다.

계정을 차단해도 같은 휴대폰으로 다시 가입하는 환불 악용자는 막을 수 없습니다. Apple의 DeviceCheck와 Google Play의 기기 기억(device recall)은 바로 그 빈틈을 위해 존재합니다. 둘 다 서버가 자체적으로 의미를 정한 몇 개의 비트를 실제 기기에 붙여 스토어 서버에 저장할 수 있게 해 줍니다. 그래서 그 뒤에 있는 사람이 새 이메일 주소로 돌아와도 플래그는 그대로 남아 있습니다. 두 도구 모두 기기 ID를 넘겨주지 않으며, 환불을 막지도 못합니다. 이 도구들이 하는 일은 가입 시점이나 페이월에서 이 기기가 이전에 손해를 끼쳤다는 사실을 알려 주는 것입니다.

각 스토어가 실제로 무엇을 저장하는지, 플래그를 설정할 수 있는지를 좌우하는 타이밍 함정, 그리고 적발하기 전까지 상습 악용자가 얼마의 비용을 발생시키는지 살펴보겠습니다.

새 계정이 모든 계정 단위 방어를 무력화하는 이유

대부분의 환불 방어는 계정을 기준으로 합니다. Apple의 appAccountToken은 거래를 자사 데이터베이스의 사용자와 연결합니다. Google Play의 난독화된 계정 ID는 Android에서 같은 역할을 합니다. 둘 다 모든 구매에서 설정해야 하는 것이 맞지만, 이들이 나타내는 것은 사람의 계정이지 그 사람이 들고 있는 하드웨어가 아닙니다. 계정을 삭제하고 새 이메일로 가입하면 그 사람에 대한 기록은 처음부터 다시 시작됩니다.

스토어는 이 빈틈을 대신 메워 주지 않습니다. App Store 환불 알림은 어떤 거래가 환불되었는지 알려 줍니다. Google Play의 무효화된 구매는 구매 토큰, 주문 ID, voidedReason을 알려 줍니다. 어디에도 기기 식별자는 없습니다. 한 데이팅 앱 개발자는 Apple Developer Forums 스레드에서 그 결과를 설명했습니다. 사기 프로필이 프리미엄 멤버십을 계속 구매한 뒤 환불을 받았고, 개발자 자체 방식으로 기기를 차단해도 소용이 없었다는 내용입니다.

새 계정을 만들면 스토어 자체의 체험판이 초기화되나요?

같은 Apple 계정이라면 초기화되지 않습니다. Apple 문서에 따르면 무료 체험판을 포함한 첫 구독 혜택은 해당 제품이나 같은 구독 그룹 내 어떤 제품에서도 아직 받은 적이 없는 고객에게 제공됩니다. 따라서 앱 안에서 다른 로그인을 사용한다고 Apple 체험판을 한 번 더 받을 수는 없습니다. 새 Apple 계정이라면 받을 수 있고, 자사가 직접 제공하는 모든 것도 마찬가지입니다. 가입 크레딧, 서버가 비용을 부담하는 체험판, 추천 보너스 등입니다. 바로 이런 혜택을 기기 플래그가 보호합니다.

Apple의 DeviceCheck가 실제로 저장하는 것

DeviceCheck는 두 부분으로 구성됩니다. 앱에서는 DCDevice 클래스가 기기를 식별하는 임시 토큰을 생성합니다. 서버에서는 이 토큰을 개발자 계정의 키로 서명한 JSON 웹 토큰과 함께 Apple에 보내면, Apple이 해당 기기의 두 비트를 조회하거나 업데이트할 수 있게 해 줍니다. 조회 응답은 bit0, bit1, last_update_time을 반환하며, last_update_time은 연도와 월로 표시됩니다. Apple이 직접 드는 사용 예는 이미 프로모션 혜택을 받은 기기와 사기로 판단한 기기입니다.

비트는 Apple이 보관하지만 의미는 자사가 정합니다. 문서에는 비트의 의미를 관리하고 언제 초기화할지 결정하는 책임이 개발자에게 있다고 나와 있으며, 기기 판매를 예로 듭니다. 두 비트로 네 가지 상태를 표현할 수 있으므로, 간단한 방식은 한 비트를 대량 사용 후 환불에, 다른 한 비트를 무료 크레딧 수령 완료에 쓰는 것입니다.

  • 토큰은 일회용입니다. Apple은 요청을 재시도할 수 있을 만큼은 유효하다고 하지만, 호출할 때마다 새 토큰을 생성해야 합니다.
  • 개발 빌드는 api.development.devicecheck.apple.com과 통신합니다. 프로덕션은 반드시 api.devicecheck.apple.com을 사용해야 하며, 그렇지 않으면 플래그가 엉뚱한 곳에 기록됩니다.
  • Apple은 DeviceCheck를 결론이 아니라 전체 위험 평가의 한 입력값으로 설명합니다. 설정된 비트는 더 자세히 살펴볼 이유로 다루세요.

Google의 기기 기억이 Android에서 더해 주는 것

Google 버전은 Play Integrity API 안에 있으며 아직 베타 단계로, 관심 신청 양식을 거쳐야 합니다. 승인을 받고 Play Console에서 사용 설정하면 모든 무결성 판정에 해당 기기의 맞춤 비트 세 개가 포함됩니다. 비트는 이미 검증한 무결성 토큰을 사용해 서버에서 deviceRecall:write 엔드포인트를 호출하여 기록합니다. Google에 따르면 데이터가 Google 서버에 있으므로 앱 재설치와 기기 초기화 후에도 유지됩니다.

Google 문서는 용도에 대해 이례적으로 직접적입니다. 심각한 악용의 증거가 있는 기기, 무료 체험판 같은 고가 항목을 이미 사용한 기기, 악용 목적으로 새 계정을 만드는 데 반복적으로 쓰이는 기기를 명시합니다. 한계에 대해서도 똑같이 직접적입니다. 기기 기억은 앱 보안을 보호하고 악용, 사기, 무단 액세스에 대응하는 데만 사용할 수 있으며, 개별 사용자를 핑거프린팅하거나 추적하는 데는 절대 사용할 수 없고, 나이, 성별, 위치 같은 민감한 특성을 저장해서도 안 됩니다.

질문Apple DeviceCheckGoogle Play 기기 기억
상태정식 제공베타, 관심 신청 양식으로 승인
기기당 비트 수23
저장 위치Apple 서버Google 서버
재설치 및 초기화 후 유지서버 측에 저장, 초기화는 개발자 몫예, 둘 다 유지(Google 기준)
자사 앱 간 공유개발자 계정에 연결예, 개발자 계정의 모든 앱
타임스탬프마지막 업데이트의 연도와 월비트별 기록 날짜
보관 기간초기화할 때까지마지막 읽기 또는 쓰기 후 3년
쓰기에 필요한 토큰새로 생성한 일회용 DCDevice 토큰검증된 무결성 토큰, 14일간 사용 가능
추가 요건계정에 등록된 App ID최신 Play 스토어 및 Play 서비스, Play 라이선스 사용자, 에뮬레이터 불가

타이밍 문제: 환불이 도착할 때 토큰은 이미 없다

두 도구 모두 기기에 플래그를 지정하기 전에 기기 자체에서 무언가를 받아야 합니다. Apple은 새 DCDevice 토큰이 필요합니다. Google은 해당 기기에서 받은 14일 이내의 무결성 토큰이 필요합니다. 반면 환불은 기기에 대해 아무것도 모르는 스토어 알림을 통해 서버에 도착합니다. 따라서 문제는 기기에 플래그를 지정할지 여부가 아닙니다. 환불이 도착했을 때 그 기기에 닿을 방법이 아직 남아 있는지입니다.

Google의 48시간 환불은 14일 기간 안에 들어온다

Google Play 셀프서비스 환불은 구매 후 48시간 이내에만 가능하며, 이는 무결성 토큰을 쓰기에 사용할 수 있는 14일 안에 충분히 들어옵니다. 구매 시점에 무결성 검사를 실행하고 검증된 토큰을 주문 ID와 함께 보관해 두면, 해당 주문의 무효화된 구매가 도착했을 때 바로 비트를 기록할 수 있습니다. 더 어려운 경우는 지불 거절입니다. 은행 이의 제기는 14일째가 한참 지난 뒤에 도착할 수 있기 때문입니다.

Apple 환불은 기기가 돌아와야 한다

Apple 환불은 구매 후 몇 주 뒤에 도착할 수 있고, 저장해 둔 DeviceCheck 토큰은 재사용하도록 만들어지지 않았습니다. 현실적인 답은 먼저 계정에, 그다음 기기에 표시하는 것입니다. 환불 알림이 도착하면 데이터베이스에서 해당 계정에 플래그를 지정합니다. 그 계정이 다음에 앱을 열 때 DeviceCheck 토큰을 요청하고 비트를 설정합니다. 환불 후에도 콘텐츠를 계속 가지고 있는 악용자는 대개 실제로 돌아옵니다. 사용하는 것이 애초의 목적이었기 때문입니다.

  • 구매 시 appAccountToken 또는 난독화된 계정 ID를 통해 거래를 자체 계정에 기록합니다.
  • 환불 또는 무효화가 발생하면 서버에서 해당 계정에 플래그를 지정합니다.
  • 플래그가 지정된 계정의 다음 세션에서 기기 토큰을 받아 비트를 설정합니다.
  • 가입할 때마다 비용이 드는 것을 제공하기 전에 비트를 조회합니다.

상습 환불 악용자가 발생시키는 비용

환불 금액은 눈에 보이는 부분일 뿐입니다. 나머지는 그 구매가 이미 일으킨 모든 것입니다. 앱이 판매하는 것을 제공하는 데 비용이 든다면, 구매, 소비, 환불이 한 번 돌 때마다 그 비용은 쓴 채로 남습니다. 이미지 생성을 위한 GPU 시간, 모델이나 데이터 API의 유료 호출, 고객이 계속 가지고 있는 내보내기 파일의 스토리지, 판매 기준으로 계산된 크리에이터 지급금 등입니다. 새 계정은 이 순환을 다시 시작하고, 장부에는 완전히 새로운 고객으로 기록됩니다.

무료 혜택도 환불이 전혀 없어도 같은 방식으로 새어 나갑니다. 계정 10개로 가입 크레딧을 긁어모으는 기기는 체험판 한 번에 책정한 컴퓨팅 비용의 10배를 소비합니다. Google Play에서는 2026년 8월 3일 이후 주문의 지불 거절에 대해 Google 서비스 수수료를 뺀 구매 가격과 은행 수수료까지 부담하게 됩니다. 따라서 매번 새 계정으로 이의를 제기하는 사람은 매번 이의 제기 비용 전체를 다시 발생시킵니다.

비용 항목기기 플래그 없음기기 플래그 있음
가입 크레딧 또는 자사 부담 체험판새 계정마다 다시 제공플래그 지정 기기에서는 보류 또는 축소
컴퓨팅 및 유료 API 호출매 순환마다 다시 지출한 번만 지출하고 이후 제한
크리에이터 또는 제휴 지급금환불로 돌아오는 판매에도 지급플래그 지정 기기는 검토를 위해 보류
2026년 8월 3일 이후 Google Play 지불 거절매번 서비스 수수료를 뺀 가격과 은행 수수료건당 동일하지만 반복 이의 제기 감소
스토어의 환불 결정스토어가 결정여전히 스토어가 결정
수리점 서랍에 놓인 똑같은 스마트폰들 가운데 한 대에 주황색 테이프가 붙어 있는 모습. 기기 플래그가 여러 휴대폰 중 한 대를 골라내는 방식을 보여 줍니다

플래그가 지정된 기기에 대한 대응

플래그가 답하는 질문은 하나입니다. 이 기기에 다시 무언가를 무료로 줘야 할까요? 대응은 적정한 수준으로 유지하세요. 설정된 비트는 증거이지 확증이 아니기 때문입니다. 휴대폰은 재판매되고, 가족은 iPad를 함께 쓰며, Google도 바로 그 이유로 오래된 데이터를 무시하거나 초기화하는 것을 고려하라고 분명히 안내합니다.

  • 플래그가 지정된 기기에는 가입 크레딧, 서버 부담 체험판, 추천 보너스를 생략하고 대신 유료 요금제를 제안합니다.
  • 플래그가 지정된 기기에는 프로모션 혜택에 서명하지 마세요. App Store에서는 프로모션 혜택을 여는 서명을 자사 서버가 생성하므로 선택권은 자사에 있습니다.
  • 플래그가 지정된 기기에 고가의 소모성 항목을 제공하기 전에 결제가 완료되도록 요구합니다.
  • 타임스탬프를 활용하세요. 지난달에 설정된 플래그가 2년 전에 설정된 것보다 무게가 큽니다.
  • 고객 지원에 연락할 방법을 제공하세요. 중고 휴대폰을 샀다가 잘못 플래그가 지정된 사람은 답변을 받아야 하며, 비트는 초기화할 수 있습니다.

그냥 기기를 차단하면 안 되나요?

자사의 무료 혜택을 거절할 수는 있고, 바로 그 지점에서 기기 플래그가 효과를 냅니다. 완전한 차단은 더 위험합니다. 오늘 그 휴대폰을 들고 있는 사람이 악용한 사람과 같지 않을 수 있고, Google 자체 약관도 기기 기억을 사람 추적이 아니라 악용 방지로 제한합니다. 비용이 드는 것은 제한하고 유료 경로는 열어 두세요.

키체인(Keychain)이나 기기 식별자는 어떤가요?

개발자들은 Keychain 마커나 하드웨어 ID로 같은 일을 할 수 있는지 자주 묻습니다. 앱이 휴대폰에 저장한 마커는 기기를 초기화하면 사라지며, Apple은 이 목적으로 앱에 안정적인 하드웨어 식별자를 제공하지 않습니다. DeviceCheck와 기기 기억이 스토어가 인정한 해답인 이유는 바로 비트가 휴대폰이 아니라 Apple과 Google의 서버에 있기 때문입니다.

여전히 스토어가 결정하는 부분

기기 플래그가 바꾸는 것은 앱이 다음에 무엇을 내주느냐입니다. 눈앞의 환불에는 영향을 주지 않습니다. 스토어가 결정하기 전에 증거를 제출할 수 있는 환불 흐름은 두 가지뿐입니다. Apple은 CONSUMPTION_REQUEST를 보내 12시간 이내에 소비 데이터를 요청합니다. Google Play는 지불 거절 검토를 열고, 개발자는 24시간 이내에 orders.reviewrefund로 응답합니다. 그 밖의 모든 것, 즉 Google Play의 48시간 환불부터 고객 지원 환불, 확인되지 않은 구매의 자동 환불까지는 개발자 없이 결정됩니다. 지불 거절은 은행이 판정하면 최종 확정됩니다.

RefundHalt는 모든 CONSUMPTION_REQUEST와 Google Play 지불 거절 검토에 기한 내에 실제 사용 데이터로 응답하고, 각 환불을 이를 요청한 계정과 연결합니다. 그래서 서버는 다음 체크인 때 어떤 기기에 플래그를 지정해야 하는지 알 수 있습니다.

자주 묻는 질문

Apple의 DeviceCheck는 무엇에 사용되나요?
DeviceCheck를 사용하면 서버가 Apple 서버에 기기마다 두 개의 비트를 저장하고 읽을 수 있습니다. Apple이 직접 드는 예는 이미 프로모션 혜택을 받은 기기를 표시하는 것과 사기로 판단한 기기에 플래그를 지정하는 것입니다. 비트의 의미와 초기화 시점은 개발자가 정합니다.
사용자가 앱을 삭제하거나 새 계정을 만들어도 DeviceCheck가 작동하나요?
네. 비트는 기기에 속하며 앱이나 사용자 계정 안이 아니라 Apple 서버에 저장되므로, 앱을 재설치한 뒤 같은 기기에서 새로 가입해도 같은 비트를 읽습니다. 초기화는 개발자에게 맡겨져 있습니다. 예를 들어 기기가 판매된 경우입니다.
Android에도 DeviceCheck에 해당하는 기능이 있나요?
네, Play Integrity API의 기기 기억(device recall)입니다. 기기마다 세 개의 맞춤 비트를 Google 서버에 저장하고, 재설치와 기기 초기화 후에도 유지되며, 개발자 계정의 모든 앱이 공유하고, 마지막 액세스 후 3년 동안 데이터를 보관합니다. 베타 기능이며 승인이 필요합니다.
기기 플래그로 고객의 환불을 막을 수 있나요?
아니요. 환불은 Apple과 Google이 직접 결정합니다. 기기 플래그는 자사 앱이 다음에 무엇을 제공할지, 예를 들어 무료 크레딧이나 프로모션 혜택만 제어합니다. 증거가 반영되는 곳은 12시간 이내에 응답하는 Apple의 CONSUMPTION_REQUEST와 24시간 이내에 응답하는 Google Play 지불 거절 검토뿐입니다.
환불 악용을 이유로 기기를 차단해도 되나요?
Google은 기기 기억을 앱 보안과 악용, 사기, 무단 액세스 방지에만 사용하도록 허용하며, 사용자를 핑거프린팅하거나 추적하는 데 사용하는 것을 금지합니다. 기기는 재판매되고 공유되므로, 유료 기능에서 차단하기보다 플래그가 지정된 기기에 무료 혜택을 주지 않는 편이 더 안전합니다.

출처 및 추가 자료

RefundHalt

App Store와 Google Play 환불 자동 처리

계속 읽기

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

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