피드로 돌아가기
Dev.toDatabase
원문 읽기
Row-level Isolation과 State Machine 기반 SaaS 과금 아키텍처 설계
Designing SaaS Database Architecture: Users, Organizations, Subscriptions, and Billing
AI 요약
Context
초기 SaaS 설계 시 발생하는 Multi-tenancy 격리 수준 결정과 복잡한 구독 상태 관리의 어려움 분석. 단순 Boolean 기반 활성화 여부 판단으로 인한 상태 모호성과 데이터 무결성 결여 문제 해결 필요.
Technical Solution
- Row-level Multi-tenancy 채택을 통한 운영 복잡도 최소화 및 organization_id 기반의 Application layer 데이터 격리 구현
- User가 아닌 Organization 단위의 Billing 구조 설계를 통한 팀 기반 구독 및 확장성 확보
- 구독 생명주기를 trialing, active, past_due, canceled 등 명시적 상태로 정의한 Subscription State Machine 도입
- UUID(TEXT) 기반 PK 사용을 통한 Enumeration Attack 방지 및 Unix Integer 타임스탬프 적용으로 Timezone 의존성 제거
- Monetary Value의 정밀도 보장을 위해 FLOAT 대신 Integer Cents 단위 저장 방식 채택
- current_period_end 컬럼 Indexing을 통한 구독 만료 처리 Cron Job의 Full Table Scan 방지
실천 포인트
- Multi-tenancy 구현 시 쿼리마다 organization_id 필터링 강제 여부 검토 - 구독 상태 관리를 위한 Enum 기반 State Machine 정의 및 전이 규칙 수립 - 금융 데이터 저장 시 정수형(Integer) 단위 사용 및 Floating Point 사용 금지 - 조직 삭제 시 결제 기록 유실 방지를 위한 ON DELETE RESTRICT 또는 Soft-delete 적용