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) 생성