백엔드
멀티 테넌트 데이터를 격리하고 더 안전하게 만드는 방법
두줄요약
멀티 테넌트 데이터의 격리 수준과 행 단위 격리의 장단점을 정리했습니다. 쿼리에서 tenant_id 사용을 강제하고 암호화로 보호하는 방법도 소개했습니다.
핵심 내용
- 멀티 테넌트 서비스의 데이터 격리 수준을 행 단위, 테이블 단위, 데이터베이스 단위로 구분
- 행 단위 격리는 비용과 구조 면에서 유리하지만 보안 위험과 성능 저하 가능성 존재
- 격리 강화를 위해 쿼리에서 tenant_id 사용을 시스템적으로 강제화하는 방법 소개
- 격리 실패 시 리스크 완화를 위해 테넌트별 고유 키 암호화 저장 필요성 언급
주의할 점
- tenant_id가 빠진 조회 쿼리는 다른 테넌트 데이터 접근 위험 초래
- 애플리케이션 관습에만 의존하면 코드 리뷰를 통과해도 격리 실패 가능
- 단순 문자열 검증보다 SQL Parser 기반 검사가 더 적절할 수 있음
적용해볼 점
- JDBC DataSource Wrapper와 Spring BeanPostProcessor로 tenant_id 검증 강제화
- PreparedStatement 사용을 강제하고 Statement 사용을 차단
- 중앙 거버넌스 관점에서는 데이터베이스 미들웨어 도입 검토
