멀티테넌트는 하나의 소프트웨어 인스턴스가 여러 고객에게 서비스를 제공하면서, 각 테넌트의 데이터와 설정을 논리적으로 격리하는 아키텍처 패턴입니다. SaaS(Software as a Service) 환경에서 핵심적으로 사용되며, 비용 효율성과 확장성을 동시에 달성할 수 있습니다.


Multitenancy

Multitenancy는 여러 조직이나 사용자가 하나의 애플리케이션 인스턴스와 인프라를 공유하면서도 각자의 데이터와 설정을 독립적으로 유지하는 구조입니다. 테넌트는 고객, 조직, 부서 등 논리적으로 분리된 사용자 집합을 의미합니다.

  • 비용 효율성: 인프라와 운영 비용을 여러 테넌트가 공유
  • 확장성: 새로운 테넌트 추가가 빠르고 효율적
  • 유지보수성: 단일 코드베이스로 모든 테넌트 관리
  • 데이터 격리: 각 테넌트의 데이터는 논리적으로 분리

Database Per Tenant

각 테넌트마다 별도의 데이터베이스를 생성하여 완전한 데이터 격리와 높은 보안성을 제공합니다.

  • 데이터가 물리적으로 분리됨
  • 테넌트별 백업/복구/확장 용이
  • 인프라 비용 및 관리 복잡도 증가
  • 주로 보안이 중요한 환경에 적합

Schema Per Tenant

하나의 데이터베이스 내에서 테넌트별로 스키마를 분리하여 데이터를 저장합니다.

  • 데이터베이스는 공유, 스키마 단위로 데이터 격리
  • 격리와 관리 효율성의 균형
  • 일부 DBMS(PostgreSQL 등)에서 지원
  • 테넌트 수가 많아지면 스키마 관리 복잡

Shared Database

하나의 데이터베이스와 테이블을 모든 테넌트가 공유하는 방식입니다. 각 행에 테넌트 식별자(예: tenant_id)를 추가하여 논리적으로 데이터를 구분합니다.

  • 인프라 비용이 가장 저렴
  • 테넌트 수 증가에도 관리가 단순
  • 각 행에 테넌트 식별자를 통한 논리적 격리(row-level 방식)
  • 쿼리 성능 저하 및 데이터 유출 위험
  • 테넌트별 백업/복구 어려움
  • 소규모/빠른 확장 환경에 적합
패턴 격리 수준 비용 관리 난이도
Database per Tenant 높음 높음 높음
Schema per Tenant 중간 중간 중간
Shared Database 낮음 낮음 낮음

SaaS

SaaS(Software as a Service)는 소프트웨어를 인터넷을 통해 서비스 형태로 제공하는 클라우드 컴퓨팅 모델입니다. 사용자는 소프트웨어를 직접 설치하거나 관리할 필요 없이, 웹 브라우저 등 클라이언트를 통해 서비스에 접근합니다. SaaSMultitenancy 구조를 기반으로 하여, 하나의 애플리케이션 인스턴스가 여러 고객에게 서비스를 제공합니다.

  • 구독 기반: 사용자는 월별/연별 구독료를 지불하고 소프트웨어를 사용
  • 자동 업데이트: 공급자가 소프트웨어를 중앙에서 관리 및 업데이트
  • 접근성: 인터넷만 있으면 어디서든 접근 가능
  • 확장성: 사용량에 따라 손쉽게 확장/축소 가능


References