project/NestJS + Kubernetes & 마이크로서비스 배포

📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드 - NestJS SaaS 시스템 설계: 인증, 요금제, 다중 테넌시

octo54 2025. 4. 15. 10:53
반응형

📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드

13. NestJS SaaS 시스템 설계: 인증, 요금제, 다중 테넌시


NestJS로 SaaS(Software-as-a-Service) 플랫폼을 구축하려면 단순한 API 서버를 넘어, 사용자 관리, 권한 체계, 요금제, 다중 테넌시까지 고려해야 합니다.
이번 글에서는 SaaS 서비스를 위한 NestJS 백엔드 설계 전략을 소개합니다.
다중 기업 지원, 인증/인가, 과금/플랜 시스템까지 확장 가능한 SaaS 시스템을 직접 설계합니다. 💳


✅ 1. SaaS 백엔드의 핵심 요소

요소 설명

사용자 관리 이메일, 소셜, 조직 기반 사용자 가입 및 로그인
권한 관리 사용자별 역할/조직 권한 분리 (RBAC)
요금제 관리 무료/유료 플랜, 사용량 제한, 결제 처리
테넌시 구조 조직(회사/팀) 단위 데이터 분리 (Multi-Tenancy)
통계/과금 사용량 분석, 자동 과금, 청구 내역 API

✅ 2. 기본 데이터 모델 설계

📦 1) 테넌트 기반 구조

@Entity()
export class Tenant {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @OneToMany(() => User, user => user.tenant)
  users: User[];
}

📦 2) 사용자 + 역할

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(() => Tenant, tenant => tenant.users)
  tenant: Tenant;

  @Column()
  email: string;

  @Column()
  role: 'OWNER' | 'ADMIN' | 'MEMBER';
}

✅ 3. 인증 시스템 설계 (JWT 기반)

반응형

✅ 1) 로그인 및 토큰 발급

  • 이메일/비밀번호 기반
  • Google OAuth 등 소셜 로그인 통합
@Module({
  imports: [PassportModule, JwtModule.register({ secret: JWT_SECRET })],
  providers: [AuthService, JwtStrategy],
})

✅ 2) JWT Payload 구조

{
  "sub": "user_id",
  "tenantId": "tenant_123",
  "role": "ADMIN"
}

✅ 3) NestJS Guard로 역할 체크

@UseGuards(RolesGuard)
@Roles('OWNER')
@Get('settings')
getTenantSettings() { ... }

✅ 4. RBAC (역할 기반 접근 제어)

  • Role → Permission 구조 설계 (Role, Permission 테이블 구성)
  • 각 API에 @Roles() 데코레이터로 접근 제한
  • 운영자/관리자/일반 사용자 권한 분리

💡 권한을 코드화하고 관리 가능한 Casl, nestjs-access-control 도입 가능


✅ 5. 요금제 및 플랜 시스템 설계

✅ 플랜 테이블 예시

@Entity()
export class Plan {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  maxUsers: number;

  @Column()
  price: number;
}

✅ 테넌트가 사용하는 플랜 연결

@Entity()
export class Subscription {
  @ManyToOne(() => Tenant)
  tenant: Tenant;

  @ManyToOne(() => Plan)
  plan: Plan;

  @Column()
  expiresAt: Date;
}

💳 Stripe 연동으로 자동 결제/청구 가능


✅ 6. SaaS형 과금/제한 시스템 구현

  • API 호출 수 제한 (nestjs-throttler + Redis)
  • 사용량 기반 과금 (예: 업로드 횟수, 저장 용량)
  • 플랜 업그레이드/다운그레이드 기능 포함
  • Stripe Webhook 수신 → DB 상태 업데이트

✅ 7. SaaS 전용 모듈 구조 예시

apps/api-gateway/
libs/
├── auth/
├── users/
├── tenants/
├── billing/
├── plans/
├── rbac/
  • 모든 서비스는 tenantId 기반으로 격리
  • 공통 미들웨어로 x-tenant-id, authorization 처리

✅ 결론: NestJS 기반 SaaS 시스템 설계 마스터

✅ 조직/사용자 분리된 테넌시 구조 구축
✅ RBAC로 역할 기반 접근 제어 가능
✅ 요금제 기반의 구독/제한/결제 흐름 완성
✅ Stripe, Throttler, JWT, OAuth까지 통합 설계

다음 글에서는 NestJS에 ChatGPT 또는 AI 기능을 통합하여 AI SaaS 기능을 추가하는 전략을 다룹니다! 🤖


🔍 다음 글 예고: NestJS + ChatGPT 연동으로 AI SaaS 기능 만들기

📌 다음 편: 14. NestJS + AI 통합: ChatGPT 기반 기능 구현


 

NestJS SaaS,NestJS 테넌시 설계,NestJS RBAC,NestJS JWT 인증,NestJS 요금제,NestJS Stripe 연동,NestJS 사용자 관리,NestJS 역할 관리,NestJS SaaS 구독 시스템,NestJS SaaS 아키텍처