monetization
CHAPTER 42 / 69
읽기 약 2분
FUNCTION
구독 결제 연동: 토스페이먼츠
핵심 개념
한국 시장 특화 결제 — 토스페이먼츠로 카드/계좌이체/간편결제를 한 번에.
본문
한국 PG사 비교
| PG | 수수료(체크/신용) | 정기결제 | 특징 |
|---|---|---|---|
| 토스페이먼츠 | 2.9% / 3.0% | ✅ | 직관적 API, 토스 간편결제 |
| 아임포트(포트원) | 2.9% / 2.9% | ✅ | 여러 PG 통합 |
| 나이스페이먼츠 | 2.5% / 2.7% | ✅ | 전통적 강자, 셋업 복잡 |
| 카카오페이 | 2.5% (다이렉트) | ✅ | 카카오 사용자 친화 |
→ 1인 SaaS는 토스페이먼츠가 가장 빠른 셋업.
토스페이먼츠 셋업
npm install @tosspayments/payment-sdk.env.local:
NEXT_PUBLIC_TOSS_CLIENT_KEY=test_ck_...
TOSS_SECRET_KEY=test_sk_...1. 결제 위젯 (클라이언트)
'use client';
import { loadTossPayments } from '@tosspayments/payment-sdk';
export function TossSubscribeButton({ amount, orderId, orderName }: {
amount: number;
orderId: string;
orderName: string;
}) {
const handlePay = async () => {
const tossPayments = await loadTossPayments(process.env.NEXT_PUBLIC_TOSS_CLIENT_KEY!);
await tossPayments.requestPayment('카드', {
amount,
orderId,
orderName,
successUrl: `${window.location.origin}/api/toss/success`,
failUrl: `${window.location.origin}/payment/fail`,
customerEmail: 'user@example.com',
// 정기결제(자동결제)는 빌링 키 발급 후 별도 처리
});
};
return <button onClick={handlePay}>{orderName} 결제</button>;
}2. 결제 승인 (서버)
// app/api/toss/success/route.ts
import { NextRequest, NextResponse } from 'next/server';
export async function GET(req: NextRequest) {
const url = new URL(req.url);
const paymentKey = url.searchParams.get('paymentKey')!;
const orderId = url.searchParams.get('orderId')!;
const amount = url.searchParams.get('amount')!;
// 토스 서버에 승인 요청
const res = await fetch('https://api.tosspayments.com/v1/payments/confirm', {
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(process.env.TOSS_SECRET_KEY + ':').toString('base64')}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ paymentKey, orderId, amount: Number(amount) }),
});
const payment = await res.json();
if (!res.ok) {
return NextResponse.redirect(new URL('/payment/fail', req.url));
}
// DB에 결제 기록 저장
await savePayment({
userId: payment.metadata?.userId,
paymentKey,
orderId,
amount: payment.totalAmount,
method: payment.method, // '카드', '가상계좌' 등
status: payment.status,
});
return NextResponse.redirect(new URL('/dashboard?paid=true', req.url));
}3. 정기결제 — 빌링 키
// 1) 빌링 키 발급 (사용자 카드 등록)
// 클라이언트에서 tossPayments.requestBillingAuth('카드', { ... })
// 2) 빌링 키로 매월 자동 결제 (서버 Cron)
async function chargeMonthlySubscription(userId: string) {
const user = await getUser(userId); // billingKey 조회
const res = await fetch(`https://api.tosspayments.com/v1/billing/${user.billingKey}`, {
method: 'POST',
headers: {
'Authorization': `Basic ${Buffer.from(process.env.TOSS_SECRET_KEY + ':').toString('base64')}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
amount: user.subscriptionAmount,
orderId: `sub_${userId}_${Date.now()}`,
orderName: 'Pro 월간 구독',
customerKey: userId,
}),
});
return res.json();
}4. 결제 수단별 UX 분기
| 수단 | 즉시 승인 | 환불 |
|---|---|---|
| 카드 | ✅ 즉시 | 7일 내 |
| 가상계좌 | ❌ 입금 대기 | 환불 가능 |
| 계좌이체 | ✅ 즉시 | 즉시 |
| 휴대폰 결제 | ✅ 즉시 | 다음 달 정산 |
가상계좌는 결제 완료 웹훅(DEPOSIT_CALLBACK)을 별도 처리해야 합니다.
⚠️ 한국 결제 법적 의무
- 사업자번호 + 통신판매업 신고 필수
- 결제 후 영수증/세금계산서 발행 (홈택스 또는 PG사 기능)
- 환불 정책 명시 (7일 이내, 디지털 상품 특례)
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 토스페이먼츠 통합 코드에서 금액 검증·웹훅 처리·환불 로직을 프로덕션 수준으로 점검해줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
토스페이먼츠 vs 아임포트(포트원) vs 나이스페이먼츠 실제 셋업 시간·수수료·기능을 1인 개발자 관점 비교표로 보여줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 결제 데이터를 분석해서 결제 수단별 성공률·환불율·재결제율을 종합 리포트로 만들어줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 PG 시장 트렌드 — 토스페이먼츠 점유율 확대와 카카오페이 직접 결제 등 1인 개발자가 알아야 할 변화를 솔직히 알려줘.
⭐ 이것만 기억하세요
구독 결제 연동: 토스페이먼츠는 이 3가지만 확실히 잡으세요
1.한국 1인 SaaS는 토스페이먼츠가 빠른 셋업과 직관적 API로 가장 효율적이다
2.빌링 키 발급으로 자동결제(정기 구독)을 안전하게 구현할 수 있다
3.다음 챕터에서 SaaS 가격 전략 — 비용/가치/경쟁 기반 모델을 다룬다
공유하기
진행도 42 / 69