데브허브 | DEVHUB | How I implement stripe subscriptionsHow I implement stripe subscriptions
- Stripe 구독 구현은 프론트엔드에서 인증 상태에 따라 '시작하기' 또는 '업그레이드' 버튼을 표시하는 것으로 시작합니다. 👤
- '업그레이드' 버튼 클릭 시 백엔드 로직을 호출하여 Stripe Checkout 세션을 생성합니다. 🛒
- Checkout 세션 생성 시 Stripe 제품의 Price ID, 고객 이메일, 사용자 ID를 포함한 메타데이터, 성공/취소 리디렉션 URL을 지정합니다. 🏷️
- Stripe 대시보드에서 제품(예: Starter, Pro)을 생성하고 각 제품에 대한 Price ID를 설정해야 합니다. 💳
- 클라이언트 측 Stripe SDK(publishable key 사용)를 통해 생성된 세션 ID로 사용자를 Stripe 결제 페이지로 리디렉션합니다. 💻
- 결제 성공 여부를 100% 확인하고 사기를 방지하기 위해 Stripe 웹훅(Webhooks)을 반드시 사용해야 합니다. 🎣
- 웹훅 엔드포인트는 Stripe Signature를 검증하여 요청이 Stripe에서 온 것인지 확인하는 보안 절차가 필수적입니다. 🔒
- 초기 구독 구매 시
checkout.session.completed 이벤트를 통해 사용자 ID와 구독 정보를 데이터베이스에 저장합니다. ✅
customer.subscription.updated 이벤트는 구독 업그레이드, 갱신, 취소, 결제 실패 등 모든 구독 상태 변경을 처리하는 핵심 이벤트입니다. 🔄
- 웹훅 이벤트를 통해 구독 상태(예: active, trialing, inactive)를 관리하고, 이를 기반으로 애플리케이션 내 기능 접근 및 제한 로직을 구현합니다. 📊
- Stripe Customer Portal을 활성화하여 사용자가 직접 구독을 관리(취소, 업그레이드 등)할 수 있도록 합니다. 🌐
- 데이터베이스에 사용자 ID, 구독 ID, 구독 등급(tier)을 저장하여 애플리케이션의 기능 제한 및 맞춤형 경험을 제공합니다. 💾