구독 라이프사이클
trial, renewal, past due, cancellation, customer portal 운영 기준
핵심 요약
- 구독 운영의 기준은 결제 성공 여부가 아니라 구독 상태와 서비스 권한의 일관성이며, Paddle status를 내부 billing/entitlement state로 매핑한다.
- 구독 상품은
subscription.created/updatedsnapshot으로 권한을 계산하고, 일회성 상품은transaction.completed로 fulfillment한다. collection mode와 상품 정책을 섞지 않는다. - Paddle 자동 dunning은 저장 결제수단을 최대 30일 동안 최대 7회 재시도할 수 있으므로 제품 grace 정책을 이 기간과 명시적으로 조정한다.
- 한국 고객의 무료체험·도입 할인 종료는
subscription.consent_requirements와 내부 명시적 동의 증빙을 저장한다. 가격 인상·좌석 증액은 별도 동의 정책을 적용한다. - 해지(미래 갱신 차단)와 환불(과거 결제 취소)을 코드·CS에서 분리하고, 해지 경로를 숨기면 다크패턴 리스크가 생긴다.
SaaS 구독 운영의 기준은 결제 성공 여부가 아니라 구독 상태와 서비스 권한의 일관성입니다. Paddle은
subscription과 transaction을 별도 엔티티로 다루므로 권한을 부여할 때 두 흐름을 함께 읽어야 합니다.
핵심 상태
| 상태 | 의미 | 서비스 권한 |
|---|---|---|
| trialing | 무료 체험 중 | 체험 권한 부여 |
| active | 정상 결제/갱신 가능 | 유료 권한 유지 |
| past_due | 결제 실패 또는 수금 문제 | grace 정책에 따라 제한 |
| paused | 일시정지 | 신규 사용 제한 또는 읽기 전용 |
| canceled | 해지 완료 | 만료 시점 이후 권한 제거 |
Paddle 상태명과 내부 상태명을 1:1로 그대로 쓰기보다, 내부 제품 권한 상태를 별도로 둡니다.
Paddle status -> Billing state -> Entitlement state
active -> paid -> full_access
past_due -> recovery -> grace_access / limited_access
canceled -> ended -> no_paid_access신규 구독
구독 상품은 Paddle의 현재 provisioning 가이드에 따라 subscription.created와
subscription.updated snapshot으로 권한을 계산합니다. 무료체험에는 결제 완료 transaction이 없을 수 있으므로
모든 구독 권한을 transaction 성공에 종속시키면 안 됩니다. 일회성 상품은 transaction.completed를
fulfillment 기준으로 사용합니다. 수동 청구 구독은 계약에 따라 invoice 발행 시점 또는 입금 완료 시점을
별도 정책으로 정합니다.
| 이벤트 | 처리 |
|---|---|
subscription.created | subscription ID 저장, 고객/워크스페이스 연결, trialing/active 권한 계산 |
subscription.updated | status, item, next billing date 동기화 |
transaction.completed | 일회성 상품 fulfillment, 구독 결제의 재무·영수증 상태 연결 |
adjustment.created/updated | 환불·chargeback·reversal 상태와 권한·credit 조정 |
갱신 실패, dunning과 grace
결제 실패는 고객 이탈이 아니라 회수 기회입니다. 제품 권한을 즉시 끊으면 회수율이 떨어지고 CS가 늘어납니다.
Paddle의 기본 automatic dunning은 저장된 결제수단을 최대 30일 동안 최대 7회 재시도하고 회수되지 않으면 구독을 자동 취소할 수 있습니다. sandbox에서는 같은 retry가 실행되지 않습니다. 아래는 제품 정책의 예이며 Paddle 재시도 기간을 그대로 의미하지 않습니다.
| 기간 | 제품 정책 예시 | Paddle 상태와 확인 |
|---|---|---|
| D0 | 결제 실패 알림, 결제수단 업데이트 CTA | past_due, 첫 실패 transaction |
| D1~D7 | 앱 배너·이메일, 핵심 기능 유지 | Retain retry와 payment method update 추적 |
| D8~D29 | 읽기 전용·일부 기능 제한을 정책에 따라 적용 | 재시도 중인 구독을 임의 canceled로 바꾸지 않음 |
| D30 전후 | 최종 알림, 데이터 보존·복구 경로 안내 | Paddle 자동 취소 결과와 webhook 확인 |
실제 grace 기간은 Paddle 설정, 상품 정책, 고객 유형에 맞춰 조정합니다. D8 잠금을 택한다면 Paddle이
계속 재시도하는 동안 제품만 제한하는 자체 정책임을 약관·CS·상태 모델에 명시합니다. Enterprise나 연간
고객은 자동으로 잠그기보다 운영자 검수 큐를 거칩니다. collection_mode: manual 구독에는 Retain 자동
dunning이 적용되지 않으므로 invoice due date와 영업·재무 회수 절차를 사용합니다.
업그레이드와 다운그레이드
| 변경 | 권한 처리 | 재무 처리 |
|---|---|---|
| 월간 Pro → Team | 즉시 권한 확대 | proration 확인 |
| Team → Pro | 다음 갱신일부터 축소 권장 | 남은 기간 credit 여부 확인 |
| 월간 → 연간 | 성공 transaction 이후 연간 권한 | 할인/환불 정책 확인 |
| 좌석 수 변경 | 수량 기반 entitlement 재계산 | 다음 청구액 preview 확인 |
무료 체험·가격 변경 동의
웹서비스 운영을 위한 약관 가이드와 맞춰, 무료 체험 후 유료 전환이나 정기결제 금액 증액은 결제 이벤트만으로 처리하지 않습니다. 고객에게 전환 일시, 변경 전후 가격, 결제 방법, 해지/취소 방법을 먼저 고지하고 명시적 동의 이력을 저장합니다.
| 상황 | Paddle 처리 | 내부 증빙 |
|---|---|---|
| 한국 무료체험·도입 할인 종료 | consent_requirements의 pending/granted/voided | 전환 일시, 금액, 동의 버전·시각, reminder 로그 |
| 가격 인상 | price 변경 또는 subscription update | 변경 전후 가격, 적용일, 고객 동의/고지 이력 |
| 좌석 증액 | quantity update와 proration | 관리자 동의자, 시각, 변경 수량, 예상 청구액 |
| 해지 | Customer Portal 또는 내부 경로 | 해지 경로, 처리 시점, 만료일까지 권한 유지 여부 |
해지 경로가 가입·결제보다 과도하게 복잡하면 다크패턴 리스크가 생깁니다. Paddle Customer Portal을 쓰더라도 제품 내부에서 해지/결제관리 진입점을 명확히 제공하고 이동 사실과 처리 결과를 로그로 남깁니다.
한국 subscription의 consent_requirements가 pending이면 자동 갱신 가능 상태라고 가정하지 않습니다.
subscription.updated에서 상태 변화를 처리하고 granted_at 또는 voided_at을 내부 notice·terms
version과 연결합니다. 이 Paddle 필드는 무료체험·introductory discount 종료를 위한 것이므로 일반 가격
인상 동의를 대체하지 않습니다.
해지와 환불의 분리
해지는 미래 갱신을 막는 것이고 환불은 과거 결제를 취소하는 것입니다. 고객센터와 코드에서 두 개념을 분리해야 합니다.
| 요청 | Paddle 처리 | 내부 처리 |
|---|---|---|
| 다음 달부터 해지 | subscription cancellation | 만료일까지 권한 유지 |
| 즉시 해지 | cancellation + 권한 조정 | 데이터/환불 정책 안내 |
| 환불 | adjustment/refund | 권한 회수, credit 제거 |
| chargeback | dispute | 계정 위험 플래그, 증빙 제출 |
Customer Portal 운영
Paddle-hosted customer portal을 쓰면 결제수단 변경, 인보이스 다운로드, 구독 관리 UX를 빠르게 제공할 수
있습니다. 2026년 1월부터 portal 자체 cancellation flow도 제공합니다. 다만 제품 안에서 결제 관리
버튼을 누르면 Paddle로 이동한다는 안내를 함께 보여줘야 합니다. API의 management_urls에는 임시 portal
token이 포함되므로 DB나 로그에 장기 저장하지 말고 사용자 요청 시 생성·전달합니다. CS·감사에는 2026년
6월 추가된 subscription history를 함께 활용합니다.
운영 지표
| 지표 | 의미 |
|---|---|
| renewal success rate | 갱신 결제 성공률 |
| past due recovery rate | 결제 실패 회수율 |
| voluntary churn | 자발 해지 |
| involuntary churn | 결제 실패 이탈 |
| refund rate | 환불 비율 |
| chargeback rate | 분쟁 비율 |
참고 자료
- Paddle Developer - Subscription creation
- Paddle Developer - Handle provisioning and fulfillment
- Paddle Developer - Automatic dunning and payment recovery
- Paddle Developer - Manually-collected subscriptions past due
- Paddle Developer - Korean subscription consent requirements
- Paddle Developer - Customer portal
- Paddle Developer - Customer portal cancellation flows
- Paddle Developer - Subscription history
- 웹서비스 운영을 위한 약관 가이드 - 정기결제 증액·유료전환