인앱결제 연동: 적용 대상과 구매 검증·구독 관리
인앱결제의 적용 조건과 구매 검증·구독 관리를 살펴봅니다.

안녕하세요. 사랑받는 IT 프로덕트의 첫걸음, 똑똑한개발자입니다.
인앱결제는 앱 스토어의 결제 시스템으로 디지털 상품이나 구독을 구매하는 기능입니다. 적용 여부는 판매 상품과 배포 국가, 스토어 정책에 따라 달라집니다. 오늘은 기본 적용 대상과 서버 검증, 구매 복원과 구독 관리 과정을 알아보겠습니다.
인앱결제 연동, 우리 앱도 꼭 해야 하나요?
유료 앱을 기획할 때 가장 먼저 정할 질문입니다. 무엇을 파느냐에 따라 인앱결제 연동은 의무도 되고 금지 대상도 됩니다.

앱 내 디지털 상품에는 스토어 결제가 기본입니다.
애플 App Store 심사 지침 3.1.1에 따르면 구독, 게임 재화, 프리미엄 콘텐츠처럼 결제로 앱 안의 기능이 열린다면 인앱결제를 써야 합니다. 구글 Play도 디지털 상품에 관한 결제 정책을 두고 있습니다. 다만 앱 유형과 국가별 프로그램에 예외가 있으므로 실제 배포 지역의 조건을 확인합니다.
실물 상품과 앱 밖 서비스는 반대로 인앱결제를 쓰지 않습니다.
애플 지침 3.1.3(e)는 실물 상품이나 앱 밖에서 소비되는 서비스에 인앱결제 외의 결제 수단을 쓰라고 명시합니다. 구글 정책에서도 실물 상품과 교통·음식 배달·행사 티켓 같은 서비스는 예외입니다. PG 연동은 저희가 앞서 쓴 '토스페이먼츠 연동 방법 총정리'에서 다뤘으므로 여기서는 디지털 상품만 살펴보겠습니다.
애플 인앱결제와 구글 플레이 결제, 수수료는 얼마인가요?
2026년 10월 공식 안내를 국내 스토어 기준으로 나란히 놓았습니다.

구분 | 애플 인앱결제 | 구글 플레이 결제 |
|---|---|---|
앱 쪽 도구 | StoreKit 2 | Google Play Billing Library |
기본 수수료 | 30% | 연 매출 100만 달러까지 15%, 초과분 30% |
낮은 구간 | Small Business Program 15%, 구독 1년 경과 후 15% | 자동 갱신 구독 15% |
외부결제 | 국가·권한·계약별 조건 적용 | 국가·프로그램별 조건 적용 |
서버 검증 | App Store Server API | 구매 토큰 + Google Play Developer API |
서버 알림 | App Store Server Notifications | RTDN(Cloud Pub/Sub) |
소규모 개발사라면 15% 구간부터 확인합니다.
애플에서는 직전 연도 수익이 100만 달러 이하인 개발사가 Small Business Program에 신청하면 15%가 적용됩니다. 구글은 15% 구간 등록을 마치면 연 매출 첫 100만 달러에 15%가 붙습니다. 자동 갱신 구독이라면 매출과 관계없이 15%입니다.
외부결제를 열어도 수수료가 사라지지는 않습니다.
외부결제 허용 범위와 수수료는 배포 국가와 참여 프로그램에 따라 달라집니다. 외부결제를 이용하더라도 스토어에 보고하거나 수수료를 납부하는 조건이 있을 수 있으므로, 기본 요율을 모든 국가에 그대로 적용하지 않습니다.
인앱결제의 앱 처리와 서버 검증

앱은 결제창을 띄우고 결과를 서버로 넘깁니다.
iOS에서는 StoreKit 2로 상품을 불러와 구매를 요청합니다. 그 결과로 받는 거래 정보는 애플이 서명한 JWS 형식입니다. 안드로이드는 Play Billing Library로 결제 흐름을 띄우며 구매가 끝나면 구매 토큰이 돌아옵니다.
권한은 서버가 검증한 뒤에 엽니다.
앱이 보낸 결제 성공 신호만 믿고 기능을 열면 위조된 요청에도 문이 열립니다. 그래서 각 스토어 API로 거래를 다시 확인하는 일은 서버가 맡습니다.
구글의 구매 확인 처리와 유예 기간
Android 개발자 문서에 따르면 완료된 구매를 3일 안에 acknowledge 또는 해당 상품의 consume 처리하지 않을 경우 자동 환불과 함께 권한이 회수됩니다. 대기 중인 구매는 완료 상태로 전환된 시점을 기준으로 처리하며, 소비성 상품과 구독의 처리 방법도 구분합니다.
구독 관리는 서버 알림으로 상태를 맞춥니다

구독 상태는 앱이 아니라 스토어에서 바뀝니다.
갱신, 결제 실패, 환불은 사용자가 앱을 열지 않은 사이에도 일어납니다. 이 변화를 애플은 App Store Server Notifications로, 구글은 Cloud Pub/Sub를 거치는 RTDN으로 서버에 전해 줍니다.
구글 알림은 신호일 뿐이라 다시 조회해야 합니다.
구글 문서에 따르면 RTDN에는 알림 유형과 구매 토큰만 들어 있습니다. 그러니 서버가 이 토큰으로 purchases.subscriptionsv2.get을 호출해 실제 상태를 받아 와야 합니다.
두 스토어를 직접 맞추기 어렵다면 대행 도구를 씁니다.
RevenueCat 같은 도구를 쓰면 두 스토어의 영수증 검증과 구독 상태가 하나의 API로 묶입니다. 이용료와 지원 기능은 서비스의 현재 요금제와 사용량에 따라 달라집니다.
인앱결제 연동, 출시 직전에 막히지 않으려면
인앱결제 상품은 스토어 심사와 테스트를 함께 거칩니다. 구매 복원 버튼 누락 같은 반려 사유는 '앱스토어 등록 방법과 리젝 사유' 글에 정리해 두었습니다. 구글 쪽 비공개 테스트 조건은 '구글 플레이 테스터 정책' 글을 함께 보시면 됩니다.
서버에서 할 일이 이만큼 많다 보니 개발사에 처음 던질 질문도 달라집니다. 환불 알림이 오면 우리 서버는 무엇을 하나요? 이 질문을 받고 구독 상태 설계부터 꺼내는 곳도 있지만 결제창 연동 기간만 말하는 곳도 있습니다.

세부 항목과 최신 적용 조건은 Apple 앱 심사 가이드라인를 참고해 보세요.
앱 안의 구매가 실제 이용으로 이어지도록

결제 흐름을 하나씩 붙이다 보면 화면뿐 아니라 데이터와 운영 방식도 함께 살펴보게 됩니다. 지금 서비스에 필요한 범위부터 차근차근 정리해볼 수 있습니다.
똑똑한개발자는 UX/UI 디자인과 웹·앱 개발을 함께 진행합니다. 사용자가 이용하는 화면과 운영에 필요한 기능을 연결해 서비스를 만들어가는 과정을 돕습니다.
결제 흐름을 준비하면서 궁금한 점이 있다면 아래 똑똑한개발자 링크로 편하게 이야기 남겨주세요. 함께 살펴보겠습니다. 감사합니다. :)
프로젝트에 필요한 내용을 함께 살펴봅니다.
https://www.toktokhan.dev/contact?utm_source=landing&utm_campaign=inapp-payment&utm_medium=inapp-payment&utm_term=%EC%9D%B8%EC%95%B1%EA%B2%B0%EC%A0%9C-%EC%97%B0%EB%8F%99