노트

멀티테넌시 데이터 격리

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"인 하이브리드가 흔하다

"dedicated"의 다른 뜻

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

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

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

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 데이터 무결성

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

  • 최종 일관성

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

  • 데이터베이스 다중화

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

  • CRDT

    여러 사본이 각자 독립적으로 수정돼도, 변경이 어떤 순서로 도착하든 병합하면 항상 같은 상태로 수렴하도록 수학적으로 설계한 자료구조. 이름 그대로 "충돌 없는 복제 데이터 타입"이다. 중앙 서버가 순서를 정해 주지 않아도 된다.

  • ACID

    ACID는 DB 트랜잭션이 보장해야 할 네 가지 성질이다. 트랜잭션은 "계좌 이체의 출금 + 입금"처럼 함께 성공하거나 함께 실패해야 하는 논리적 작업 단위다.

보기 옵션