PlatformUpdated 2025-04-01

Multi-tenant Design

테넌트 격리 전략 및 MariaDB 스키마 설계 패턴.

Multi-tenantMariaDBSpring BootJWT

개요

CtrlPlus는 여러 고객사(테넌트)가 하나의 플랫폼을 공유하면서도 데이터가 완전히 격리되는 멀티테넌트 아키텍처를 사용합니다.

격리 전략 비교

방식격리 수준비용CtrlPlus 채택
별도 DB 인스턴스최상높음❌
스키마 분리높음중간✅
테이블 Row 분리낮음낮음일부 공통 테이블

스키마 구조

공통 스키마 테이블

SQL

테넌트 스키마 테이블 (CtrlFarm 예시)

SQL

요청 흐름 — tenantId 전파

Spring Boot 구현

TenantContext

Java

JWT 필터에서 tenantId 추출

Java

DataSource 라우팅

Java

Service 레이어

Java

테넌트 온보딩 플로우

주의사항

  • TenantContext.clear() — 요청 종료 후 반드시 ThreadLocal 해제
  • 스키마명은 tenant_ 접두사 고정으로 SQL Injection 방지
  • 공통 테이블(tenants, users) 접근 시 스키마 명시 필요
  • 테넌트간 데이터 집계가 필요한 경우 공통 스키마에 뷰(View) 생성