OPEN HYPER STEP
← 목록으로 (수익화)
MONETIZATION · 42 / 69
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는 토스페이먼츠가 가장 빠른 셋업.

토스페이먼츠 셋업

BASH📋 코드 (1줄)
npm install @tosspayments/payment-sdk

.env.local:

📋 코드 (2줄)
NEXT_PUBLIC_TOSS_CLIENT_KEY=test_ck_...
TOSS_SECRET_KEY=test_sk_...

1. 결제 위젯 (클라이언트)

TYPESCRIPT📋 코드 (24줄)
'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. 결제 승인 (서버)

TYPESCRIPT📋 코드 (36줄)
// 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. 정기결제 — 빌링 키

TYPESCRIPT📋 코드 (23줄)
// 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