핵심 개념
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 연동 시 자동으로 생성됩니다
- 앱 내 로그인과 연동하면 기기 간 구독 이전이 가능합니다
- 대시보드 → 고객 탭에서 구독 이력을 확인할 수 있습니다
구독
유저의 구독 이력입니다. 언제 시작했고, 결제가 잘 되고 있는지, 취소했는지 등을 추적합니다.
구독 상태 흐름:
전체 흐름 한번에 보기
노트 앱에 프리미엄 구독을 붙이는 전체 과정입니다:
상품 등록: "Pro 월간 4,900원", "Pro 연간 39,000원"
권한 생성: "pro" → 두 상품 모두 연결
오퍼링 생성: "기본 요금제" (isCurrent: true)
패키지 추가: "월간 플랜" + "연간 플랜" → 각각 상품 연결
페이월 생성: "프리미엄 업그레이드" → 오퍼링 연결 + Config 설정
SDK에서 오퍼링을 불러와 페이월 화면을 그리고, 유저가 구매하면 "pro" 기능이 활성화!
앱 코드에서는 isEntitled("pro") 하나만 체크하면 됩니다. 나중에 가격을 바꾸거나 프로모션 상품을 추가해도 앱을 업데이트할 필요가 없습니다.
