SubXDocs

핵심 개념

SubX로 구독 시스템을 만들 때 알아야 할 개념들을 쉬운 예시와 함께 설명합니다. 노트 앱에 프리미엄 구독을 붙이는 상황을 예시로 사용합니다.

전체 구조 한눈에 보기

오퍼링

메뉴판

포함

패키지

메뉴 항목

연결

상품

스토어 상품

부여

권한

열리는 기능

확인

고객

앱 유저

상품

앱스토어(Apple/Google)에 등록한 실제 판매 상품입니다. 쉽게 말해 "스토어에서 결제되는 아이템" 그 자체입니다.

예: "Pro 월간 구독 4,900원", "Pro 연간 구독 39,000원" — 이런 항목 하나하나가 상품입니다.

  • 스토어 상품 ID(예: com.myapp.pro.monthly)와 1:1로 매핑됩니다
  • 구독(subscription)과 일회성 구매(non-subscription) 두 종류가 있습니다
  • 대시보드 → 상품 탭에서 등록합니다

권한

유저가 결제하면 열리는 "기능 잠금해제" 입니다. 앱 코드에서 유료 기능을 켜고 끄는 스위치라고 생각하세요.

예: "pro" 라는 권한을 만들고, 월간 구독과 연간 구독 두 상품을 연결합니다. 유저가 둘 중 아무거나 사면 "pro" 기능이 켜집니다.

  • 상품과 권한은 다대다 관계입니다 — 여러 상품이 같은 기능을 열 수 있습니다
  • 앱 코드에서는 권한만 확인하면 됩니다
  • 대시보드 → 권한 탭에서 만들고 상품을 연결합니다

왜 상품을 직접 안 보고 권한을 쓰나요?
월간/연간/프로모션 등 여러 상품이 같은 기능을 제공할 수 있잖아요. 권한을 쓰면 앱 코드에서 상품 하나하나 확인할 필요 없이 isEntitled("pro") 하나만 체크하면 됩니다. 나중에 상품을 추가하거나 가격을 바꿔도 앱 코드를 건드릴 필요가 없습니다.

오퍼링

유저에게 보여줄 "구독 메뉴판" 입니다. 식당 메뉴판처럼, 어떤 옵션들이 있는지 묶어놓은 것입니다.

예: "기본 요금제" 오퍼링 안에 "월간 플랜", "연간 플랜" 두 가지 패키지를 담습니다. SDK가 이 오퍼링을 불러와서 앱에 구독 옵션을 표시합니다.

  • isCurrent를 켜면 SDK가 기본으로 이 오퍼링을 불러옵니다
  • 여러 오퍼링을 만들어 국가별/실험별로 다른 메뉴를 보여줄 수 있습니다
  • 대시보드 → 오퍼링 탭에서 관리합니다

패키지

오퍼링(메뉴판) 안의 각 항목입니다. "월간 플랜", "연간 플랜" 같은 개별 선택지 하나하나가 패키지입니다.

예: "기본 요금제" 오퍼링 안에 패키지 2개 — "월간 (4,900원/월)"과 "연간 (39,000원/년)". 각 패키지에 해당하는 상품을 연결합니다.

  • position 값으로 표시 순서를 조절합니다 (0이 가장 위)
  • 하나의 패키지에 여러 상품을 연결할 수 있습니다
  • 오퍼링 상세 화면에서 추가합니다

페이월

앱에서 유저에게 "구독하세요!" 하고 보여주는 결제 안내 화면 템플릿입니다. 유튜브 프리미엄 가입 화면, 넷플릭스 요금제 선택 화면 같은 것입니다.

예: "프리미엄 업그레이드" 페이월을 만들어 "기본 요금제" 오퍼링과 연결합니다. 설정(Config)에 화면 제목, 기능 목록, 버튼 문구를 넣으면, SDK가 이 정보를 받아서 앱에 결제 화면을 그립니다.

  • 하나의 페이월에 하나의 오퍼링을 연결합니다
  • Config JSON으로 화면 제목, 기능 목록, 테마 등을 서버에서 제어합니다
  • isActive로 활성/비활성을 전환할 수 있습니다

왜 페이월을 서버에서 관리하나요?
앱스토어 심사 없이 결제 화면의 문구, 디자인, 가격 표시를 즉시 변경할 수 있습니다. "무료 체험 시작" 버튼을 "지금 구독하기"로 바꾸고 싶으면 대시보드에서 Config만 수정하면 됩니다.

Config JSON은 뭘 넣나요?

앱에서 결제 화면을 그릴 때 사용할 정보를 자유롭게 넣습니다. 정해진 형식은 없고, 앱과 약속한 키-값을 사용합니다.

{
  "title": "Pro로 업그레이드하세요",
  "subtitle": "무제한 노트 + 클라우드 동기화",
  "features": [
    "무제한 노트 작성",
    "모든 기기 동기화",
    "오프라인 사용"
  ],
  "ctaText": "무료 체험 시작",
  "theme": "dark"
}

실험

두 가지 버전을 동시에 돌려서 어떤 게 더 잘 되는지 데이터로 비교하는 A/B 테스트입니다.

예: 유저를 반반으로 나눠서 A그룹에는 "월 4,900원" 가격을, B그룹에는 "월 2,900원 (첫 달 할인)" 가격을 보여주고, 어느 쪽이 전환율이 높은지 확인합니다.

  • Control(기존)과 Treatment(실험) 그룹으로 유저를 나눕니다
  • weight(가중치)로 각 그룹에 배정될 유저 비율을 조절합니다
  • 실행 중에는 변형 추가/삭제가 불가합니다 — 결과의 신뢰성을 위해

어떤 걸 테스트할 수 있나요?
오퍼링을 바꿔서 가격/상품 구성을 테스트하거나, 페이월을 바꿔서 화면 디자인/문구를 테스트할 수 있습니다. 감으로 결정하는 대신 실제 데이터로 판단할 수 있습니다.

고객

앱을 사용하는 유저입니다. SDK가 자동으로 익명 유저를 생성하고, 앱에서 로그인하면 실제 사용자로 연결됩니다.

  • SDK 연동 시 자동으로 생성됩니다
  • 앱 내 로그인과 연동하면 기기 간 구독 이전이 가능합니다
  • 대시보드 → 고객 탭에서 구독 이력을 확인할 수 있습니다

구독

유저의 구독 이력입니다. 언제 시작했고, 결제가 잘 되고 있는지, 취소했는지 등을 추적합니다.

구독 상태 흐름:

activebilling_issueexpired
activecancelledexpired

전체 흐름 한번에 보기

노트 앱에 프리미엄 구독을 붙이는 전체 과정입니다:

1

상품 등록: "Pro 월간 4,900원", "Pro 연간 39,000원"

2

권한 생성: "pro" → 두 상품 모두 연결

3

오퍼링 생성: "기본 요금제" (isCurrent: true)

4

패키지 추가: "월간 플랜" + "연간 플랜" → 각각 상품 연결

5

페이월 생성: "프리미엄 업그레이드" → 오퍼링 연결 + Config 설정

6

SDK에서 오퍼링을 불러와 페이월 화면을 그리고, 유저가 구매하면 "pro" 기능이 활성화!

앱 코드에서는 isEntitled("pro") 하나만 체크하면 됩니다. 나중에 가격을 바꾸거나 프로모션 상품을 추가해도 앱을 업데이트할 필요가 없습니다.


다음 단계

  • SDK 연동iOS/Android에서 SubX SDK를 연동합니다.
  • REST API서버 사이드에서 API를 사용합니다.
핵심 개념 | SubX