메인 콘텐츠로 건너뛰기

GitHub Repository

전체 소스 코드 및 설정 가이드
Supabase용 완전한 스타터 키트 확인
Next.js, Supabase 및 Dodo Payments로 구축된 최소한의 구독 스타터 키트입니다. 이 보일러플레이트는 인증, 결제 및 웹훅을 갖춘 구독 기반 SaaS를 빠르게 설정할 수 있게 도와줍니다.
Dodo Payments Supabase Subscription Starter

빠른 설정

1. 전제 조건

2. 인증 및 연결

Supabase 대시보드에서 프로젝트 참조를 가져옵니다 → 프로젝트 설정

3. 데이터베이스 설정

  1. Supabase 대시보드로 이동합니다.
  2. SQL 편집기를 엽니다.
  3. 새 쿼리를 생성합니다.
  4. schema.sql의 전체 내용을 복사하여 붙여넣습니다.
  5. 쿼리를 실행합니다.

4. 초기 비밀 설정

Supabase는 런타임에 SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY를 자동으로 제공합니다.
참고: 웹훅 URL을 확보한 후 배포한 다음 DODO_PAYMENTS_WEBHOOK_KEY를 설정합니다.

5. 배포

해당 함수는 이미 functions/webhook/index.ts에 설정되어 있으므로 배포만 하면 됩니다:

6. 웹훅 URL 가져오기

당신의 웹훅 URL은 다음과 같습니다:

7. DodoPayments 대시보드에 웹훅 등록

  1. DodoPayments 대시보드 → Developer → Webhooks로 이동합니다.
  2. 새 웹훅 엔드포인트를 생성합니다.
  3. 엔드포인트로 웹훅 URL을 구성합니다.
  4. 다음 구독 이벤트를 활성화합니다:
    • subscription.active
    • subscription.cancelled
    • subscription.renewed
  5. Signing Secret을 복사합니다.

8. 웹훅 키 설정 및 재배포

기능

구독 이벤트를 처리하고 Supabase PostgreSQL에 저장합니다:
  • subscription.active - 고객 및 구독 기록 생성/업데이트
  • subscription.cancelled - 구독을 취소로 표시
  • subscription.renewed - 다음 청구 날짜 업데이트

주요 기능

서명 검증 - dodopayments 라이브러리 사용
멱등성 - 웹훅 ID로 중복 처리 방지
이벤트 로그 - webhook_events 테이블에 전체 감사 기록
오류 처리 - 기록되고 재시도 가능
참고: 이 구현은 세 가지 핵심 구독 이벤트 (subscription.active, subscription.cancelled, subscription.renewed)를 최소한의 필드로 처리하는 예시입니다. 필요에 따라 추가 이벤트 유형과 필드를 쉽게 확장할 수 있습니다.

구성 파일

데이터베이스 스키마

생성된 테이블:
  • customers - 이메일, 이름, dodo_customer_id
  • subscriptions - 상태, 금액, 다음 청구 날짜, 고객에 연결됨
  • webhook_events - 멱등성을 위한 webhook_id가 포함된 이벤트 로그

구현 코드

작동 방식

Deno 기반 엣지 함수:
  1. 서명을 검증 - HMAC-SHA256 검증을 위해 dodopayments 라이브러리를 사용
  2. 멱등성을 확인 - 중복 처리를 방지하기 위해 웹훅 ID를 조회
  3. 이벤트를 기록 - 원시 웹훅 데이터를 webhook_events 테이블에 저장
  4. 업데이트 처리 - Supabase 클라이언트를 통해 고객 및 구독을 생성하거나 업데이트
  5. 오류 처리 - 실패를 기록하고 이벤트를 재시도 대상으로 표시

테스트

로컬 개발:
웹훅에는 JWT 토큰이 포함되지 않기 때문에 --no-verify-jwt 플래그가 필요합니다. 보안은 웹훅 서명 검증으로 제공됩니다.
로그 보기:
또는 Supabase 대시보드 → Edge Functions → webhook → 로그 탭에서 확인하세요. DodoPayments 대시보드에서 구성:
  1. 개발자 → 웹훅으로 이동합니다.
  2. Supabase URL로 엔드포인트를 추가합니다.
  3. 활성화: subscription.active, subscription.cancelled, subscription.renewed

일반적인 문제

리소스

마지막 수정일 2026년 5월 22일