원문: https://blog.bytebytego.com/p/a-guide-to-multi-tenancy-benefits (일부 내용은 구독자 전용)
핵심 질문
하나 이상의 고객에게 서비스하는 소프트웨어 기업이라면 반드시 답해야 하는 질문이 있다.
각 고객에게 별도의 시스템 복사본을 제공해야 할까, 아니면 모두가 하나를 공유해야 할까?
전용 인스턴스 vs 공유 시스템
고객별 전용 복사본은 추론하기 쉽지만, 새로운 고객이 늘어날수록 수백 개의 별도 복사본을 유지하는 비용이 기하급수적으로 증가한다. 반면 모든 고객이 하나의 시스템을 공유하면 비용이 훨씬 저렴하다. 우리가 일상적으로 사용하는 대부분의 소프트웨어가 복제가 아닌 공유를 위해 만들어진 이유다. 이러한 시스템을 멀티 테넌트(Multi-Tenant) 시스템이라고 하며, 각 고객은 다른 테넌트들과 리소스를 공유하는 **테넌트(Tenant)**가 된다.
그러나 공유는 어려움의 시작이기도 하다.
공유의 위험성
많은 고객이 동일한 데이터베이스, 서버, 백그라운드 잡을 사용하게 되면 그들의 운명이 연결된다:
- 성능 오염: 한 고객이 무거운 리포트를 실행하면 다른 모든 고객의 서비스가 느려질 수 있다
- 단일 장애점: 하나의 잘못된 배포가 한 고객 대신 모든 고객에게 영향을 미친다
- 데이터 유출 리스크: 가장 심각한 위험 — 한 고객에게 다른 고객의 데이터가 노출되는 것
이 모든 상황을 멀티 테넌트 시스템이 적극적으로 처리해야 한다.
이 글에서 다루는 내용
- 테넌트(Tenant)란 정확히 무엇인가
- 고객 데이터의 물리적 위치: 공유 테이블 하나부터 전용 데이터베이스까지, 각 옵션의 비용
- 격리 vs 공유의 선택: 데이터베이스뿐 아니라 컴퓨트 레이어와 그 너머까지
- 노이지 이웃(Noisy Neighbor) 문제: 공유가 공정성에 미치는 영향과 할당량/한도를 통한 재구축 필요성
- 블라스트 반경(Blast Radius): 장애가 전파되는 범위
- 테넌트 컨텍스트: 시스템 전반에 흐르는 테넌트 식별 개념
핵심 요약 (20줄)
- 멀티 테넌시(Multi-Tenancy)는 다수의 고객(테넌트)이 하나의 시스템을 공유하는 아키텍처다.
- 고객별 전용 인스턴스는 비용이 고객 수에 비례해 폭발적으로 늘어나 대부분 비현실적이다.
- 멀티 테넌시의 핵심 이점: 비용 효율성, 운영 단순화, 빠른 배포.
- 핵심 과제: 노이지 이웃, 단일 장애점, 데이터 격리 보장.
- 데이터 격리 전략은 스펙트럼으로 존재한다: 공유 테이블 → 스키마 분리 → 전용 DB.
- 공유 테이블(Row-level isolation): 비용 최소화, 구현 간단 — 하지만 데이터 격리 실수 위험 최고.
- 스키마 분리: 중간 비용, 중간 격리 — 쿼리 실수 시 데이터 유출 위험 일부 감소.
- 전용 DB per tenant: 강력한 격리 보장, 하지만 고객 수 증가 시 운영 복잡도 급증.
- 노이지 이웃 문제: 한 테넌트의 과도한 자원 사용이 전체 서비스 품질을 낮춘다.
- 해결책: 테넌트별 할당량(Rate Limit), 리소스 풀 분리, 프리미엄 고객 전용 인프라.
- 블라스트 반경 최소화: 장애가 모든 테넌트에 전파되지 않도록 격리 단위 설계가 중요.
- 테넌트 컨텍스트는 시스템 전반에 흘러야 한다 — 모든 DB 쿼리, 캐시, 메시지 큐에 tenant_id 포함.
- Row-level Security(RLS) 같은 DB 레벨 강제가 코드 레벨 실수를 방어한다.
- 컴퓨트 레이어도 격리 선택이 필요: 공유 프로세스 vs 테넌트별 컨테이너/프로세스.
- 엔터프라이즈 고객은 종종 전용 인스턴스(Single-Tenant)를 요구 — 비용과 격리 요구 균형 필요.
- 배포 전략: 모든 테넌트 동시 배포 vs 카나리/그룹별 롤아웃으로 블라스트 반경 제어.
- 모니터링은 테넌트별로 분리돼야 한다 — 누가 리소스를 독점하는지 가시성이 핵심.
- SaaS 성장 단계별로 최적 전략이 다르다: 초기엔 공유, 성장 후엔 하이브리드 격리 전략.
- 멀티 테넌시는 단순한 아키텍처 결정이 아닌 비즈니스 모델과 연결된 전략적 선택이다.
- 핵심: 공유는 비용을 낮추지만 격리 실패는 신뢰를 무너뜨린다 — 아키텍처로 신뢰를 설계하라.