개요
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 및 비밀)
빠른 시작
Supabase 프로젝트 생성
Supabase 프로젝트를 생성하고 복사하세요:
- NEXT_PUBLIC_SUPABASE_URL
- NEXT_PUBLIC_SUPABASE_ANON_KEY
- SUPABASE_SERVICE_ROLE_KEY
- DATABASE_URL (연결 문자열)
구글 OAuth 구성
리디렉션 URI를 Google Cloud에서
https://[your-project-ref].supabase.co/auth/v1/callback로 설정한 후, Supabase Auth에서 클라이언트 ID와 비밀을 사용하여 Google 공급자를 활성화합니다.개발 서버 실행
포함된 내용
- Supabase를 통한 인증 (구글 OAuth 구성됨)
- Dodo 결제를 통한 구독 체크아웃
- 웹훅을 위한 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.