“우리가 어떤 문제를 해결하는지”만 설명하는 SaaS 웹사이트는 최대한 문의를 받을 수는 있어도 가입 사용자를 얻지는 못한다. SaaS를 실제로 성립시키는 것은 네 계층 역량의 결합이다. 마케팅 계층은 사람들이 이해하고 시도하게 만든다. 계정 계층은 “당신이 누구인지” 확인한다. 과금 계층은 “얼마를 냈고 무엇을 샀는지” 확인한다. 애플리케이션·관리 계층은 약속을 일상적인 사용으로 실현한다. 어느 한 계층이라도 빠지면 웹사이트는 홍보 브로슈어로 퇴화한다.
창업자와 소규모 소프트웨어 팀에게 개편 순서는 계정 체계를 먼저 보완하고, 그다음 구독 과금, 마지막으로 백오피스와 권한을 보완하는 것을 권한다. 세 가지는 강한 의존 관계가 있다. 계정이 없으면 귀속 주체가 없고, 과금이 없으면 구분 가능한 권한이 없으며, 백오피스가 없으면 수동으로 대응할 수단이 없다.
SaaS 공식 웹사이트와 실제 제품 화면은 어디가 다른가
이 두 유형의 페이지는 사용자, 목표, 기술 요구가 완전히 다르다. 하나로 섞어서 만드는 것이 많은 프로젝트가 막히는 첫 단계다.
| 비교 차원 | 마케팅 계층(홈, 가격 페이지) | 제품 계층(워크스페이스, 백오피스) |
|---|---|---|
| 방문자 | 공개 방문자, 검색엔진 및 AI 검색 크롤러 | 로그인한 체험판 또는 유료 사용자 |
| 핵심 목표 | 가치 설명, 신뢰 구축, 가입 유도 | 업무 완수, 데이터와 청구 관리 |
| 인증 요구 | 로그인 불필요 | 반드시 로그인하고 역할 검증 |
| 콘텐츠 | 변화 적음, 색인 필요 | 고빈도 변경, 크롤링·수집 불가 |
| 최적화 중점 | 제목, 구조화 콘텐츠, 인용 가능성 | 권한, 성능, 데이터 격리 |
흔한 실수는 워크스페이스까지 검색엔진에 크롤링시키거나 가격 페이지를 로그인 벽 뒤에 잠그는 것이다. 전자는 제품 구조를 노출하고 사이트 주제를 희석한다. 후자는 잠재 고객이 의사결정 전에 가격을 볼 수 없게 해 이탈시킨다. 올바른 방법은 라우팅 계층에서 분리하는 것이다. 공개 라우트는 색인 가능한 콘텐츠를 출력하고, 애플리케이션 라우트는 강제 인증과 수집 금지를 적용한다.
실제로 작동하는 SaaS 웹사이트에는 어떤 모듈이 필요한가
페이지 단위보다 계층 단위로 기능을 나누면 일정을 잡기 쉽다.
| 계층 | 필수 모듈 | 판단 기준 |
|---|---|---|
| 마케팅 계층 | 홈, 기능 페이지, 가격 페이지, 문서 또는 블로그, 개인정보 처리방침과 약관 | 문서를 보지 않아도 가격과 가치를 이해할 수 있음 |
| 계정 계층 | 회원가입, 이메일 인증, 로그인, 비밀번호 찾기, 계정 설정 | 사용자가 전 과정을 셀프로 완료할 수 있음 |
| 과금 계층 | 결제 페이지, 구독, 인보이스, 결제 콜백, 쿼터 | 결제 상태를 시스템이 읽고 실행할 수 있음 |
| 애플리케이션 계층 | 사용자 워크스페이스, 핵심 업무 데이터 | 로그인 후 “자신의” 데이터를 볼 수 있음 |
| 관리 계층 | 사용자, 구독, 주문, 콘텐츠, 권한, 작업 로그 | 운영자가 DB를 직접 수정하지 않고 문제를 처리할 수 있음 |
시간이 절반만 있다면 계정 계층, 과금 계층, 최소한의 사용 가능한 워크스페이스를 우선 만들고 관리 계층은 마지막에 보완한다. 관리자 백오피스는 가장 투박한 표 형태로 먼저 구현해도 되지만 반드시 있어야 한다. 그렇지 않으면 첫 유료 사용자에게 문제가 생겼을 때 수동으로 DB를 고치는 수밖에 없다.
사용자 회원가입, 이메일 인증, 로그인은 어떻게 구현할까

구현 경로는 다섯 단계로 압축할 수 있다.
- 로그인 방식 선택: 이메일·비밀번호를 기본으로 하고 Google, GitHub 같은 OAuth를 빠른 진입점으로 추가하면 가입 마찰을 크게 낮출 수 있다.
- 계정 저장 및 인증 메일 발송: 가입 성공 직후 일회성 인증 token을 생성해 계정에 연결하고 만료 시간을 설정한다. 미인증 계정은 대기 상태로 표시하고 유료 권한을 부여하지 않는다.
- 인증과 재발송 제한: 인증 링크는 한 번만 사용할 수 있어야 한다. 같은 이메일로 재발송할 때는 빈도를 제한해야 한다. 그렇지 않으면 다른 사람의 메일함을 폭격하는 도구가 된다.
- 세션 유지: 서버 세션 또는 서명된 토큰을 사용하고 HttpOnly, Secure 쿠키를 적용한다. 프런트엔드에 스크립트가 읽을 수 있는 자격 증명을 장기 저장하지 않는다.
- 비밀번호 찾기와 연결 해제: 비밀번호 분실 시 일회성 링크로 재설정한다. 서드파티 로그인은 연결과 해제를 허용해 사용자가 이메일을 바꾼 뒤 계정을 영구히 잃지 않게 한다.
보안 세부 사항에서는 암호화와 해시를 직접 만들지 말고 성숙한 프레임워크의 비밀번호 해시와 세션 메커니즘을 사용한다. 이메일 인증, Google / GitHub 로그인, 기본 계정 체계는 범용 인프라에 속한다. We0의 풀스택 생성 역량은 이런 기능을 생성 범위에 포함하므로(We0 풀스택 코드 생성), 팀은 비즈니스 필드와 권한 규칙에 집중할 수 있다.
무료 사용자와 유료 사용자는 어떻게 구분할까
가장 쉽게 간과되는 점: 권한 판단은 반드시 서버에서 일어나야 하고 프런트엔드는 표시만 담당한다. 프런트엔드에서 버튼을 숨기는 것은 제한이 아니다. API가 직접 호출되면 그대로 실행된다.
추천 모델은 세 테이블과 하나의 서버 함수다. 요금제 테이블은 각 플랜의 권한 식별자를 정의한다. 구독 테이블은 계정의 현재 상태, 주기, 외부 구독 ID를 기록한다. 권한 테이블은 계정 단위 쿼터 잔량을 기록한다.
canUse(user, feature):
if user.status != "active": return false # 미인증 또는 차단됨
plan = plans[user.plan_id]
if not plan.features.contains(feature): return false
if plan.quota > 0 and user.used >= plan.quota: return false
return true
무료와 유료의 차이는 보통 세 곳에 있다. 기능 스위치(고급 리포트, 다인 협업), 수량 쿼터(프로젝트 수, 멤버 수, 생성 횟수), 데이터 보존 기간. “비활성화”로 계층을 나누는 것보다 쿼터로 나누는 편이 더 매끄럽다. 무료 사용자가 실제로 가치를 경험해야 자발적으로 업그레이드한다.
Stripe 구독 결제는 어떻게 연동할까
구독 연동의 핵심은 버튼이 아니라 “누가 결정권을 갖는가”다. 원칙은 하나다. 결제 플랫폼의 구독 상태를 유일한 사실 원천으로 삼고, 자체 데이터베이스의 필드는 복사본으로만 둔다.
- 가격 객체 생성: 월간과 연간 가격을 각각 만들고 가격 ID를 환경 변수에 넣는다. 금액을 프런트엔드에 하드코딩하지 않는다.
- 결제 시작: 서버에서 결제 세션을 만들고 계정 ID를 metadata에 넣는다. 사용자는 사이트를 떠나 결제를 완료한다.
- 콜백 수신: Webhook 엔드포인트를 구성한다. 구독 생성, 갱신 성공, 결제 실패, 구독 취소 등의 이벤트를 모두 처리해야 한다. 콜백은 권한 개통의 유일한 트리거다.
- 콜백 재생 가능: 같은 이벤트가 중복 전달될 수 있으므로 처리 로직은 멱등이어야 한다. 이벤트 ID 또는 구독 ID로 중복을 제거한다. 응답은 빠르게 반환하고 오래 걸리는 작업은 비동기로 실행한다.
- 상태 매핑: 외부 구독 상태를 내부 상태로 매핑한다. 비즈니스 코드는 내부 상태만 인식하고 외부 필드를 직접 읽지 않는다.
- 청구 진입점 제공: 결제 플랫폼의 고객 포털로 이동해 인보이스와 카드를 관리하게 하면 자체 청구 페이지를 개발할 때보다 유지보수 비용이 크게 줄어든다.
| 이벤트 유형 | 시스템이 해야 할 일 |
|---|---|
| 결제 완료 | 구독 기록을 쓰고 체험판 또는 유효 상태로 설정하며 주기를 기록 |
| 갱신 성공 | 유효 기간을 연장하고 주기 내 쿼터를 초기화 |
| 결제 실패 | 연체 상태로 설정하고 읽기 전용 권한을 유지하며 결제 수단 업데이트 안내 |
| 구독 취소 | 즉시 다운그레이드하지 않고 주기 종료 후 권한 축소 |
| 환불 또는 분쟁 | 상태를 기록하고 고위험 권한을 일시 중지한 뒤 수동 재검토 |
결제 성공 후 기능은 어떻게 개방할까

이 구간은 가장 사고가 나기 쉽다. 사용자는 결제 성공 페이지에서 “환영합니다”를 보지만 권한은 아직 데이터베이스에 기록되지 않아, 들어오면 빈 워크스페이스나 다시 결제하라는 안내를 보게 된다.
올바른 방법은 “결제 성공”과 “권한 발효”를 두 개의 독립 이벤트로 다루는 것이다. 콜백이 도착하고 검증에 성공한 뒤에야 구독을 기록하고 권한을 갱신하며 환영 이메일을 발송한다. 결제 성공 페이지는 자체 API를 폴링해 권한 사용 가능 여부만 기다린다. 시간 초과 시 “결제 처리 중이며 잠시 후 이메일로 안내하겠습니다”라고 표시하지, 바로 통과시키지 않는다.
다운그레이드도 설계해야 한다. 만료, 미납, 환불은 모두 통일된 권한 축소 흐름을 거쳐야 한다. 먼저 일정 기간 읽기 전용 접근을 유지한 뒤 쓰기와 내보내기를 단계적으로 닫는다. 갑자기 모든 권한을 끊으면 사용자를 화나게 하고, 무기한 모든 권한을 유지하면 제품을 무료로 주는 것과 같다.
사용자는 어디에서 계정과 요금제를 관리할까
몇 분 만에 쇼케이스 사이트를 만들고 리드를 늘리세요
아이디어를 한 문장으로 입력하면 We0 AI가 쇼케이스 사이트, 페이지, CMS를 생성하고 출시 후 고객과 트래픽 확보를 돕습니다.
무료 등록을 위한 하나의 완전한 프로젝트 생성
하나의 완전한 생성 흐름을 시도하고 첫 번째 프로젝트 초안을 빠르게 보는 데 가장 적합합니다.
정보가 완전한 계정 페이지는 고객 지원 티켓을 크게 줄인다. 최소한 다음을 포함한다. 개인정보와 비밀번호, 이메일 변경(재인증 필요), 현재 요금제와 갱신일, 사용량과 쿼터 잔량, 인보이스 이력과 다운로드, 업그레이드·다운그레이드·취소 진입점, 모든 기기 로그아웃과 계정 삭제.
요금제 변경은 방향을 구분해야 한다. 업그레이드는 즉시 적용하고 비례 과금하며, 다운그레이드는 다음 주기로 예약해 사용자가 반복 전환해 정산이 혼란스러워지는 것을 막는다. 구독 취소 시 연속 팝업으로 붙잡을 필요는 없다. 한 번의 명확한 확인과 “권한은 X월 X일까지 유지됩니다” 한 문장이 열 겹 팝업보다 훨씬 효과적이다.
관리자 백오피스는 무엇을 관리해야 할까
백오피스는 “경영진에게 보여 주는 대시보드”가 아니라 예외 처리 도구다.
| 대상 | 일반 작업 | 핵심 제약 |
|---|---|---|
| 사용자 | 조회, 비밀번호 재설정, 차단, 메모 | 평문 비밀번호 직접 변경 불가, 작업 흔적 남김 |
| 구독 | 상태 조회, 수동 연장, 인보이스 재발행 | 결제 플랫폼 측과 확인 후 변경 |
| 주문 | 조회, 환불 표시, 대사 내보내기 | 환불은 사유와 작업자 기록 필수 |
| 콘텐츠 | 문서, 글, 도움말 센터 | 공개 사이트와 동일 소스, 두 벌 콘텐츠 방지 |
| 권한 | 관리자 역할 부여 | 최소 권한, 민감 작업 2차 확인 |
백오피스에서 가장 흔한 실수는 관리자 계정을 만능 열쇠로 만드는 것이다. 최소한 세 단계로 나누기를 권한다. 읽기 전용 운영, 주문과 사용자 처리 가능, 과금과 권한 수정 가능. 모든 민감 작업은 감사 로그에 기록해 문제가 생겼을 때 누가 언제 무엇을 바꿨는지 추적할 수 있어야 한다.
공식 웹사이트와 백오피스는 하나의 프로젝트에 넣을까, 두 세트로 나눌까

초기 팀은 거의 모두 단일 프로젝트를 선택해야 한다. 도메인과 세션을 공유하고, 사용자는 홈에서 가입한 뒤 바로 워크스페이스로 들어가며 여러 시스템 간 SSO를 만들 필요가 없다. 콘텐츠, SEO, 제품 업데이트가 같은 라우트와 배포 안에 있어 운영 비용이 가장 낮다. 공개된 SaaS 인증과 계정 관리 예시도 이런 통합 형태를 채택한다. 인증, 역할 권한, 구독, 도메인, 배포가 모두 하나의 애플리케이션 안에서 완료된다(SaaS Auth Dashboard 예시).
팀이 이미 역할 분담이 명확하고 트래픽이 커져 독립 확장이 필요할 때 공식 웹사이트, 프런트 애플리케이션, 백엔드 서비스로 나눈다. 대가는 교차 도메인 세션, 통합 인증, 콘텐츠 동기화를 유지해야 한다는 점이다. 판단 기준은 세 가지다. 공식 웹사이트가 매주 여러 번 업데이트되는데 애플리케이션은 반년에 한 번 배포되는가. 마케팅과 제품 개발을 각각 담당하는 여러 사람이 있는가. 애플리케이션에 독립적인 확장과 데이터베이스 격리 요구가 있는가. 세 가지가 모두 성립할 때 분리하고, 그렇지 않으면 먼저 합친다.
단일 프로젝트 내부에도 명확한 경계가 있어야 한다. 마케팅 라우트는 인증을 하지 않지만 색인 가능해야 하고, 애플리케이션 라우트는 강제 인증과 수집 금지를 적용하며, API 계층은 권한을 통일적으로 검증하고, 백오피스 라우트에는 추가 역할 검증을 붙인다. We0는 페이지 구조, 인증, 구독과 크레딧, CMS와 백오피스, 다국어, SEO와 배포를 하나의 생성 파이프라인에 넣는다(We0 풀스택 코드 생성). 공식 웹사이트와 제품 진입점을 하나의 프로젝트로 담당하려는 팀에 적합하며, 구체적인 비즈니스 규칙과 권한 경계는 여전히 제품 요구에 따라 정의해야 한다.
프로젝트 관리 SaaS로 전체 흐름을 한 번 따라가 보기
소규모 팀용 프로젝트 관리 SaaS를 만든다고 가정하자. 무료 버전은 프로젝트 3개, 프로 버전은 프로젝트 무제한과 멤버 협업을 지원한다.
- 홈: “누가 어떤 상황에서 사용하는지”를 설명하고 무료 가입 진입점을 제공하며 신용카드를 요구하지 않는다.
- 가격 페이지: 세 가지 요금제를 나란히 보여 주고 월간과 연간의 차액, 쿼터와 제한을 명시한다.
- 가입과 인증: 이메일로 가입하면 즉시 인증 메일을 받고, 인증을 완료해야 프로젝트를 만들 수 있다.
- 구독 결제: 워크스페이스 안에서 업그레이드를 클릭해 호스팅 결제 페이지로 이동하고 월간 또는 연간을 선택한다.
- 권한 개통: 콜백이 구독 상태를 기록하고, 워크스페이스를 새로고침하면 프로젝트 상한이 해제되며 현재 요금제와 갱신일이 표시된다.
- 사용자 워크스페이스: 해당 계정의 프로젝트만 보여 주고, 멤버 초대는 좌석 단위로 검증한다.
- 관리자 백오피스: 고객 지원 담당자가 사용자를 조회하고 구독을 확인하며, 연체 사용자에게 하루 수동 연장을 제공해 완충할 수 있다.
이 흐름에서 실제로 시간이 드는 것은 페이지가 아니라 5단계의 상태 일관성과 7단계의 예외 처리다. 많은 팀이 80%의 시간을 홈페이지 비주얼에 쓰고, 출시 후에는 미납과 환불을 수동으로 처리한다.
출시 전 체크리스트
- 미인증 이메일 계정이 유료 권한 밖에서 차단되는가?
- 모든 권한 판단이 서버에서 실행되는가?
- 결제 콜백이 멱등이며 플랫폼 상태만 인정하는가?
- 결제 성공 페이지가 권한 DB 반영을 기다리며 바로 통과시키지 않는가?
- 연체, 취소, 환불에 대응하는 다운그레이드 경로가 모두 있는가?
- 애플리케이션 라우트는 수집 금지, 공개 페이지는 색인 가능한가?
- 관리자 작업에 감사 로그와 최소 권한이 있는가?
- 공식 웹사이트 콘텐츠와 도움말 문서가 동일 소스여서 장기 분기되지 않는가?
FAQ
SaaS 웹사이트는 제품 소개 페이지로만 만들어도 될까?
단계적 랜딩 페이지로는 가능하지만, 고객 획득만 담당할 수 있고 가입, 체험판, 유료 결제를 담을 수는 없다. 사용자가 “무료로 시작”을 눌렀는데 갈 곳이 없으면 트래픽은 낭비된다.
코딩을 못 해도 SaaS를 만들 수 있을까?
계정, 구독, 백오피스, 배포 같은 범용 인프라는 성숙한 플랫폼이나 AI 생성 역량으로 빠르게 구축할 수 있다. 그러나 과금 규칙, 권한 경계, 데이터 모델은 사람이 설계하고 검증해야 한다. 도구는 반복 엔지니어링을 줄여 주지만 제품 결정을 대체하지는 못한다.
구독 결제는 반드시 Stripe를 써야 할까?
아니다. 다만 선택은 목표 시장과 정산 주기를 봐야 한다. Stripe의 구독, 인보이스, 고객 포털은 상대적으로 완성도가 높다. 국내 사용자를 대상으로 한다면 로컬 결제 수단도 고려해야 한다. 어느 업체를 쓰든 “외부 상태가 유일한 사실 원천”이라는 원칙을 지켜야 한다.
무료 사용자와 유료 사용자를 가장 간단히 구분하는 방법은?
요금제 테이블, 권한 테이블, 하나의 서버 판단 함수다. 여러 페이지에 조건문을 흩뿌리지 말아야 한다. 그렇지 않으면 요금제 하나를 추가할 때 십여 군데 코드를 수정해야 한다.
공식 웹사이트와 백오피스는 같은 프로젝트에 넣어야 할까?
초기에는 같은 프로젝트에 넣어 도메인과 세션을 공유하는 것이 운영 비용이 가장 낮다. 팀과 트래픽이 각각 독립적으로 반복 개발해야 할 때 분리한다.
결제는 성공했는데 기능이 열리지 않으면 어떻게 할까?
먼저 콜백 도착 여부, 서명 검증 통과 여부, 멱등 중복 제거 오판 여부를 확인하고, 그다음 권한 기록 여부를 확인한다. 사용자 측에는 “처리 중”이라는 명확한 피드백과 수동 지원 채널을 제공해야 하며, 사용자가 결제를 반복하게 만들어서는 안 된다.
관련 도구
- Stripe 공식 문서: 구독, 결제, 콜백 메커니즘의 원문 설명
- React + Shadcn UI 등 컴포넌트 라이브러리: 워크스페이스 테이블, 차트, 페이지네이션 상호작용을 빠르게 구축 (구현 참고)
- 디자인 시안을 코드로 변환하는 도구: 백오피스 UI 디자인을 바로 실행 가능한 페이지로 변환
- We0.ai: 하나의 프로젝트 안에서 인증, 결제, CMS 백오피스, 배포를 조합
관련 링크
- We0 풀스택 코드 생성 역량
- SaaS Auth Dashboard: 인증과 계정 관리 예시
- React, Shadcn UI & TypeScript로 SaaS 관리자 대시보드 구축하기
요약
제품 소개 페이지로만 구성된 SaaS 웹사이트가 해결하는 것은 “사람들이 믿게 만드는 일”이고, 로그인, 구독 결제, 관리자 백오피스가 해결하는 것은 “사람들이 실제로 사용하고 계속 결제하게 만드는 일”이다. 실행 순서는 계정 체계, 구독 과금, 최소한의 사용 가능한 워크스페이스, 관리자 백오피스를 권한다. 기술적으로는 세 가지 강한 제약이 있다. 권한 판단은 서버에 두고, 결제 플랫폼 상태를 유일한 사실 원천으로 삼으며, 결제 성공과 권한 발효를 별도로 처리해야 한다. 공식 웹사이트와 백오피스는 초기에는 하나의 프로젝트에 넣어 도메인과 세션을 공유하고, 팀과 트래픽 모두 독립적 반복 개발이 필요할 때 분리한다.



