피드로 돌아가기
Dev.toBackend
원문 읽기
Next.js 15 기반 Supabase 세션 최적화 및 Stripe 결제 동기화 설계
How I wired Stripe subscriptions to Supabase in Next.js 15 (the parts tutorials skip)
AI 요약
Context
단일 Supabase 클라이언트 사용으로 인한 권한 충돌 및 세션 관리의 한계 발생. 특히 Webhook 처리 시 RLS 제약으로 인한 데이터 쓰기 실패와 Token 만료 시 사용자 강제 로그아웃 문제가 주요 병목 지점으로 식별됨.
Technical Solution
- Context별 최적화된 3종 Supabase Client 분리 설계로 Browser(Client Component), Server(API/Server Component), Service(Webhook/Admin) 간 역할 명확화
- Middleware 내
supabase.auth.getUser()호출을 통한 Access Token 자동 갱신 및 Response Cookie 업데이트 로직 구현 service_role키를 활용한 Service Client 도입으로 Webhook 처리 시 RLS(Row Level Security)를 완전히 우회하여 데이터 무결성 확보security definer트리거 기반의 Profile 자동 생성 구조를 통해 신규 가입자의 RLS 권한 부족으로 인한 Insert 실패 문제 해결- Stripe Webhook 핸들러에 Upsert 패턴을 적용하여 네트워크 재시도 상황에서도 데이터 일관성을 유지하는 Idempotency 보장
실천 포인트
- Next.js App Router 환경에서 Client/Server/Service Client가 용도별로 분리되어 있는가? - Middleware에서 단순 세션 체크를 넘어 Token Refresh 로직이 포함되어 있는가? - Webhook 처리 시 RLS 우회를 위한 Service Role Key 사용 및 Idempotency 처리가 되어 있는가? - 신규 유저 생성 시 권한 이슈를 방지하기 위해 Database Trigger(Security Definer)를 활용하고 있는가?