결제 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 활용
- 취소는 쉽게, 단 이탈 방지 기회로 활용