In-App Purchase — 정의, 구매 유형 및 수익화 작동 방식

저자: IT Sectr 게시일: 2026-04-22 읽는 시간: 9 분

In-App Purchase(IAP)는 사용자가 모바일 애플리케이션 내에서 직접 디지털 상품과 서비스를 구매할 수 있도록 하는 인앱 구매 메커니즘입니다. iOS 및 Android 플랫폼은 개발자에게 은행 카드 데이터를 전송하지 않고 결제를 처리할 수 있는 내장 API를 제공합니다. Apple StoreKit 문서에 따르면, IAP는 App Store와 Google Play를 통해 연간 5,000억 달러 이상의 거래를 처리합니다.

핵심 포인트

  • In-App Purchase — 스토어 API를 통해 모바일 앱 내에서 디지털 상품을 구매하는 메커니즘.
  • Consumable — 여러 번 구매할 수 있는 일회성 구매(코인, 목숨, 에너지).
  • Non-Consumable — 한 번 구매하면 영구적으로 사용할 수 있는 구매(레벨, 필터, 프리미엄 기능).
  • Auto-Renewable Subscription — 일정 기간 동안 콘텐츠 또는 서비스에 액세스하기 위한 정기 결제.
  • Server-side receipt validation — 사기 방지를 위한 자체 서버에서의 필수 영수증 확인.

In-App Purchase란?

In-App Purchase(IAP)는 모바일 애플리케이션 내에서 디지털 상품과 서비스를 판매할 수 있는 기술입니다. 결제는 App Store(iOS) 또는 Google Play(Android)를 통해 처리되며, 거래 처리에 대한 수수료가 부과됩니다. 개발자는 스토어 수수료를 제외한 금액을 받습니다.

Apple은 30%의 수수료(매출 100만 달러 미만 소규모 비즈니스의 경우 15%)를 부과합니다. Google Play도 30%(개발자 매출의 첫 100만 달러까지 15%)를 부과합니다. 2024년부터 Google은 개발자가 대체 결제 시스템을 사용할 수 있는 User Choice Billing 프로그램을 테스트하고 있습니다.

App Store 및 Google Play 정책에 따라 앱 내 디지털 상품 판매에는 IAP가 필수입니다. 물리적 상품, 서비스(차량 호출, 음식 배달) 및 P2P 결제는 타사 결제 시스템을 사용할 수 있습니다.

In-App Purchase 유형: consumable, non-consumable 및 구독

App Store와 Google Play는 세 가지 주요 In-App Purchase 유형을 지원합니다. 각 유형은 서로 다른 수익화 모델을 위해 설계되었습니다. 제품 유형 선택은 구매 복원 로직, 구독 관리 및 앱 재설치 시 동작에 영향을 미칩니다.

Consumable(소모성 구매)

소모성 구매는 여러 번 구매할 수 있고 사용 중에 소모되는 아이템입니다. 일반적인 예: 게임 내 화폐(코인, 보석), 추가 목숨, 부스터, 소모성 파워업. 앱을 재설치해도 소모성 아이템은 복원되지 않습니다 — 개발자가 자체 서버에서 각 사용자의 잔액을 관리합니다.

Non-Consumable(비소모성 구매)

비소모성 구매는 한 번 구매하면 영구적으로 사용할 수 있는 아이템입니다. 예: 앱의 전체 버전, 프리미엄 레벨, 필터 잠금 해제, 광고 제거. 비소모성 제품은 Restore Purchases API를 통해 복원할 수 있습니다: 재설치 후 사용자는 이전에 구매한 아이템을 추가 비용 없이 다시 받을 수 있습니다.

Auto-Renewable Subscription(자동 갱신 구독)

자동 갱신 구독은 특정 기간(주, 월, 년) 동안 콘텐츠 또는 서비스에 액세스하기 위한 정기 결제입니다. 사용자가 계정 설정에서 취소할 때까지 구독이 자동으로 갱신됩니다. 스토어는 구독 상태 변경(갱신, 만료, 환불)에 대한 서버 알림(App Store Server Notifications, Google Play Developer Notifications)을 제공합니다.

App Store Connect 및 Google Play Console에서 IAP 설정

설정은 개발자 패널에서 시작됩니다: iOS용 App Store Connect와 Android용 Google Play Console입니다. 각 제품에 대해 제품 ID, 이름, 설명, 유형 및 지역 통화로 자동 변환되는 미국 달러 가격을 지정합니다. 생성 후 제품은 스토어 심사를 거칩니다.

App Store Connect에서 IAP 제품은 Features → In-App Purchases 섹션에서 생성합니다. 각 제품에 대해 유형(consumable, non-consumable, auto-renewable subscription, non-renewing subscription)을 선택하고 현지화된 이름을 입력합니다. 구독의 경우 구독 그룹(상호 교환 가능한 구독 그룹)이 추가로 구성됩니다.

Google Play Console에서 관리형 제품은 Monetise → Products → In-app products 섹션에서 구성합니다. Google은 Managed Product(non-consumable에 해당) 및 Subscription이라는 용어를 사용합니다. Android에서 소모성 구매의 경우 제품을 재구매 가능하도록 초기화하는 별도의 consume 플래그가 사용됩니다.

IAP 제품 심사는 일반적으로 App Store에서 24~48시간, Google Play에서 몇 시간이 소요됩니다. 가격 변경은 재심사 없이 즉시 적용됩니다. 제품 ID는 생성 후 변경할 수 없습니다 — 삭제 후 다시 생성만 가능합니다.

서버 측 영수증 확인 및 사기 방지

영수증 확인은 In-App Purchase 처리의 필수 단계입니다. 클라이언트 애플리케이션이 자체 서버에 영수증을 보내면, 서버는 Apple API(https://buy.itunes.apple.com) 또는 Google API(https://androidpublisher.googleapis.com)를 통해 확인하고, 확인 성공 후에만 사용자에게 아이템을 제공합니다.

서버 측 확인이 없으면 공격자가 스토어 응답을 위조하여 아이템을 무료로 얻을 수 있습니다. 클라이언트 측 확인은 사용자가 제어하는 환경에서 실행되므로 안전하지 않습니다. 서버 측 확인은 영수증이 진짜이고 결제가 성공했음을 보장합니다. Apple의 경우 verifyReceipt 엔드포인트(프로덕션 또는 샌드박스)를 통해 확인하고, Google의 경우 Android Publisher API를 통해 확인합니다. 두 스토어 모두 JSON 형식으로 확인을 반환합니다.

Apple은 영수증에 구매 데이터(product_id, transaction_id, purchase_date, expiration_date(구독용))를 반환합니다. Google은 Purchases.products.get 또는 Purchases.subscriptions.get API를 통해 유사한 필드를 반환합니다. 서버는 각 영수증의 transaction_id를 저장하고 리플레이 공격을 방지하기 위해 동일한 ID의 중복 요청을 거부해야 합니다.

Swift 및 Kotlin으로 모바일 앱에 IAP 통합

통합에는 플랫폼 라이브러리 연결이 필요합니다: iOS의 StoreKit 2와 Android의 Billing Library 7+. API를 사용하여 제품 목록 요청, 구매 시작, 결과 처리 및 이전에 구매한 아이템 복원이 가능합니다.

Swift — iOS 17+의 StoreKit 2

swift
import StoreKit

func purchaseProduct(productID: String) async throws {
    guard let product = try await Product.products(for: [productID]).first else { return }
    let result = try await product.purchase()
    switch result {
    case .success(let verification):
        let transaction = try verification.payloadValue
        await validateReceipt(transaction)
        await transaction.finish()
    default:
        break
    }
}

Kotlin — Billing Library 7

kotlin
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.BillingFlowParams

val billingClient = BillingClient.newBuilder(context)
    .setListener { billingResult, purchases ->
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            purchases?.forEach { purchase ->
                validateReceipt(purchase)
            }
        }
    }
    .build()

val params = BillingFlowParams.newBuilder()
    .setProductDetails(productDetails)
    .build()
billingClient.launchBillingFlow(activity, params)

서버 측 영수증 확인(Node.js)

js
const response = await fetch('https://buy.itunes.apple.com/verifyReceipt', {
    method: 'POST',
    body: JSON.stringify({
        'receipt-data': receiptBase64,
        'password': 'SHARED_SECRET'
    })
})

const data = await response.json()
if (data.status === 0) {
    // 영수증 확인됨 — 아이템 지급 중
    await grantProduct(data.receipt.product_id)
}

In-App Purchase를 통한 수익화 모범 사례

수익화를 위해서는 신중하게 설계된 가격 전략과 UX가 필요합니다. 사용자는 저렴한 가격의 매력적인 스타터 팩을 제공받으면 첫 구매를 할 가능성이 더 높아집니다. Apple과 Google은 구매 확인 단계 전에 제품 가격을 표시할 것을 권장합니다.

구독 온보딩은 중요한 전환 단계입니다. 결제를 요청하기 전에 무료 체험 기간, 요금제 비교, 혜택 목록 등 구독의 가치를 사용자에게 보여주세요. 연구에 따르면 무료 체험 기간은 유료 사용자 전환율을 25~40% 높입니다.

구매 복원(Restore Purchases)은 비소모성 제품 및 구독에 필수입니다. 복원 버튼은 앱 설정 또는 결제 화면에서 액세스할 수 있어야 합니다. Google과 Apple은 관련 IAP 유형에 대한 구매 복원이 구현되지 않은 경우 앱을 거부할 수 있습니다.

유예 기간(Grace Period)은 결제 실패 후에도 사용자가 액세스를 유지할 수 있는 구독 유예 기간입니다. iOS와 Android는 최대 30일의 유예 기간을 지원합니다. 유예 기간을 활성화하면 이탈률(churn rate)이 10~15% 감소합니다.

A/B 테스트는 중요한 수익화 방법입니다. App Store Connect는 재심사 없이 가격을 변경할 수 있는 현지 가격(Price Tiers)을 지원합니다. Google Play Console은 하나의 구독 제품에 대해 최대 5개의 다른 가격의 기본 요금제를 구성할 수 있습니다. 현재와 새로운 가격 등 최소 두 가지 가격 포인트를 테스트하는 것이 좋습니다. 테스트는 가격 포인트당 최소 1000명의 사용자 샘플로 2~4주 동안 수행해야 합니다.

스토어 리뷰 및 거부 관리는 IAP 앱 출시의 필수 단계입니다. Apple은 자동 갱신 구독이 있는 앱을 특히 면밀히 검토합니다: 활성 구독이 있는 테스트 계정 제공, 구독 취소 화면 표시, 구매 복원 구현이 필요합니다. Google Play는 덜 엄격하지만 디지털 콘텐츠 권한 확인이 필요합니다. IAP 로직을 설명하는 리뷰 노트(Review Notes)를 추가하는 것이 좋습니다.

자주 묻는 질문

In-App Purchase란 무엇이며 어떻게 작동하나요?

In-App Purchase(IAP)는 모바일 앱 내에서 디지털 상품을 구매하는 메커니즘입니다. 결제는 App Store 또는 Google Play를 통해 처리되며, 30%(소규모 비즈니스의 경우 15%)의 수수료를 제외한 나머지가 개발자에게 전송됩니다.

In-App Purchase에는 어떤 유형이 있나요?

IAP에는 세 가지 유형이 있습니다: 소모성(소진 가능 — 코인, 목숨), 비소모성(영구적 — 광고 제거, 전체 버전), 자동 갱신 구독(정기적 — 일정 기간 콘텐츠 액세스). 비소모성 구매는 복원을 지원합니다.

In-App Purchase를 해킹으로부터 보호하는 방법은?

기본 보호 방법은 서버 측 영수증 확인입니다. 클라이언트가 서버에 영수증을 보내면 서버가 Apple 또는 Google API를 통해 확인합니다. 서버 측 확인이 없으면 공격자가 스토어 응답을 위조하여 아이템을 무료로 얻을 수 있습니다.

앱에서 In-App Purchase를 설정하는 방법은?

설정 단계: App Store Connect 또는 Google Play Console에서 제품 생성, StoreKit(iOS) 또는 Billing Library(Android) 연결, 구매 흐름 구현, 서버 측 영수증 확인. 각 제품은 스토어 심사를 거칩니다.

In-App Purchase의 스토어 수수료는 얼마인가요?

Apple은 30%(매출 100만 달러 미만 개발자는 15%)를 부과합니다. Google Play도 30%(첫 100만 달러까지 15%)를 부과합니다. 2024년부터 Google은 User Choice Billing을 통해 대체 결제 시스템을 테스트하고 있습니다. 개발자는 타사 결제 제공업체를 선택할 수 있지만 Google에 11~12%의 서비스 수수료를 지불해야 합니다.

요약

  • In-App Purchase — App Store 및 Google Play API를 통해 모바일 앱 내에서 디지털 상품을 판매하는 메커니즘.
  • 세 가지 유형의 IAP: 소모성(소진 가능), 비소모성(영구적), 자동 갱신 구독(정기적).
  • 수수료는 30%(소규모 비즈니스는 15%).
  • 서버 측 영수증 확인 — 클라이언트 측 영수증 위조에 대한 필수 보호.
  • 심사는 App Store에서 24~48시간, Google Play에서 몇 시간 소요.
  • 구독 온보딩과 무료 체험 기간으로 유료 사용자 전환율 25~40% 향상.
  • 유예 기간(최대 30일)으로 결제 실패 시 구독자 이탈률 10~15% 감소.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기