결제수동 검토 가이드확인일 2026-07-07

결제는 됐는데 권한이 안 열리거나 두 번 청구될 때

결제 성공 화면만 보고 권한을 열었다가, 웹훅·환불·중복 클릭에서 사고가 나는 상황을 막습니다.

한 줄 결론

결제는 PG·세금·환불·약관·테스트 모드가 한 번에 맞아야 하며, 샌드박스에서 끝까지 한 번 돌려 본 뒤에만 실결제를 켭니다.

아래 내용은 초보 바이브코더를 위한 일반 안내입니다. 서비스·지역·약관에 따라 달라질 수 있으며, 실제 사업화·운영 전에는 해당 분야 전문가 확인이 필요합니다.

먼저 용어부터 — 그다음 실행 프롬프트

webhook
결제사가 우리 서버로 ‘결제됐다’고 보내는 알림
test mode
가짜 카드로 돈 안 나가게 테스트하는 모드
  • Webhook

    이건 webhook입니다

    결제사·외부 서비스가 ‘이벤트 생겼어’라고 우리 서버에 보내는 알림 URL입니다.

    • 테스트 모드와 라이브 키를 섞지 않습니다
    • 서명(signing secret)으로 위조 요청을 거릅니다
    • 같은 알림이 두 번 와도 한 번만 처리합니다

    이런 곳에 · Stripe/토스 결제 · 자동화 알림 · /ai/guides 결제 가이드

    지금 할 일 · 테스트 webhook URL 등록 → 테스트 결제 1회 → 로그에 이벤트 확인

    비용·주의 · 테스트는 무료. 라이브 키로 실결제·수수료 주의.

    AI 프롬프트 보기
    Stripe(또는 토스) webhook 테스트. test key, signing secret, idempotent 처리, 실패 시 재시도 주의.
  • API Key

    이건 API Key입니다

    AI 서비스에 ‘나’라고 증명하는 비밀번호 문자열입니다. 브라우저·GitHub에 올리면 남의 과금이 됩니다.

    • 서버 환경 변수에만 저장합니다
    • NEXT_PUBLIC_ 접두사에 키를 넣지 않습니다
    • 유출되면 즉시 rotate(재발급)합니다

    이런 곳에 · OpenAI·DeepSeek·Gemini·Anthropic 모든 API 호출

    지금 할 일 · .env.local에 KEY=... → .gitignore 확인 → 서버 route에서만 읽기

    비용·주의 · 키 유출 = 타인 사용량 과금. 한도·알림을 먼저 켭니다.

    AI 프롬프트 보기
    Next.js에서 API Key가 클라이언트 번들에 안 나가게 점검. .env 규칙, git grep 패턴, rotate 순서.

바로 실행 — AI 프롬프트

Stripe(또는 토스) 결제 전 webhook 테스트 흐름. test key·webhook URL·로컬 stripe listen·성공/실패 이벤트 처리 순서.

막히면 다시 넣을 프롬프트

결제 webhook 400. payload: [요약], signing secret 위치: [   ]. idempotent 처리 여부.

럭키스팟 해석은 원출처를 바탕으로 한 실전 안내입니다. 요금·약관·라이선스는 제공자 페이지 최신 조건을 결제·배포 전에 대조하세요. 실제 사업화 전에는 해당 분야 전문가 확인이 필요할 수 있습니다.

초보자 한 줄 설명

결제가 끝났다는 신호는 브라우저가 아니라 PG→내 서버 웹훅으로 오는 경우가 많습니다. 그걸 검증하지 않으면 돈은 받았는데 권한은 안 열립니다.

먼저 AI 에이전트에게 붙여넣을 프롬프트

Stripe(또는 [PG]) 샌드박스로 결제+웹훅을 붙이고 싶다. 스택: Next.js.
1) checkout 또는 payment intent 최소 흐름
2) webhook 서명 검증 필수 이유
3) idempotency key/unique constraint 예시 설명
4) 환불 테스트 순서
5) live 전환 체크리스트 8항
코드는 파일별 최소, 실패 케이스 표 포함.

AI가 해줄 수 있는 일

  • 결제 시작·완료 처리 코드·DB 주문 상태 흐름
  • 외부 PG가 우리 서버에 알려주는 주소(webhook) 검증 코드
  • 중복 결제 막는 idempotency 설명·샘플

사람이 직접 해야 하는 외부 설정

  • PG 개발자센터에서 샌드박스 키·webhook URL 등록
  • ngrok 등으로 로컬 webhook 공개 URL 만들기(테스트 시)
  • 샌드박스에서 성공·실패·환불 각각 직접 결제 테스트

외부 설정 경로

  • Stripe → Developers → API keys / Webhooks
  • Toss Payments → 개발자센터 → API 키 / Webhook
  • Vercel → Project → Settings → Environment Variables

제대로 됐는지 확인하는 방법

  • 샌드박스 결제 후 DB에 paid 반영되는지
  • 같은 결제 ID 두 번 webhook 와도 한 번만 반영되는지
  • 환불 테스트 후 사용자 권한이 회수되는지

실행 순서

  1. 1샌드박스 결제 성공
  2. 2웹훅 수신·서명 검증
  3. 3DB 상태 전이
  4. 4실패·환불 시나리오
  5. 5live 키·약관 링크 확인

막히면 다시 AI에게 줄 프롬프트

결제는 됐는데 [웹훅 401 / DB 미반영 / 중복 paid].
PG: [Stripe/Toss/...], webhook 로그: [붙여넣기], DB 상태: [   ].
서명 검증·raw body·unique payment_id 순서.

막히는 지점

  • 웹훅 서명 검증 누락
  • 같은 결제 두 번 반영
  • 환불 UI 없음
  • 프론트 금액만 신뢰

비용·보안·저작권·약관 주의

  • 카드 정보 자체 저장 금지
  • 전자상거래·통신판매 요건은 사업 형태별 전문가 확인
  • 실결제 전환 시 키 혼선·중복 과금. 수수료·환불 정책은 PG·약관 확인.

대안 도구

Lemon Squeezy · Paddle · 국내 PG

럭키스팟 판단

샌드박스에서 성공·실패·환불·중복 클릭 네 가지를 끝까지 돌려 본 뒤 live를 켜세요.

이런 사람이 보면 좋음

  • 유료 구독·일회성 결제를 처음 넣는 바이브코더
  • 테스트는 됐는데 실결제 전에 막막한 사람
  • 환불·취소·웹훅 실패를 아직 안 해 본 사람

초보자가 보통 착각하는 지점

  • 테스트 카드로 성공하면 실서비스도 같은 코드로 바로 된다고 봅니다. 웹훅·세금·영수증은 별도입니다.
  • 결제 금액을 프론트에서만 계산하고, 서버에서 최종 금액을 다시 검증하지 않습니다.
  • 환불·구독 해지 UI 없이 결제만 먼저 붙입니다.
  • 사업자 등록·통신판매·전자금융 요건을 나중에 채우면 된다고 미룹니다.

실제 점검 체크리스트

  • Toss Payments → 개발자센터 → API 키 / Webhook 또는 Stripe → Developers → Webhooks에서 샌드박스 테스트를 각각 돌렸는지 확인합니다.
  • 최종 결제 금액·상품 ID를 서버에서 검증하고, 화면이 보낸 가격만 믿지 않습니다.
  • 외부 PG가 우리 서버에 보내는 알림(webhook) 서명 검증·중복 결제 방지 처리를 넣었는지 확인합니다.
  • 구독이면 갱신·실패·해지 흐름을 문서화했는지 확인합니다.
  • 이용약관·환불 정책 링크를 결제 전에 보여 줍니다.
  • 실결제 전환 시 API 키·webhook URL을 live 모드로 바꿨는지 체크리스트로 확인합니다.

실패했을 때 보는 순서

  1. 1PG 대시보드에서 결제 상태(pending·paid·failed)와 웹훅 전달 로그를 봅니다.
  2. 2웹훅이 401·타임아웃·잘못된 서명으로 거절되지 않는지 확인합니다.
  3. 3DB에 주문 상태와 PG 상태가 어긋난 건을 찾아 수동 대조합니다.
  4. 4중복 결제 건은 idempotency key·unique constraint로 막았는지 확인합니다.
  5. 5환불 API를 샌드박스에서 다시 호출해 잔액·구독 상태가 맞는지 봅니다.
  6. 6사업자·약관 미비로 막히는 항목은 전문가 상담 일정을 잡습니다.

배포 전 확인 항목

  • live 키는 환경 변수에만 있고, 테스트 키와 섞이지 않았습니다.
  • 결제 완료 후 사용자에게 보이는 상태(이메일·마이페이지)가 맞습니다.
  • 에러 시 카드 정보가 로그에 남지 않습니다.
  • 약관·환불 정책 URL이 실제 접근 가능합니다.
  • 결제·개인정보·전자상거래 관련 법규는 국가·사업 형태마다 다릅니다. 본 가이드는 일반 정보이며, 실제 사업화 전 변호사·세무사·PG 심사 요건을 확인하세요.
  • 카드 번호·CVV를 자체 서버에 저장하지 마세요. PCI 범위를 최소화하세요.
  • 미성년자·금융·의료 등 규제 업종은 별도 제한이 있을 수 있습니다.
  • 허위 할인·가격 표시는 표시광고·전자상거래 규정 위반 소지가 있을 수 있습니다.
결제PG환불웹훅구독