콘텐츠로 건너뛰기
모든 글
읽기 5분

랜딩 페이지를 넘어선 SaaS 출시 체크리스트

제품에 사람들을 초대하기 전에 로그인, 고객 데이터, 유료 액세스, 실패한 작업, 지원 경로를 검증하세요.

supastack 팀

고객의 첫 세션을 따라가세요

공개할 환경에서 새 계정을 만드세요. 검증 또는 프로바이더 콜백을 따라가고, 앱을 새로고침하고, 프로필을 업데이트하고, 로그아웃하세요. 좁은 화면에서 키보드로 그 여정을 반복하세요. 익숙한 개발 세션은 누락된 구성 단계와 오래된 상태를 숨길 수 있습니다.

다음에 무엇을 할지 설명하는 메시지를 검토하세요. 빈 화면은 유용한 액션을 제공해야 합니다. 실패한 요청은 작업이 성공한 것처럼 보이게 하는 대신 재시도 방법을 설명해야 합니다. 이 메시지에 실제 제품 언어를 사용하고 계정 및 지원 링크가 실제 목적지로 이동하는지 확인하세요.

로그인 방법마다 그 여정을 한 번씩 반복하세요. Google과 GitHub의 OAuth 콜백은 각각 고유한 리다이렉트와 실패 모드를 가지며(OAuth 설정 가이드가 구성을 다룹니다), 프로바이더의 테스트 동의 화면은 프로덕션 화면과 다르게 동작합니다.

  • 계정 생성과 세션 복원이 작동합니다.
  • 로그아웃이 액세스를 취소하고 이전 사용자 표시를 지웁니다.
  • 빈 상태, 로딩, 오류 상태가 모바일에서도 이해할 수 있습니다.
  • 모든 OAuth 프로바이더가 실제 도메인에서 콜백을 완료합니다.
  • 인증 및 재설정 이메일이 도착하고, 명확하게 읽히며, 올바른 환경으로 링크됩니다.
  • 첫 실행 경험이 새 사용자에게 다음에 할 일을 알려줍니다.

서버에서 유료 액세스를 증명하세요

체크아웃은 쉬운 절반입니다. 프로바이더의 샌드박스에서 전체 라이프사이클을 따라가세요: 구매, 수신되어 검증된 웹훅, 영속화된 엔타이틀먼트, 잠금 해제된 유료 기능 — 그리고 갱신, 해지, 환불. 모든 전환은 클라이언트 플래그가 아니라 서버 소유 상태를 바꿔야 합니다. 결제 가이드는 supastack이 그 상태를 어디에 두는지 보여줍니다.

그런 다음 보지 않기를 바라는 이벤트를 테스트하세요: 두 번 전달된 웹훅, 실패한 결제, 작업 중간에 만료된 구독. 엔타이틀먼트는 요청 시점에 “지금 허용되는가”에 답합니다. 대시보드 배지는 그렇지 않습니다.

  • 샌드박스 구매가 완료되고 유료 기능을 잠금 해제합니다.
  • 중복 웹훅 전달이 안전합니다 — 처리는 멱등적입니다.
  • 해지와 환불이 서버 경계에서 액세스를 취소합니다.
  • 시트당 또는 사용량 한도가 있다면, 약관을 넘는 요청을 거부합니다.

실제 의존성으로 경계를 검증하세요

두 개의 독립 계정으로 소유권을 검증하세요. 한 계정에서 다른 계정의 레코드를 읽고 수정해 보세요 — 작업 상태와 복구 URL 포함. 인터페이스에서 버튼을 숨기는 것뿐 아니라 서버 액션 경계에서 유료 액세스를 검증하세요.

워크스페이스 범위 레코드는 멀티테넌트 제품의 중추입니다 — 워크스페이스 경계 포스트가 그 모델을 설명합니다. 스택이 무엇이든 출시 질문은 같습니다: 모든 읽기와 쓰기가 서버의 인증된 컨텍스트에서 소유권을 도출하며, 레코드 ID나 클라이언트가 보낸 워크스페이스가 증거로 받아들여지지 않는가?

  • 워크스페이스 간 읽기와 쓰기가 거부됩니다.
  • 복구 및 작업 URL이 그 자체로 액세스를 부여하지 않습니다.
  • 목록과 상세 화면이 같은 범위 지정을 강제합니다.
  • API 키와 웹훅을 제공한다면 워크스페이스 범위를 함께 가집니다.

실패 경로를 일부러 실행하세요

백그라운드 작업은 두 가지 뚜렷한 방식으로 실패하며 각각 자체 테스트가 필요합니다. 실패한 디스패치는 무엇이 큐에 들어갔는지 클라이언트를 불확실하게 합니다 — 작업 범위 멱등성 키와 저장된 제출이 복구가 원래 요청을 복제하는 대신 재사용하게 합니다. 실패한 완료는 작업은 실행됐지만 결과가 도착하지 않은 것입니다 — 재시도와 상태 폴링이 두 번째 생성 없이 그 간극을 메워야 합니다.

같은 사고를 프로바이더에도 적용하세요: AI 프로바이더 타임아웃, 반송된 이메일, 결제 API 오류. 각각은 조용한 절반의 결과가 아니라 구체적이고 설명 가능한 상태로 끝나야 합니다. 작업 복구 가이드는 킷의 프로덕션 경로가 이를 어떻게 처리하는지 문서화합니다.

  • 제출 타임아웃 후 재시도가 작업이나 비용을 중복하지 않습니다.
  • 실패한 완료가 보이고 복구 가능하며, 조용한 손실이 아닙니다.
  • 프로바이더 오류가 일반적인 크래시가 아니라 정직한 상태로 사용자에게 도달합니다.

첫 번째 장애에 대비하세요

누군가가 오류를 찾아 관련 작업과 연결하고 프로바이더 시크릿을 노출하지 않으면서 사용자의 복구를 도울 수 있도록 하세요. 어떤 로그와 감사 레코드가 존재하는지, 얼마나 보관하는지, 운영자가 어떻게 접근하는지 확인하세요.

출시 전에 “무언가 잘못됐다”가 어떤 모습인지 결정하세요: 실패한 작업 전달, 웹훅 검증 오류, 갑작스러운 프로바이더 지출 증가. 아무도 받지 않는 알림은 모니터링이 아닙니다 — 옵저버빌리티 설정이 그 신호들의 연결을 다룹니다.

백업을 운영 훈련으로 다루세요: 구성된 백업은 복원된 백업과 다릅니다. 필요한 날이 오기 전에, 프로덕션과 비슷한 데이터로 복원을 한 번 실행하세요.

  • 오류가 그것을 일으킨 요청, 사용자, 작업까지 추적됩니다.
  • 로그와 감사 레코드에 소유자, 보관 정책, 접근 규칙이 있습니다.
  • 백업이 구성만 된 것이 아니라 복원까지 되었습니다.
  • 실패한 작업과 웹훅 오류가 사람이 받는 알림을 발생시킵니다.

제품 주변 표면을 점검하세요

법적·커뮤니케이션 표면은 출시의 일부이며 다듬기가 아닙니다: 제품이 실제로 하는 일을 설명하는 개인정보 처리방침과 약관, 사람에게 도달하는 지원 주소, 그리고 트랜잭션 메일이 당신이 소유한 주소에서 도착하도록 하는 검증된 발신 도메인.

모든 자동 이메일을 고객처럼 읽으세요. 인증, 재설정, 영수증, 완료 메시지는 제품 이름, 올바른 환경으로의 링크, 그리고 죽은 noreply 주소가 아닌 답장 경로를 담아야 합니다.

  • 개인정보 처리방침과 약관 페이지가 실제로 운영하는 제품을 설명합니다.
  • 트랜잭션 메일이 당신이 소유한 검증된 도메인에서 발송됩니다.
  • 지원 및 결제 문의가 도달 가능한 목적지를 가집니다.

진행 여부 결정을 명시적으로 하세요

릴리스 기록을 모으세요: 빌드 리비전, 대상 환경, 무엇을 어떻게 테스트했는지, 무엇이 아직 검증되지 않았는지. 정직한 공백이 있는 체크리스트가 자신 있는 요약보다 낫습니다 — 첫 사고는 보통 그 공백에 있습니다.

필요해지기 전에 롤백 경로를 결정하세요: 배포를 어떻게 되돌리는지, 그 사이에 쓰인 데이터는 어떻게 되는지, 누가 판단하는지. 그런 다음 완전히 지원할 수 있는 가장 작은 버전의 오퍼를 출시하고, 의도적으로 넓혀 가세요.

흔한 출시 질문

출시 체크리스트는 예측 가능한 곳에서 실패합니다. 대부분을 잡아내는 질문은 이것들입니다.

  • 대부분의 SaaS 출시가 잊는 것은요? — 플로의 끝: 실제로 취소하는 로그아웃, 실제로 액세스를 제거하는 해지, 서류상 존재하는 백업의 복원 훈련.
  • 테스트 계정이 몇 개 필요한가요? — 대상 환경에서 최소 두 개. 데이터 격리와 초대 플로는 하나로는 검증할 수 없습니다.
  • 샌드박스 테스트와 프로덕션 테스트 중 어느 쪽인가요? — 둘 다. 샌드박스는 라이프사이클 로직을 증명하고, 작은 실제 거래는 키, 도메인, 웹훅이 올바른 곳에 연결됐음을 증명합니다.
  • 언제 출시해도 안전한가요? — 고객 데이터나 돈을 보호하는 모든 항목이 검증되고, 검증되지 않은 항목이 소유자와 함께 적혀 있을 때이지, 기능 목록이 완성되어 보일 때가 아닙니다.
  • 출시 후 무엇이 달라지나요? — 릴리스 기록을 유지하고, 구성한 실패 알림을 지켜보고, 인증, 결제, 범위 지정에 중요한 변경이 있으면 체크리스트를 다시 실행하세요.

자주 묻는 질문

질문 14개

supastack이란 무엇인가요?

supastack은 AI SaaS 제품을 구축하기 위한 모듈식 기반입니다. 공통 인프라를 모아두어 제품 고유의 기능에 집중할 수 있습니다.

웹과 모바일을 지원하나요?

네. supastack에는 웹과 모바일 경험의 출발점으로 Next.js 앱과 Expo 앱이 포함되어 있습니다.

어떤 인증이 포함되어 있나요?

Better Auth가 이메일/비밀번호, OTP, 소셜 로그인을 커버합니다. 개인 워크스페이스는 계정과 함께 프로비저닝되어 첫날부터 레코드가 경계 안에 유지됩니다.

AI는 어떻게 지원되나요?

supastack에는 구성 가능한 멀티 프로바이더 AI, 사용량 추적, 예산, 암호화된 자체 키(BYOK) 지원이 포함되어 있습니다.

구독은 어떻게 관리되나요?

이 키트 위에 구축된 제품에서는 Stripe 결제, 구독, 권한이 유료 액세스의 기반을 형성합니다. 프로바이더 시크릿은 서버 측에 유지됩니다.

제품 고유 코드는 어디에 두나요?

제품 고유 기능은 별도의 코드베이스에 두고, 제품이 supastack 기본 모듈을 구성하고 통합합니다.

supastack 가격은 어떻게 되나요?

키트는 평생 업데이트가 포함된 일회성 구매입니다: 단일 프레임워크 $249(기간 한정 출시 가격 — 정가 $349에서 $100 할인) 또는 모든 프레임워크(Next.js, iOS, Android) $499(기간 한정 출시 가격 — 정가 $599에서 $100 할인), 추가 개발자 시트당 $75. 키트 구독은 없습니다. 이 사이트의 체크아웃은 라이선스 키를 이메일로 전달하고 GitHub 초대로 리포지토리 액세스를 제공합니다.

워크스페이스는 내 데이터를 어떻게 경계 짓나요?

사용자 레코드는 workspaceId로 범위가 지정됩니다. 신원, 권한, AI 사용량, 결제 이벤트, 감사 항목은 개인 워크스페이스 경계 안에 유지됩니다.

백그라운드 작업은 어떻게 작동하나요?

Trigger.dev가 명시적인 작업 런타임입니다. JobRunner 계약은 enqueue, status, cancel만 약속하며 — 워크플로 의미는 Trigger.dev 고유이고 명시적입니다.

이메일과 아웃리치는 어떻게 다른가요?

트랜잭션 이메일은 작업 완료 알림 같은 제품 워크플로를 커버합니다. 콜드 아웃리치와 캠페인은 제품 자체에 속하며 이 키트의 이메일 모듈 밖입니다.

모바일 구매는 어떻게 작동하나요?

모바일은 RevenueCat 네이티브 구매와 복원을 지원하며 서버에서 접근 권한을 검증합니다. 출시 전에 스토어 계정을 설정하고 기기 테스트를 완료하세요. 웹 결제는 별도로 관리합니다.

AI 프로바이더 키는 어디에 있나요?

BYOK 자격 증명은 암호화되어 서버 측에 유지됩니다. 키는 로그에서 삭제되며, 사용량과 예산은 워크스페이스 수준에서 확인할 수 있습니다.

체크아웃에서 어떤 결제 수단을 지원하나요?

Stripe 호스팅 체크아웃은 카드를 받으며, Stripe 계정에서 지갑을 활성화하면 Alipay와 WeChat Pay도 제공할 수 있습니다 — 중국 구매자에게 유용합니다. 지갑 승인은 비동기로 확정되므로 결제가 완료되는 즉시 라이선스 페이지가 갱신됩니다.

환불을 받을 수 있나요?

저장소 접근 권한을 얻은 후에는 supastack이 영구적으로 귀하의 소유가 되므로 환불이 불가능합니다. 하지만 안심하세요. 평생 업데이트가 포함된 전체 소스 코드를 받아 자신이나 고객을 위한 제품을 무제한으로 구축하고 출시할 수 있습니다. 단, 코드를 재판매하거나 저장소를 스타터 키트 또는 템플릿으로 재배포할 수는 없습니다.

KO