SaaS 월간/연간 요금제, 유료 멤버십, 디지털 콘텐츠·이용권처럼 정해진 주기로 같은 금액을 자동 결제하는 서비스예요.
enum 값은 regular_subscription 이에요. 유형 선택 가이드
정기구독은 부트페이 구독의 기본 유형이에요. 구독 템플릿에서 유형을 따로 바꾸지 않으면 정기구독으로 만들어져요. 배송·만기·사용량 같은 유형 전용 개념 없이, 회차 가격표대로 주기마다 자동 결제되는 가장 단순한 구조예요.
내가 하는 것
- 요금제(회차 가격표) 설계·상품 등록
- 구독 신청 승인/거절 판단
- 웹훅으로 서비스 이용 권한 제어
- 플랜 변경 신청 승인
Bootpay가 알아서 하는 것
- 매 회차 자동 결제, 실패 재시도
- 결제 주기·다음 결제일 관리
- 일시정지·재개·해지 상태 관리
- 웹훅 알림, 회차별 결제 내역 제공
결제 주기와 결제일
정기구독의 청구 리듬은 구독 템플릿에서 정해요.
| 설정 | 선택지 | 설명 |
|---|---|---|
| 결제 주기 | 주 / 월 / 연 | 회차가 반복되는 간격이에요 (1·2·3·4·6주, 1·2·3·6개월, 1년). |
| 결제일 기준 | 결제일 기준 / 고정일 | 가입일 기준으로 매 주기 청구할지, 매월 같은 날짜(예: 1일)에 청구할지 정해요. |
첫 회차가 선결제인 계약은 신규 승인 시점에 빌링키로 첫 결제가 실행되고, 이후 회차는 부트페이가 자동으로 예약·결제해요. 자동 과금의 상세 흐름은 구독 흐름 설계를 봐요.
시작 순서
요금제 설계
회차 가격표로 월/연 요금제를 만들어요. 요금제·회차 가격 설계
상품 등록
관리자에서 상품에 구독 템플릿을 적용해요. 디지털 상품이라면 디지털·이용권 연계를 함께 봐요.
신청 → 승인
고객이 신청하면 신규 승인으로 첫 결제를 실행해요.
권한 제어
subscription.approved / subscription.terminated 웹훅을 받아 서비스 접근을 켜고 꺼요. 웹훅 가이드
서비스 권한 제어 패턴
정기구독에서 가맹점 서버가 할 일은 사실상 하나예요 — 웹훅을 받아 이용 권한을 토글하는 것.
| 웹훅 이벤트 | 가맹점이 할 일 |
|---|---|
subscription.approved |
service_active = true (서비스 ON) |
subscription.paused |
서비스 일시 제한 (고객·관리자가 멈춘 상태 — 결제 실패 중단은 subscription.hold_on) |
subscription.terminated |
service_active = false (서비스 OFF) |
지금 subscription.terminated 는 결제 실패 반복으로 자동 해지될 때만, subscription.paused 는 관리자 일시정지 때만 나가요. 관리자 해지는 subscription.admin_terminated 로 와요. 고객이 요청한 해지·일시정지는 계약 상세의 status 로 확인해 권한을 끄세요.
해지 시점과 권한 종료 시점을 어떻게 맞출지(즉시 차단 vs 기간 만료까지 유지)는 서비스 정책으로 먼저 정해요. 유형별 운영 정책 비교는 블로그 글을 참고해요.
공통 API 바로가기
정기구독의 계약·회차·신청 처리는 전부 구독 공통 API를 사용해요.
| 하고 싶은 것 | 문서 |
|---|---|
| 계약 목록·상태 조회 | 계약 조회 |
| 신청 승인·거절·철회 | 신청 관리 |
| 회차·결제 내역 확인 | 회차 조회 · 거래 목록 |
| 특정 회차 할인·추가 요금 | 회차 금액 조정 |
| 일시정지·재개·해지 | 일시정지 · 재개 · 해지 |
요금제·회차 가격 설계
정기구독의 요금제는 회차 가격표로 표현해요. "1회차 9,900원, 2회차 9,900원, … 12회차 8,000원"처럼 회차별 판매가가 나열된 표가 상품에 박히고, 이 표가 고객에게 보이는 가격이자 자동 결제의 기준이 돼요.
구독 템플릿에는 계산 규칙(원가에 10% 가산, 1회차에 보증금 등)이, 상품에는 규칙이 계산된 결과 가격표가 저장돼요. 템플릿을 나중에 수정해도 이미 만들어진 상품·계약의 가격은 바뀌지 않아요. 이 구조의 이유는 구독 모델 구조에서 자세히 다뤄요.
요금제 패턴
| 패턴 | 회차 가격표 설계 |
|---|---|
| 월간 요금제 | 무제한 회차(회차 미지정) + 월 주기, 매 회차 같은 가격 |
| 연간 요금제 | 무제한 회차 + 월 주기 12회차 단위 또는 연 단위 청구 |
| 약정 요금제 | 12회차/24회차처럼 회차 수를 고정 — 기간이 끝나면 만료돼요 |
| 장기 할인 | 회차가 지날수록 가격을 낮게 — "12회차부터 8,000원" |
회차 수를 고정하면 마지막 회차 결제 후 계약이 만료(자연 종료) 상태가 돼요. 해지와 만료의 차이는 구독 용어 사전을 봐요.
회차 가격표에 들어가는 것
| 항목 | 설명 |
|---|---|
| 판매가 | 회차에 청구되는 금액이에요. |
| 비과세가 | 판매가 중 비과세 금액이에요. |
| 할인가·할인 유형 | 회차별 할인을 결과 가격에 반영해요. |
| 회차 혜택 사용 여부 | 특정 회차에 혜택을 얹을지 정해요. 무료체험·회차 혜택 |
가격 검증 규칙
상품 저장 시 회차 가격표는 구독 옵션(duration) 단위로 독립 검증돼요.
- 회차 가격은 0원 이상이어야 해요. 음수 회차가 하나라도 있으면 저장이 거부돼요.
- 한 구독 옵션 안에서 최소 한 회차는 0원보다 커야 해요. 전 회차 0원은 종량제에서만 허용돼요.
- 12회차 구독과 24회차 구독처럼 옵션이 여러 개면 각 옵션이 따로 검증돼요.
1회차를 0원으로 두는 무료체험 설계는 이 규칙 안에서 가능해요 — 무료체험·회차 혜택에서 이어서 봐요.
판매 후 가격을 바꾸고 싶다면
이미 체결된 계약의 가격표는 스냅샷으로 고정돼 있어서 상품 가격을 고쳐도 소급되지 않아요. 살아 있는 계약의 금액을 바꾸는 방법은 두 가지예요.
| 상황 | 방법 |
|---|---|
| 다음 회차부터 계약 자체를 변경 | 계약 내용 변경 |
| 특정 회차에만 할인·추가 요금 | 회차 금액 조정 |
관련 문서
무료체험·회차 혜택
정기구독의 혜택은 세 층위로 설계할 수 있어요. 설계 시점(회차 가격표), 회차 시점(회차 혜택), 운영 시점(금액 조정)이에요.
1무료체험 — 1회차 0원
회차 가격표에서 1회차 판매가를 0원으로 두면 첫 주기가 무료체험이 돼요.
- 승인 시점에 0원 회차가 처리되고, 2회차부터 정상 금액이 자동 결제돼요.
- 가격 검증 규칙상 모든 회차를 0원으로 둘 수는 없어요. 한 회차 이상은 유료여야 해요.
- 빌링키는 신청 시점에 등록되므로, 무료체험이 끝나면 별도 재동의 없이 2회차가 결제돼요. 체험 종료 전 안내 메시지는 가맹점이 직접 보내는 걸 권장해요.
같은 고객이 무료체험을 반복 신청하는 걸 막으려면, 신청 승인 단계에서 이력을 확인하고 구독 거절로 걸러요. 무료체험 정책 설계는 블로그 — 구독 무료체험 설계를 참고해요.
2회차 혜택
회차 가격표의 특정 회차에 혜택을 정의해요. "3회차마다 사은품", "6회차 도달 시 등급 상향" 같은 회차 단위 리워드를 표현하는 자리예요. 상품 편집의 회차 설정에서 회차별 혜택 사용을 켜면 회차마다 혜택 내용을 입력할 수 있어요.
3운영 중 할인 — 금액 조정
이미 구독 중인 고객에게 할인·보상을 주려면 회차 가격표를 고치는 게 아니라 금액 조정을 써요. 특정 회차에 할인(음수 조정)이나 추가 요금(양수 조정)을 얹는 방식이에요.
| 하고 싶은 것 | API |
|---|---|
| 다음 회차 5,000원 할인 | 회차 금액 조정 |
| 걸어둔 조정 내용 변경 | 조정 항목 전체 변경 |
| 조정 취소 | 조정 항목 삭제 |
쿠폰과 구독
구독 신청 시점에 쿠폰을 적용할 수 있어요. 적용 결과 금액은 구독 쿠폰의 적용 미리보기로 확인해요. 단, 종량제는 쿠폰을 적용할 수 없고, 정기배송은 배송비 쿠폰이 제한돼요 — 정기구독에는 이 제약이 없어요.
관련 문서
- 요금제·회차 가격 설계 — 회차 가격표 기본
- 회차 금액 조정 — 운영 중 회차 금액 변경 API
플랜 변경
구독 중인 고객이 다른 구독 상품으로 갈아타는 기능이에요. 베이직 → 프로 업그레이드, 프로 → 베이직 다운그레이드를 해지·재가입 없이 처리해요. 계약은 그대로 유지되고 다음 결제 회차부터 새 상품의 가격·주기가 적용돼요.
현재 플랜 변경은 next_cycle 전략만 지원해요 — 신청·승인이 끝나도 이번 회차는 기존 금액으로 청구되고, 다음 회차부터 새 플랜이 반영돼요. 회차 중간의 일할 계산(proration)은 지원하지 않아요.
흐름
구매자가 신청해요
구매자는 부트페이가 호스팅하는 마이페이지에서 변경 가능한 플랜 후보를 보고 신청해요. 후보는 상품에 지정해 둔 플랜 변경 그룹(같은 그룹의 상품) 또는 변경 후보 상품 목록에서 골라져요.
신청이 접수돼요
플랜 변경 신청은 다른 구독 신청과 같은 신청 관리 목록에 유형 "플랜 변경"으로 쌓여요.
관리자가 승인해요
신청 관리 API로 신청을 조회하고 승인/거절해요. 승인하면 다음 회차 예약이 새 플랜 기준으로 갱신돼요.
웹훅으로 확인해요
변경 결과는 구독 웹훅으로 통지돼요. 업그레이드/다운그레이드 여부에 따라 서비스 권한을 조정해요.
관리자가 직접 바꿀 때
구매자 신청 없이 관리자가 계약 내용을 바로 바꿔야 한다면 계약 내용 변경을 사용해요. 금액·상품 구성을 직접 수정하는 API라서 플랜 변경 신청 흐름을 거치지 않아요. 이 경우 금액은 이미 잡혀 있는 결제예정 회차부터 바로 다시 계산돼요.
| 상황 | 방법 |
|---|---|
| 구매자가 스스로 갈아타게 | 마이페이지 플랜 변경 + 신청 관리로 승인 |
| 관리자가 CS로 직접 변경 | 계약 내용 변경 |
| 이번 회차만 금액 보정 | 회차 금액 조정 |
관련 문서
- 신청 관리 — 신청 목록·승인·거절 API
- 요금제·회차 가격 설계 — 갈아탈 플랜의 가격표 설계
디지털·이용권 연계
영상·강의·전자책 같은 콘텐츠(디지털) 상품에 구독을 붙이는 방법이에요. "디지털 구독"은 별도 구독 유형이 아니라 디지털 상품 + 정기구독의 조합이에요.
상품 유형이 콘텐츠(디지털)인 상품에는 구독 유형 중 정기구독만 선택할 수 있어요. 배송이 없으니 정기배송을, 실물이 없으니 렌탈·리스를 붙일 수 없기 때문이에요.
구조
두 축을 나눠서 설계해요.
상품(지급) 축
- 상품 유형: 콘텐츠(디지털)
- 지급 방식: 파일 / 링크 / 코드 / 수동
- 결제 성공 시 지급 실행
구독(권한) 축
- 정기구독 회차 가격표
- 회차 결제 성공 → 이용 기간 연장
- 해지·만료 → 권한 회수
지급 방식 4가지는 상품 등록 시 정해요.
| 지급 방식 | 동작 | 어울리는 상품 |
|---|---|---|
| 파일 | 결제 후 파일 다운로드 제공 | 전자책, 템플릿, 에셋 |
| 링크 | 결제 후 접근 링크 제공 | 강의 페이지, 비공개 콘텐츠 |
| 코드 | 코드 풀에서 1개 발급 | 라이선스 키, 쿠폰 코드 |
| 수동 | 가맹점이 직접 지급 처리 | 맞춤 콘텐츠, 수작업 개통 |
권한 회수 설계
디지털 구독의 핵심 판단은 해지 시점에 권한을 언제 끊느냐예요. 이미 소비한 콘텐츠는 회수할 수 없으니, 대부분의 콘텐츠 구독은 기간 만료형 해지(이번 결제 기간이 끝날 때까지 권한 유지)를 택해요.
가맹점 서버는 웹훅으로 권한을 제어해요.
| 이벤트 | 권장 처리 |
|---|---|
subscription.approved |
콘텐츠 접근 ON + 지급 실행 확인 |
| 회차 결제 성공 | 이용 기간을 다음 결제일까지 연장 |
subscription.paused |
정책에 따라 접근 유지 또는 차단 |
subscription.terminated · .admin_terminated |
기간 만료형이면 만료일에, 즉시형이면 바로 접근 OFF (고객 해지는 웹훅이 없으니 계약 상태로 확인 — 위 「알려진 문제」 참고) |
"영상 1회 이상 시청 시 환불 불가" 같은 사용 기준을 약관에 명시해야 체험 후 환불 어뷰징을 막을 수 있어요.
