Paddle 결제 연동 실전 — 샌드박스 E2E까지 해본 경험 그대로

샌드박스에서 가짜 돈으로 전체 흐름을 끝까지 검증하는 결제 연동 실전.

강의 커버

AI KOREA 24 무료 강의 05 · 초보자용 · 준비물 0원

2026-10-02~03 샌드박스 E2E 완료. 테스트 결제로 끝까지 검증한 기록입니다.

이 강의에서 배우는 것

  1. Paddle 샌드박스에서 상품·가격을 만듭니다.
  2. 체크아웃을 연동하고 테스트 결제를 돌립니다.
  3. 웹훅으로 결제 완료를 받아 서버에 반영합니다.

준비물

  • Paddle 계정 (샌드박스 모드, 무료)
  • 테스트용 웹사이트 1개 (로컬호스트도 가능)
  • 비용 0원 — 샌드박스에서는 실제 돈이 오가지 않습니다.

왜 이걸 배우나요

"결제 붙이기"는 서비스의 성인식입니다. 그런데 처음부터 실결제로 테스트할 수는 없습니다. Paddle의 샌드박스는 가짜 돈으로 진짜 흐름 전체를 돌려볼 수 있는 환경입니다. 이걸 끝까지 돌려보지 않고 라이브로 가면, 첫 실결제에서 터집니다.

1. 샌드박스 이해하기

Paddle에는 두 개의 세계가 있습니다.

| 환경 | 용도 | 돈 |

|---|---|---|

| Sandbox | 개발·테스트 | 가짜 (테스트 카드) |

| Live | 실제 서비스 | 진짜 |

환경을 가르는 건 환경변수 하나입니다. PADDLE_ENVIRONMENT=sandbox. 이 값이 코드에 박혀 있으면 실수로 실결제가 나갈 일이 없습니다. 실전에서도 샌드박스 검증을 마칠 때까지 이 값을 유지했습니다.

실습: Paddle 대시보드에서 Sandbox 모드로 전환하고, 테스트 상품 하나를 만들어보세요. 이름은 "테스트 상품", 가격은 1,000원으로 합니다.

2. 체크아웃 연동

상품에 가격(Price)을 만들면 결제 링크 또는 임베드 체크아웃을 붙일 수 있습니다. 흐름은 단순합니다.

사용자가 "구매" 클릭 → Paddle 체크아웃 열림 → 테스트 카드로 결제 → 성공

테스트 카드 번호는 Paddle 문서에 공개된 번호를 씁니다 (예: 4242 4242 4242 4242). 진짜 카드 번호를 쓰면 안 됩니다.

중요한 실전 교훈: 가격 ID가 비어 있는 상품의 구매 버튼을 노출하지 마세요. 실전에서 Agency 플랜의 price ID가 비어 있어서, 클릭하면 결제가 실패하는 버튼이 될 뻔했습니다. 결국 해당 플랜 카드를 화면에서 숨기는 것으로 막았습니다. "결제될 수 없는 버튼은 보여주지 않는다"가 원칙입니다.

실습: 테스트 상품의 체크아웃을 열고 테스트 카드로 결제까지 해보세요.

3. 웹훅 — "결제됐어요"를 서버가 듣는 법

체크아웃에서 결제가 끝나면, Paddle이 여러분 서버의 웹훅 URL로 "결제 완료" 신호를 보냅니다. 이 신호를 받아서 DB에 "이 사용자 유료 전환"을 기록해야 결제가 완성됩니다.

웹훅 처리의 실전 체크리스트:

  • [ ] 서명 검증: 신호가 진짜 Paddle에서 온 건지 서명으로 확인합니다. 이걸 빼먹으면 누구나 "결제됐어요"라고 속일 수 있습니다.
  • [ ] 중복 방지: 같은 결제 신호가 두 번 올 수 있습니다. 거래 ID(paddle_transaction_id)를 저장해두고 중복은 무시합니다. 실전에서는 이 처리가 빠져 있어 잔존 리스크로 기록됐습니다.
  • [ ] 이벤트 종류 구분: 결제 성공뿐 아니라 expired(만료), updated(변경) 같은 이벤트도 옵니다. 테스트해 보지 않은 이벤트는 라이브에서 처음 만납니다.

4. E2E 시나리오 — 끝까지 돌려보기

2026-10-02~03에 실제로 돌린 E2E(End-to-End) 시나리오입니다.

  1. 상품 페이지 접속 → 구매 클릭
  2. 체크아웃에서 테스트 카드 결제
  3. 웹훅 수신 → DB에 유료 상태 기록 확인
  4. 유료 전용 페이지 접근 가능 확인

이 4단계를 자동이 아니라 손으로 한 번은 끝까지 해봅니다. 손으로 해보면서 "아, 여기서 막히네"를 찾는 게 목적입니다.

흔한 실수 Top 3

  1. sandbox/live 키 혼용 — 테스트 키로 실결제창을 열거나 그 반대. 환경변수로 분리합니다.
  2. 웹훅 서명 미검증 — 가짜 결제 신호에 유료를 열어주는 최악의 경우.
  3. 결제 안 되는 버튼 노출 — price ID가 비어 있으면 버튼을 숨깁니다.

정리

  • 샌드박스에서 가짜 돈으로 전체 흐름을 검증합니다
  • PADDLE_ENVIRONMENT로 환경 분리, 결제 불가 버튼은 노출 금지
  • 웹훅은 서명 검증 + 거래 ID 중복 방지가 생명
  • E2E는 손으로 한 번 끝까지 돌려봅니다

다음 강의에서는 서비스의 집, Cloudflare 무료 티어로 D1·Workers·Pages를 운영합니다. 월 0원으로 버티는 실측 기록 그대로입니다.

---

*AI KOREA 24 무료 강의 · Operated by 스타일팩토리9*