Test Store는 끝이 아닙니다
개발 중에는 이미 RevenueCat Test Store로 구매를 테스트하고 계실 겁니다. 빠르고 결과가 결정적이며 Google Play 설정이 필요 없어서 개발 단계에 적합한 도구입니다. 하지만 Test Store는 RevenueCat이 대신 운영하는 store입니다. 실제 Google Play 자격 증명, 실제 public API 키, 실제 상품과 기본 요금제 구성, 기기에서의 실제 Google Play Billing 흐름은 검증하지 않습니다.
출시하기 전에는 실제 경로가 처음부터 끝까지 동작하는지 확인해야 합니다. 서비스 계정 자격 증명이 제대로 연결됐는지, Google Play에서 만든 상품이 사용자에게 보일 Offering과 매핑되는지, 실제 기기에서의 실제 구매가 기대대로 동작하는지를 살펴봐야 합니다. 이 검증은 Google Play 샌드박스에서 Closed testing 트랙과 라이선스 테스터 계정으로 합니다. 이는 Test Store와는 별개의 작업이고, 연동이 정말로 출시 준비가 됐는지 알려 주는 단계입니다.
이 코드랩에서는 다음을 합니다.
- Test Store를 쓸 때와 Google Play 샌드박스를 쓸 때를 구분합니다.
- 라이선스 테스터를 추가하고 Closed testing 트랙을 만듭니다.
- 실제 기기에서 실제 청구 없이 샌드박스 구매를 합니다.
- RevenueCat에서 샌드박스 데이터로 거래를 확인합니다.
- 가속 샌드박스 일정으로 구독 갱신을 테스트합니다.
- "Something went wrong" 결제 오류를 비롯한 흔한 실패를 해결합니다.
Test Store vs Google Play 샌드박스: 언제 무엇을
둘 다 실제 돈을 쓰지 않고 구매를 테스트하지만, 답하는 질문이 다릅니다.
| 항목 | RevenueCat Test Store | Google Play 샌드박스 |
|---|---|---|
| 무엇을 테스트하나 | SDK 로직, 페이월, Entitlement를 독립적으로 | 실제 자격 증명, 실제 상품, 기기에서의 실제 Billing 흐름 |
| 필요한 설정 | 없음, 모든 프로젝트에 내장 | Closed testing 트랙, 라이선스 테스터, 업로드된 서명 빌드 |
| 속도 | 즉시, 결정적 결과 | 실제 기기 흐름과 스토어 처리 시간 |
| 실제 키 사용 | 아니요, 추상화된 store | 예, public API 키와 서비스 계정 |
| API 키 | test_ 키 | 프로덕션 public 키 |
| 적합한 용도 | 초기 개발, 단위 테스트, CI | 출시 전 검증 |
권장 흐름은 Test Store로 만들고 반복한 뒤, 릴리스를 Closed testing, Open testing, Production으로 승격하기 전에 Google Play 샌드박스에서 실제 연동을 검증하는 것입니다. 샌드박스 구매가 동작하고 RevenueCat에 나타나면 연동이 제대로 됐다고 믿을 수 있습니다.
사전 조건
실제 구매를 테스트하기 전에 연동이 갖춰져 있어야 합니다. 대부분은 RevenueCat Google Play 연동 코드랩에서 다룹니다.
- RevenueCat SDK가 연동돼 있고 public Google API 키로 구성돼 있습니다(
test_키가 아님). - 서비스 계정 자격 증명이 RevenueCat에 연결되고 검증돼 있습니다.
- 상품과 기본 요금제가 Google Play에 있고 Active 상태이며, RevenueCat으로 가져와 Offering과 Entitlement에 연결돼 있습니다.
- 서명된 Android App Bundle이나 APK가 있습니다. 빌드에는 Google Play Billing Library가 들어 있어야 하며, 이는 RevenueCat SDK에 포함되어 있습니다.
- 실제 기기를 권장합니다. 에뮬레이터는 Google Play 서비스가 들어 있을 때만 동작하고, 그 경우에도 실제 기기보다 덜 안정적입니다.
RevenueCat SDK가 이미 billing 권한을 선언하므로 보통 직접 추가할 필요는 없습니다. 커스텀 매니페스트를 관리한다면 이 권한이 있는지 확인하세요.
<uses-permission android:name="com.android.vending.BILLING" />
라이선스 테스터 추가하기
라이선스 테스터는 Google Play가 샌드박스 구매자로 취급하는 Google 계정입니다. 라이선스 테스터의 구매는 테스트 결제 수단을 쓰고 절대 청구되지 않습니다.
- Play Console > Settings > License testing을 엽니다.
- 테스트 기기에서 로그인할 Google 계정 이메일을 추가합니다.
- 샌드박스가 프로덕션처럼 동작하도록 라이선스 응답을 RESPOND_NORMALLY로 둡니다.
- 변경 사항을 저장합니다.
계정이 라이선스 테스터가 되면, Google Play는 실제 수단으로 청구하는 대신 항상 승인하는 카드 같은 테스트 카드를 제공합니다.
Closed testing 트랙 만들고 opt-in 하기
상품을 불러와 구매하려면 빌드가 테스팅 트랙을 통해 기기에 도달해야 하고, 계정이 그 트랙에 opt-in 해야 합니다. 구매 테스트에는 Closed testing 트랙이 적합합니다.
- Play Console > Testing > Closed testing으로 이동해 새 closed 트랙을 만듭니다.
- 테스터 목록을 만들고 이름을 붙인 뒤(예: "Testers") 라이선스 테스터 이메일을 추가합니다.
- 서명된 App Bundle이나 APK를 트랙에 업로드하고 저장합니다. 릴리스를 완전히 출시하지 않아도 되지만, 빌드가 처리되어 사용 가능해야 합니다.
- 트랙의 opt-in URL을 복사해 테스트 계정으로 로그인한 상태에서 열고, 테스터가 되는 버튼을 누릅니다.
앱이 완전히 새 앱이라면, 상품이 나타나기 전에 closed 트랙 설정에서 국가나 지역에 출시 가능하도록 만들어야 할 수도 있습니다.
샌드박스 구매하기
실제 기기에 라이선스 테스터로 로그인한 상태에서 closed 트랙으로 앱을 설치합니다. 그런 다음 페이월을 띄우고 상품을 구매합니다.
- 앱을 실행해 Offering이 표시되는 화면에 도달합니다.
- 구매를 시작합니다. Google Play 시트가 실제 카드가 아니라 테스트 결제 수단과 함께 나타납니다.
- 구매를 완료합니다. Google은 이를 Test order로 표시하고 실제 돈은 움직이지 않습니다.
일회성 상품은 해당 Entitlement를 바로 잠금 해제합니다. 구독은 뒤 단계에서 다루는 가속 갱신 일정으로 시작됩니다.
RevenueCat에서 구매 확인하기
샌드박스 구매는 RevenueCat이 받아야만 의미가 있습니다. 대시보드에서 확인하세요.
- RevenueCat 대시보드에서 해당 고객을 엽니다.
- View Sandbox Data 토글을 켭니다. 이걸 켜기 전까지 샌드박스 거래는 숨겨져 있습니다.
- 그 고객에게 거래와 활성 Entitlement가 나타나는지 확인합니다.
가속 일정으로 갱신 테스트하기
구독이 갱신되는 모습을 보려고 한 달을 기다릴 수는 없습니다. 샌드박스에서는 Google Play가 갱신 주기를 압축해, 전체 수명 주기를 몇 분 만에 볼 수 있습니다.
| 프로덕션 주기 | 샌드박스 갱신 |
|---|---|
| 1주 | 5분 |
| 1개월 | 5분 |
| 3개월 | 10분 |
| 6개월 | 15분 |
| 1년 | 30분 |
샌드박스 구독은 최대 여섯 번 갱신된 뒤 만료되며, 이는 갱신 처리, 만료, 유예 기간이나 결제 재시도 로직을 테스트하기에 충분합니다. 모든 갱신이 RevenueCat 고객 대시보드에 항상 반영되지는 않으니, 개별 갱신 행을 세기보다 Entitlement 상태를 단일 진실 소스로 삼으세요.
문제 해결
대부분의 샌드박스 실패는 코드가 아니라 계정이나 빌드 구성에서 비롯됩니다. 다음을 차례로 확인하세요.
구매 중 "Something went wrong"
이건 앱 문제인 경우가 거의 없습니다. Google Play가 결제를 처리하지 못했다는 뜻이고, 보통 결제 수단이나 그 뒤의 Google Pay 계정에 문제가 있기 때문입니다. 테스터로 로그인한 상태로 pay.google.com을 열어, 표시된 문제를 정리하고 결제 수단을 추가하거나 고치며, 계정이 확인을 요구하는 항목을 해결하세요. 그런 다음 구매를 다시 시도합니다.
상품이 로드되지 않음
- opt-in URL을 열지 않았거나, 계정이 테스터 목록에 없습니다.
- 계정이 Settings > License testing의 라이선스 테스터가 아닙니다.
- 빌드의
applicationId가 상품을 소유한 패키지와 일치하지 않습니다. - 릴리스가 아직 처리 중이거나, 앱이 해당 지역에서 사용 불가합니다.
테스트 카드 대신 실제 카드가 나옴
활성 계정이 라이선스 테스터가 아니거나, 잘못된 계정으로 로그인돼 있습니다. Settings > License testing에서 계정을 확인하고, 기기에 그 계정만 로그인돼 있는지 확인하세요.
구독 구매가 막힘
화면 잠금이나 PIN이 없는 기기는 구독 구매가 실패할 수 있습니다. 기기 PIN을 설정하고 다시 시도하세요.
구매가 RevenueCat에 나타나지 않음
먼저 View Sandbox Data를 켜세요. 그래도 안 보이면 서비스 계정 자격 증명과, 상품이 가져와져 Entitlement에 연결됐는지 다시 확인하세요.
마무리와 다음 단계
추상화가 아니라 실제 Google Play 연동을 검증했습니다. 라이선스 테스터를 추가하고, Closed testing 트랙을 만들고, opt-in 하고, 테스트 카드로 상품을 구매하고, 샌드박스 데이터를 켠 채 RevenueCat에서 확인하고, 가속 일정으로 갱신을 돌려 봤습니다.
두 도구를 모두 워크플로에 두세요. 코드를 작성하는 동안에는 Test Store로 빠르고 결정적으로 확인하고, 출시 전에는 Google Play 샌드박스로 실제 경로를 처음부터 끝까지 검증하세요. 샌드박스 구매가 동작하고 RevenueCat에 나타나면 빌드를 Closed testing, 그다음 Open testing, 그다음 Production으로 승격하세요.
이어서 볼 자료입니다.
- 자격 증명 연결이나 상품 생성이 더 필요하면 RevenueCat Google Play 연동.
- 빠른 로컬 테스트는 Android용 Test Store 설정.
- 전체 레퍼런스는 Google Play 샌드박스 문서.