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