결제 UX 설계
가격 페이지 베스트 프랙티스, 인디해커 친화 결제 플랫폼, 구독 관리 셀프서브
아무리 좋은 가격 전략도 결제 경험이 나쁘면 전환되지 않습니다. 이 장에서는 인디해커가 구현할 수 있는 결제 UX를 다룹니다.
가격 페이지 베스트 프랙티스
필수 요소
레이아웃 패턴
구조:
[Free] [Pro ⭐] [Business]장점: 시각적으로 명확, 업계 표준
적합: 3개 이하 플랜
구조:
기능 | Free | Pro | Business
---------|------|-----|----------
기능 A | ✓ | ✓ | ✓
기능 B | - | ✓ | ✓장점: 기능 비교 명확
적합: 기능 차이가 많은 경우
구조:
[----●----] 500 크레딧
월 $12장점: 사용량 기반 가격에 적합
적합: Usage-based 모델
흔한 실수 피하기
| 실수 | 해결 |
|---|---|
| 가격 숨기기 | 명확히 표시, "Contact Us"만 있으면 이탈 |
| 너무 많은 플랜 | 3개 이하로 제한 |
| 작은 글씨 조건 | 추가 비용은 눈에 띄게 |
| 복잡한 가격 계산 | 최종 금액 명시 |
| 느린 체크아웃 | 3클릭 이내 결제 완료 |
인디해커 친화 결제 플랫폼
플랫폼 비교
| 플랫폼 | 수수료 | MoR | 특징 |
|---|---|---|---|
| Stripe | 2.9% + $0.30 | ❌ | 최고의 유연성, 직접 세금 처리 |
| Stripe Managed Payments | ~7.9% + $0.30 | ✅ | 거래 단위 MoR, 글로벌 세금·분쟁 자동 처리 |
| Paddle | 5% + $0.50 | ✅ | 세금 자동 처리, 글로벌 친화 |
| LemonSqueezy | 5% + $0.50 | ✅ | 인디해커 친화, 쉬운 설정 |
| Gumroad | 10% | ✅ | 매우 쉬움, 높은 수수료 |
MoR (Merchant of Record)
MoR 플랫폼은 판매자 역할을 대행합니다. VAT, 판매세, 환불 처리 등을 플랫폼이 담당하여 인디해커의 부담을 줄여줍니다.
Stripe Managed Payments (2026년 신규)
Stripe가 거래 단위 MoR 서비스를 출시했습니다. 기존 Stripe를 쓰면서도 글로벌 판매세·부가세 자동 징수/납부, 분쟁·환불 대행이 가능합니다.
- 수수료: 기존 결제 수수료 + MoR 수수료 (합산 ~7.9% + $0.30)
- 장점: 기존 Stripe 연동 유지, 거래별 MoR 선택 가능, 200+ 국가 세금 자동 처리
- 단점: Paddle/LemonSqueezy 대비 수수료 높음, 풀 MoR 대비 일부 기능 제한
- 적합: 이미 Stripe를 쓰고 있고 글로벌 확장 시 세금 처리가 필요한 경우
선택 기준
Stripe 구현 팁
// 기본 구독 생성 (의사 코드)
const subscription = await stripe.subscriptions.create({
customer: customerId,
items: [{ price: 'price_pro_monthly' }],
payment_behavior: 'default_incomplete',
expand: ['latest_invoice.payment_intent'],
})필수 기능:
- 구독 생성/변경/취소
- 결제 실패 재시도
- 청구서/영수증 자동 발송
- 웹훅으로 상태 동기화
LemonSqueezy/Paddle 구현 팁
// 체크아웃 링크 생성 (의사 코드)
const checkoutUrl = `https://yourstore.lemonsqueezy.com/checkout/buy/${variantId}?checkout[email]=${email}`장점: 호스팅된 체크아웃 페이지로 빠른 구현
환불 정책 설계
환불 정책은 가격 페이지와 체크아웃 직전(결제 버튼 주변)에 모두 노출해야 분쟁이 줄어듭니다.
환불 정책에 반드시 포함할 항목
| 항목 | 권장 기준(예시) |
|---|---|
| 환불 가능 기간 | 월간 플랜 7 |
| 사용량 소진분 처리 | 소진분은 차감, 미사용분만 환불(크레딧/토큰 정책 명시) |
| 연간 플랜 중도 해지 | 일할 계산 또는 잔여 기간 서비스 크레딧 전환 중 하나로 고정 |
| 환불 처리 SLA | 요청 승인 후 영업일 3~7일 이내 처리 |
| 환율/세금/수수료 | 결제 통화와 환불 통화 차이, 세금 포함 여부를 명시 |
| 악용 방지 기준 | 반복 환불 계정, 과도한 사용 후 환불 요청에 대한 제한 규칙 |
| 지원 채널 | 환불 문의 전용 이메일/폼과 접수 번호 제공 |
실무 팁
환불 문구는 "환불 가능"만 쓰지 말고, 기간/조건/예외를 함께 써야 CS와 차지백이 줄어듭니다.
결제 방식별 리스크와 환불 전략
| 결제 방식 | 주요 리스크 | 권장 환불 전략 |
|---|---|---|
| 카드 정기결제 | 차지백, 도난 카드, 자동갱신 분쟁 | 선환불 + 구독 중지 + 증빙 로그 보관(사용 기록/동의 이력) |
| 계좌이체/가상계좌 | 입금자 불일치, 중복 입금, 환불 계좌 오류 | 실입금 검증 후 승인, 환불 계좌 본인 확인, 수동 검수 큐 운영 |
| MoR 플랫폼(Paddle 등) | 플랫폼 정책 우선, 정산 보류 가능성 | 플랫폼 정책에 맞춘 환불 기준 적용, 고위험 SKU 별도 정책 |
| 앱스토어 인앱결제(IAP) | 스토어 주도 환불, 권한 회수 지연 | 환불 웹훅 기반 권한 즉시 회수, 서버 측 영수증 검증 고정 |
| B2B 인보이스(후불 청구) | 미수금, 세금계산서 수정, 채권 회수 지연 | Credit Note 발행 + 차기 청구 상계, 연체 단계별 회수 정책 |
정산이 필요한 서비스 운영
마켓플레이스, 파트너 리셀, 크리에이터 수익배분처럼 제3자에게 돈을 나눠주는 구조는 결제와 별도로 정산 운영이 필요합니다.
정산 주기 사례(예시)
| 서비스 유형 | 흔한 정산 주기 | 운영 포인트 |
|---|---|---|
| SaaS 직판(카드 구독) | D+2 ~ D+7 입금 | 환불/차지백 예상분을 반영한 가용 현금 관리 |
| MoR 기반 글로벌 판매 | 주 1회 또는 2주 1회 | 플랫폼별 최소 지급액/보류 조건 확인 |
| 앱스토어(IAP) | 월 1회(통상 익월 정산) | 환불/취소분 반영 시차를 감안한 매출 인식 |
| B2B 인보이스 | 월 마감 + Net 30/45 | 청구-수금-세금계산서 상태를 한 흐름으로 관리 |
| 파트너/크리에이터 수익 배분형 | 주간 또는 월간(지급 보류 기간 포함) | 부정거래 대비 리저브(보류금) 정책 필수 |
정산 주기 주의
정산 주기와 수수료 정책은 플랫폼/국가/결제수단에 따라 수시로 바뀝니다. 운영 정책에는 "적용 기준일"을 함께 기록하세요.
정산 전략
- 컷오프 정의: 매출 확정일, 환불 반영일, 지급 실행일을 분리해 월/주 단위로 고정
- 리저브 운영: 환불/차지백 대비로 매출의 일정 비율(예: 5~15%)을 보류
- 정산 공식 고정:
정산 가능액 = 확정 매출 - 환불충당금 - 수수료 - 세금 - 리저브 - 대사 자동화: 주문, 결제, 환불, 정산 데이터를 일 단위로 자동 대사
- 예외 처리 큐: 미매칭 거래/중복 환불/환율 차이 건은 별도 큐로 분리
결제 실패 대응
구독 비즈니스에서 결제 실패는 주요 이탈 원인입니다.
결제 실패 원인
| 원인 | 비율 | 대응 |
|---|---|---|
| 카드 만료 | 40% | 사전 알림 |
| 잔액 부족 | 30% | 재시도 |
| 카드 분실/정지 | 20% | 카드 업데이트 요청 |
| 기술적 문제 | 10% | 재시도 |
던닝(Dunning) 플로우
던닝 이메일 템플릿
Day 1 - 알림:
제목: 결제가 처리되지 않았습니다
[이름]님,
[제품명] 구독 결제가 처리되지 않았습니다.
카드 정보를 확인해 주세요.
[카드 업데이트하기]
감사합니다.Day 7 - 최종 경고:
제목: 구독이 곧 일시정지됩니다
[이름]님,
결제 문제가 해결되지 않아
7일 후 구독이 일시정지됩니다.
데이터는 30일간 보관되며,
결제 정보 업데이트 시 복구됩니다.
[지금 해결하기]Stripe 던닝
Stripe는 Smart Retries와 이메일 자동화를 제공합니다. Billing > Customer Portal에서 설정하세요.
구독 관리 셀프서브
고객이 직접 구독을 관리할 수 있어야 합니다.
필수 셀프서브 기능
| 기능 | 중요도 | 구현 |
|---|---|---|
| 플랜 변경 (업/다운그레이드) | 필수 | 빌링 포털 |
| 결제 수단 변경 | 필수 | 빌링 포털 |
| 청구서 조회/다운로드 | 필수 | 자동 이메일 + 포털 |
| 구독 취소 | 필수 | 빌링 포털 |
| 구독 재개 | 권장 | 빌링 포털 |
Stripe Customer Portal
Stripe는 호스팅된 고객 포털을 제공합니다.
// 포털 세션 생성
const session = await stripe.billingPortal.sessions.create({
customer: customerId,
return_url: 'https://yourapp.com/account',
})
// redirect to session.url포털에서 가능한 것:
- 구독 변경/취소
- 결제 수단 관리
- 청구서 조회
- 청구 정보 수정
취소 플로우 설계
취소를 어렵게 만들면 안 되지만, 이탈 방지 기회로 활용할 수 있습니다.
다크 패턴 피하기
취소 버튼을 숨기거나, 전화로만 취소 가능하게 하는 것은 다크 패턴입니다. 고객 신뢰를 잃고, 일부 국가에서는 불법입니다.
결제 UX 체크리스트
가격 페이지
| 항목 | 확인 |
|---|---|
| 가격이 명확히 표시되는가? | ☐ |
| 월간/연간 토글이 있는가? | ☐ |
| 추천 플랜이 강조되는가? | ☐ |
| FAQ가 있는가? | ☐ |
| CTA가 명확한가? | ☐ |
체크아웃
| 항목 | 확인 |
|---|---|
| 3클릭 이내 결제 가능한가? | ☐ |
| 다양한 결제 수단 지원? | ☐ |
| 보안 배지가 있는가? | ☐ |
| 주문 요약이 표시되는가? | ☐ |
구독 관리
| 항목 | 확인 |
|---|---|
| 플랜 변경 셀프서브? | ☐ |
| 결제 수단 변경 셀프서브? | ☐ |
| 청구서 조회 가능? | ☐ |
| 취소가 쉬운가? | ☐ |
| 던닝 플로우가 설정되었는가? | ☐ |
핵심 요약
- 가격 페이지: 명확한 가격, 비교표, 강조된 CTA
- 결제 플랫폼: MoR (Paddle, LemonSqueezy)가 인디해커에게 편리
- 던닝 플로우로 결제 실패 이탈 방지 (자동 재시도 + 이메일)
- 셀프서브 구독 관리 필수 — Stripe Customer Portal 활용
- 취소는 쉽게, 단 이탈 방지 기회로 활용