개요
Next.js 15, React 19, Supabase, Drizzle ORM 및 Dodo Payments를 사용하는 프로덕션 준비 완료 구독 보일러플레이트입니다. Google OAuth, 구독 체크아웃, 웹훅 처리, 데이터베이스 스키마 및 기본 대시보드가 포함되어 있습니다.기존 앱에 대한 라우트 핸들러만 필요한 경우 전용 어댑터를 참조하세요: Next.js 어댑터 및 Express 어댑터.
필수 조건
- Node.js 18+ (또는 Bun 1.0+)
- Supabase 프로젝트 (URL, Anon 키, 서비스 역할 키, 데이터베이스 URL)
- Dodo Payments 계정 (API 키, 웹훅 비밀)
- Google Cloud OAuth 클라이언트 (클라이언트 ID 및 비밀)
빠른 시작
1
클론 및 설치
2
Supabase 프로젝트 생성
Supabase 프로젝트를 생성하고 복사하세요:
- NEXT_PUBLIC_SUPABASE_URL
- NEXT_PUBLIC_SUPABASE_ANON_KEY
- SUPABASE_SERVICE_ROLE_KEY
- DATABASE_URL (연결 문자열)
3
Google OAuth 구성
Google Cloud에서 리디렉션 URI를
https://[your-project-ref].supabase.co/auth/v1/callback로 설정한 후, Supabase Auth에서 클라이언트 ID 및 비밀을 사용하여 Google 공급자를 활성화하세요.4
Dodo Payments 구성
Dodo 대시보드에서 API 키 및 웹훅 비밀을 생성하세요. 개발 중에는 환경을
test_mode로 설정하세요.5
.env.local 생성
6
데이터베이스 스키마 프로비저닝
생성된 테이블:
users, subscriptions, payments.7
웹훅 함수 배포
cURL
8
Dodo Payments에 웹훅 추가
엔드포인트 URL을 다음으로 설정하세요:결제 및 구독 이벤트를 선택하세요.
9
제품 및 기능 생성
Dodo 대시보드 → 제품 → 제품 생성. 선택적으로 메타데이터를 추가하세요:가격 UI는 이
features 배열을 읽고 동적으로 렌더링합니다.10
개발 서버 실행
포함된 내용
- Supabase를 통한 인증 (Google OAuth 구성됨)
- Dodo Payments를 통한 구독 체크아웃
- 웹훅을 위한 Supabase 엣지 함수 (
dodo-webhook) - Drizzle ORM 스키마 및 마이그레이션
- 인보이스, 구독 상태 및 계획 기능이 포함된 대시보드
주요 파일 및 경로
- 엣지 함수
- Next.js 라우트
- 데이터베이스 (Drizzle)
환경 변수
Supabase
Supabase
Dodo Payments
Dodo Payments
Google OAuth
Google OAuth
검증 및 문제 해결
웹훅 서명 유효하지 않음 (401)
웹훅 서명 유효하지 않음 (401)
DODO_WEBHOOK_SECRET가 Dodo 대시보드의 값과 일치하는지 확인하세요.- 최신
dodo-webhook함수를 배포했는지 확인하세요. - 함수에서 헤더 이름이 올바른지 확인하세요 (Dodo-Signature)
데이터베이스 푸시 실패
데이터베이스 푸시 실패
DATABASE_URL구문 및 Supabase 네트워크 이그레스 확인- 프로젝트 생성 후 첫 푸시까지 ~2–3분 기다리세요.
OAuth 리디렉션 불일치
OAuth 리디렉션 불일치
- 리디렉션 URI는
https://[ref].supabase.co/auth/v1/callback이어야 합니다. - Google Cloud 및 Supabase Auth 공급자에서 동일한지 확인하세요.
이제 Supabase 및 Dodo Payments로 구성된 작동하는 구독 SaaS가 있습니다.
원본 리포지토리 및 자세한 단계: dodo-supabase-subscription-starter.