목록 보기
Spring Boot와 JPA로 시작하는 데이터베이스 멀티테넌시
아키텍처

Spring Boot와 JPA로 시작하는 데이터베이스 멀티테넌시

넥스트리
넥스트리
2026년 10월 21일

두줄요약

Hibernate 멀티테넌시로 행·스키마·DB 분리와 테넌트별 조회 흐름을 설명했습니다.\n세션 경계, 네이티브 SQL, 커넥션 풀 운영 시 주의점을 정리했습니다.

문제 상황

  • Repository 메서드마다 반복되는 테넌트 조건과 누락 시 타 테넌트 데이터 조회·수정·삭제 위험
  • 행·스키마·DB 분리 방식별 테넌트 데이터 격리 지점의 차이

구조와 흐름

  • 요청 헤더의 테넌트 ID를 ScopedValue 기반 TenantContext에 요청 범위로 바인딩
  • CurrentTenantIdentifierResolver가 세션 생성 시점의 테넌트 ID 제공
  • 행 분리는 SQL 조건, 스키마 분리는 Connection.setSchema(), DB 분리는 테넌트별 DataSource 선택

해결 방법

  • Hibernate @TenantId로 엔티티 저장 시 테넌트 ID 설정 및 JPQL 기반 조회 조건 자동 적용
  • TenantSchemaMapper로 테넌트별 스키마 매핑, MultiTenantConnectionProvider로 테넌트별 커넥션 풀 라우팅
  • 동일한 엔티티·Repository·서비스 코드에서 설정 기반으로 스키마 분리와 DB 분리 전환

주의할 점

  • 네이티브 SQL에는 @TenantId 조건 미적용
  • 테넌트 전환 시 새 세션 필요, 기존 트랜잭션이나 OSIV 세션 재사용 시 조회 대상 미변경
  • 테넌트별 권한 검증, 커넥션 풀 총량, 스키마·DB 생성과 마이그레이션·백업 절차 고려

다음 읽기

비슷한 주제의 백엔드 글

멀티 테넌트 데이터를 격리하고 더 안전하게 만드는 방법

멀티 테넌트 데이터의 격리 수준과 행 단위 격리의 장단점을 정리했습니다. 쿼리에서 tenant_id 사용을 강제하고 암호화로 보호하는 방법도 소개했습니다.

NHN
NHN
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...