본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
한국 사업자의 글로벌 결제

선택·계약

서비스 선택 기준국내 PG와 MoR 비교판매·계약 구조계약·DPA 검토스토어 개설·승인

결제·구독 구현

상품·가격·세금한국 Checkout한국 Checkout QA구독 라이프사이클웹훅·권한 동기화웹훅 구현 부록

정산·세무

정산·월마감정산 원장 템플릿한국 세무·회계개인사업자와 법인세무·법무 검토 자료

고객 운영

약관·소비자·개인정보한국 B2B 청구CS·환불·분쟁

사례·이전·검증

사례·운영 체크리스트Paddle→Lemon Squeezy 이전공식 자료 검증 리포트업데이트 내역
핸드북›한국 사업자의 글로벌 결제›구독 라이프사이클

구독 라이프사이클

두 플랫폼의 trial·갱신 실패·변경·취소·고객 포털과 앱 권한을 비교한다.

이 장은 두 서비스를 같은 주제에서 비교한 뒤 두 공급자의 상세 설명을 모두 담습니다. 기능 노출·계약 요율·국가별 결제수단은 계정과 시점에 따라 달라질 수 있으므로 실제 스토어와 각 절의 공식 출처를 확인하세요.

주제별 비교

비교 항목PaddleLemon Squeezy
판매 단위Price와 subscription 상태·management URL을 연결한다.Variant와 subscription 상태·서명된 portal URL을 연결한다.
실패 복구Paddle dunning 설정과 past_due 등 상태를 확인한다.자동 재시도와 past_due·unpaid, 스토어 dunning을 확인한다.
권한검증한 웹훅과 최신 API 상태로 재계산한다.검증한 웹훅과 최신 API 상태로 재계산한다.

Paddle 상세

핵심 요약

  • 구독 운영의 기준은 결제 성공 여부가 아니라 구독 상태와 서비스 권한의 일관성이며, Paddle status를 내부 billing/entitlement state로 매핑한다.
  • 구독 상품은 subscription.created/updated snapshot으로 권한을 계산하고, 일회성 상품은 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.createdsubscription ID 저장, 고객/워크스페이스 연결, trialing/active 권한 계산
subscription.updatedstatus, 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결제 실패 알림, 결제수단 업데이트 CTApast_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 제거
chargebackdispute계정 위험 플래그, 증빙 제출

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
  • 웹서비스 운영을 위한 약관 가이드 - 정기결제 증액·유료전환

Lemon Squeezy 상세

핵심 요약

  • 공식 구독 상태는 on_trial, active, paused, past_due, unpaid, cancelled, expired를 구분한다.
  • 취소 요청, 유료 기간 만료, 환불은 서로 다른 사건이다.
  • 갱신 실패 후 앱의 grace 정책은 자체적으로 정하고 API snapshot과 정기 대사로 맞춘다.
  • Customer Portal의 서명 URL은 오래 보관하지 말고 접근 시 새로 가져온다.

상태와 제품 권한

Lemon Squeezy 상태앱의 기본 처리 예시확인할 날짜
on_trialtrial 권한trial_ends_at
active유료 권한renews_at, ends_at
pausedpause mode와 자사 약속에 따라 유지 또는 제한재개 예정·실제 상태
past_due재시도 기간의 권한 유지 여부를 명시재시도·고객 안내
unpaid제한·수동 지원 여부를 명시미결제 원인·dunning 종료 시점
cancelledends_at까지 접근 여부 검토예정 만료일
expired유료 권한 종료실제 만료일

이 표는 앱 정책 예시입니다. Subscription object의 상태·날짜와 실제 checkout 약속을 함께 확인합니다. 결제 성공 redirect만 보고 권한을 열지 않습니다.

문서 간 표현도 확인해야 합니다. Subscriptions는 expired를 제외한 상태의 접근 유지를 권고하지만, Recovery and dunning은 최종 재시도 실패로 unpaid가 되면 콘텐츠 접근이 중단된다고 설명합니다. 앱이 제공하는 SaaS 권한은 제품 약관·grace 정책으로 명시적으로 결정하고, unpaid에서 무엇을 제한하는지 고객에게 사전에 알립니다. paused도 pause의 free/void 모드와 제공 약속을 맞춥니다.

가입부터 갱신까지

  1. checkout의 custom 데이터에 내부 workspace 식별자를 넣습니다.
  2. 서명 검증한 subscription_created/order_created 이벤트를 저장합니다.
  3. API에서 구독·주문을 조회하여 variant, 상태, 고객, 날짜를 내부 원장에 반영합니다.
  4. subscription_payment_success, subscription_payment_failed, subscription_payment_recovered 등을 재처리 가능하게 기록합니다.
  5. 일일 reconcile로 webhook 유실·순서 역전을 보정합니다.

Recovery and dunning 자동화 설정과 앱의 자체 이메일이 중복되지 않게 조정합니다. 고객에게 실제 재시도 일정·권한 제한 시점을 안내합니다.

갱신 실패와 복구

공식 recovery 안내는 카드 갱신 실패 후 약 2주 동안 네 차례 재시도, 실패 때 고객 이메일, 최종 실패 후 unpaid 및 선택적 dunning을 설명합니다. PayPal 구독은 별도 재시도 흐름을 따르므로 카드와 같은 날짜를 하드코딩하지 않습니다. 스토어의 Recovery 설정, 결제수단, 실제 API 날짜를 확인해 앱 알림 일정을 잡습니다.

관찰한 사건앱 동작복구 확인
subscription_payment_failed, past_due결제수단 변경 경로 안내, 정책상 접근 기간 표시최신 구독 조회와 재시도 결과
subscription_payment_recovered, active연체 배너 제거, 권한·청구 기록 갱신성공 주문과 구독 상태 연결
unpaid사전 고지한 제한 적용, 지원·dunning 경로 제공재활성화 또는 최종 종료
expired유료 권한 종료, 데이터 보관·복구 정책 적용API 상태와 내부 권한 일치

웹훅이 순서대로 도착한다고 가정하지 않습니다. 각 사건의 수신 시각과 원본을 보존하되, 권한을 바꿀 때 최신 구독 snapshot을 조회합니다. 결제 실패 뒤 성공 이벤트가 늦게 도착해도 오래된 실패 상태로 덮어쓰지 않는 테스트를 둡니다.

플랜 변경과 취소

Update a subscription으로 variant·quantity 등을 바꿀 때 비례청구와 변경 시점을 preview·테스트합니다. 내부 plan_key를 요청 즉시 확정하지 말고 API 결과와 webhook으로 확정합니다. 해지 요청과 환불 요청은 별개 workflow로 두고, 예약 해지 후 접근 가능 기간을 명확히 표시합니다.

가격표에서 variant 가격을 고쳐도 기존 구독 가격은 자동 변경되지 않습니다. Subscriptions는 기존 고객의 가격을 바꾸려면 구독 플랜 변경이 필요하다고 설명합니다. 업그레이드·다운그레이드에서는 invoice_immediately, disable_prorations 선택에 따라 즉시 청구와 비례청구가 달라지므로, 변경 전후 variant, 갱신일, 고객 청구액, 앱 권한 적용일을 한 티켓으로 검증합니다.

요청검증할 결과
월간 → 연간 또는 상위 플랜추가 청구 여부, 비례청구, 다음 갱신일, 권한 상향 시점
하위 플랜환급·크레딧 여부, 기존 기능 종료 시점, 저장 데이터 처리
취소 후 재개ends_at 해제 여부, 기존 구독 재사용, 중복 구독 방지
환불원주문과 별도 승인, 구독의 갱신 중단·권한 정책

Customer Portal

공식 Customer Portal 개발 가이드는 subscription 객체의 서명된 관리 URL이 24시간 유효하다고 설명합니다. 고객이 ‘결제 관리’를 누를 때 API에서 최신 URL을 받아 이동시키고, 링크 만료·본인 확인 실패 시 customer portal의 이메일 접근 경로를 안내합니다. 다른 사용자의 URL을 로그·분석 이벤트에 남기지 않습니다.

운영 지표

  • 갱신 성공률과 past_due 체류 시간
  • portal 진입→해지 완료율, 취소 요청→expired 지연
  • 앱 권한과 API 상태 불일치 건수
  • 환불 후 권한 정리 지연과 CS 재문의율

공식 출처

  • Subscriptions
  • Subscription object
  • Update subscription
  • Managing subscriptions
  • Recovery and dunning
  • Customer Portal
  • Event types

관련 문서

약관·소비자·개인정보

Paddle와 Lemon Squeezy의 구매자 조건·환불·데이터 역할을 각각 한국 SaaS 고지에 반영한다.

웹훅·권한 동기화

서로 다른 서명·이벤트·메타데이터를 동일한 멱등 권한 모델에 연결한다. 실제 운영 기준과 검증 항목을 함께 제공한다.

결제 UX 설계

SaaS 유료 플랜 설계 · 가격 페이지 베스트 프랙티스, 인디해커 친화 결제 플랫폼, 구독 관리 셀프서브

구독·결제 운영

Android 앱 엔터프라이즈 운영 · grace period, account hold, offers, 가격 변경을 운영하는 기준

수익화 포트폴리오

Android 앱 엔터프라이즈 운영 · one-time product, subscription, base plan, offer 조합을 운영 관점에서 설계하는 기준

On this page

주제별 비교Paddle 상세핵심 상태신규 구독갱신 실패, dunning과 grace업그레이드와 다운그레이드무료 체험·가격 변경 동의해지와 환불의 분리Customer Portal 운영운영 지표참고 자료Lemon Squeezy 상세상태와 제품 권한가입부터 갱신까지갱신 실패와 복구플랜 변경과 취소Customer Portal운영 지표공식 출처