노트

멀티테넌시 데이터 격리

Multi-Tenancy Data Isolation

백엔드#db#architecture · 연결된 개념 4개

쉽게 말하면

멀티테넌시는 한 건물에 여러 회사가 입주하는 것과 같아요. 큰 사무실에 칸막이만 두고 같이 쓸지, 층을 나눌지, 아예 건물을 따로 쓸지에 따라 비용과 안전이 달라지죠.

비유의 한계 칸막이 방식(공유 DB)에선 쿼리에 tenant_id 조건 하나만 빠져도 남의 데이터가 보여요. 그래서 RLS로 DB가 강제하게 하고, 격리가 중요한 대형 고객만 전용 DB를 주는 하이브리드가 흔해요.

멀티테넌시(multi-tenancy)는 하나의 서비스가 여러 고객(테넌트, tenant)의 데이터를 함께 다루는 구조다. 핵심 설계 질문은 테넌트 사이의 데이터를 얼마나 강하게 떼어 놓을 것인가이고, 한쪽 끝은 공유 DB, 반대쪽 끝은 테넌트 전용 DB다.

격리 수준

공유 DB + 행 구분스키마 분리전용 DB(dedicated)
구조한 테이블에 tenant_id로 구분테넌트마다 스키마테넌트마다 DB·인스턴스
격리논리적중간물리적
비용·운영싸고 단순중간비싸고 복잡
위험필터 한 줄 실수 = 유출마이그레이션 반복테넌트 수만큼 마이그레이션
  • 공유 DB에서는 애플리케이션이 모든 쿼리에 tenant_id 조건을 붙여야 한다. 깜빡하면 남의 데이터가 보인다. 이를 DB 수준에서 강제하는 장치가 RLS다
  • 전용 DB는 애초에 남의 데이터에 닿을 수 없어 금융·의료처럼 격리가 중요한 고객에게 제공한다
  • 실무에서는 "기본은 공유 DB + RLS, 보안 요구가 큰 대형 고객만 전용 DB"인 하이브리드가 흔하다

공유 배포와 단일 테넌트 배포

테넌트(tenant)는 원래 세입자·입주자라는 뜻이다. 한 건물을 여러 입주자가 나눠 쓰듯, 멀티테넌트는 코드와 인프라를 여러 고객이 함께 쓰고 데이터만 테넌트별로 가른다. 반대인 싱글테넌트는 고객마다 소프트웨어와 인프라를 통째로 따로 둔다.

  • 공유 배포의 이점: 자원을 나눠 쓰니 고객당 비용이 낮다. 배포 대상이 하나라서 코드를 한 번 배포하면 모든 테넌트에 반영된다. 새 고객은 인프라를 새로 세우지 않고 테넌트 하나만 추가하면 되니 온보딩이 빠르다
  • 공유 배포의 위험: 공유 구성 요소 하나의 장애가 모든 테넌트의 장애가 된다. 성능 문제나 잘못된 변경도 고객 전체가 함께 떠안는다
  • 단일 테넌트 배포의 이점: 한 테넌트의 무거운 사용이 다른 테넌트 성능을 깎는 시끄러운 이웃(noisy neighbor) 문제를 피한다. 변경을 테넌트별로 점진 배포할 수 있어 시스템 전체 장애 가능성이 줄어든다. 대신 비용 효율이 낮고 업데이트 운영이 무겁다

"dedicated"의 다른 뜻

dedicated DB는 표준 용어가 아니라 맥락에 따라 뜻이 갈린다.

  • 용도 전용: 분석·로그·검색 소스처럼 무거운 작업을 핵심 DB에서 떼어 낸 DB. 워크로드 격리(workload isolation)가 목적이다(읽기 전용 복제본)
  • 테넌트 전용: 위의 멀티테넌시 의미
  • 인스턴스 전용: 클라우드 플랜에서 다른 사용자와 하드웨어를 공유하지 않는 등급. "시끄러운 이웃(noisy neighbor)" 영향을 피한다

공통 트레이드오프는 "격리·성능·보안을 얻는 대신 비용과 운영 복잡도가 오른다"다. 테넌트가 아주 많아지면 샤딩으로 이어지고, 서비스 경계를 나누는 관점은 바운디드 컨텍스트와도 닿는다.

출처: Azure Architecture Center - Tenancy models for a multitenant solution

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 데이터 무결성

    데이터 무결성(data integrity)은 저장된 데이터가 정확하고 일관되며 믿을 수 있는 상태로 유지되는 것이다. 재고가 100개로 보이는데 실제로 50개라면 무결성이 깨진 것이다. 관계형 DB는 이를 제약 조건(constraint)으로 강제한다.

  • 권한 있는 데이터(기준 데이터)

    권한 있는 데이터(authoritative data)는 어떤 값이 맞는지 판단할 때 최종 기준으로 삼기로 정한 데이터의 원천이다. 여러 곳에 같은 정보가 있고 값이 서로 다르면 권한 있는 쪽을 따르고, 나머지는 사본으로 다룬다. 데이터 관리에서는 이런 저장 시스템을 기록 시스템(System of Record, SoR)이라 부른다.

  • 최종 일관성

    최종 일관성(eventual consistency)은 "지금 당장은 저장소마다 값이 다를 수 있지만, 새 변경이 멈추면 결국 같아진다"는 보장이다. 원본 DB와 검색 색인·캐시·다른 서비스처럼 물리적으로 분리된 저장소를 한 트랜잭션으로 묶을 수 없을 때 받아들이는 일관성 모델(consistency model)이다.

  • 무상태와 상태 유지

    무상태(stateless)는 서버가 이전 요청을 기억하지 않아도 요청 하나만 보고 처리할 수 있는 구조이고, 상태 유지(stateful)는 서버가 요청 사이에 클라이언트 상태를 저장해 두고 다음 요청을 처리할 때 그 상태를 찾아보는 구조다.

  • 데이터베이스 다중화

    같은 데이터를 여러 DB 서버에 복제해 두는 것. 가장 흔한 형태는 원본을 가진 주(Primary) 서버가 쓰기를 받고, 사본을 받는 부(Replica) 서버들이 읽기를 나눠 맡는 구조다.

보기 옵션