2.7 KiB
2.7 KiB
테넌트 기본 아키텍처 및 데이터 정책 (Tenant Architecture Policy)
본 문서는 Baron SSO의 테넌트 다형성(Polymorphism) 모델과 데이터베이스 스키마, 그리고 외부 시스템(Kratos)과의 역할 분리에 대한 핵심 아키텍처 정책을 정의합니다.
1. 테넌트 다형성 모델 (Polymorphic Tenant)
모든 형태의 격리 공간은 Tenant라는 단일 개념(Base Unit)으로 취급되며, 데이터베이스의 type 속성을 통해 그 역할이 구분됩니다.
PERSONAL: B2C 개인 워크스페이스. 개인 유저 가입 시 1:1로 자동 생성됩니다.COMPANY: B2B 법인/기업. 독립적인 비즈니스와 사내 조직도를 가집니다.COMPANY_GROUP: B2B2B 지주사/그룹사. 여러COMPANY를 하위로 거느리며 권한을 통합합니다.USER_GROUP: 사내 조직 (본부/팀 등). 과거에는 분리된 개념이었으나, 현재는 완벽한 통합을 위해 테넌트의 한 종류로 1:1 매핑됩니다.
2. 외부 백엔드 데이터베이스 의무 채택 (Separation of SoT)
Kratos 내부 트레이트(Traits)에 테넌트, 직급 등 관계형 데이터를 저장하는 것은 토큰 비대화 및 쿼리 성능 저하를 일으키는 안티 패턴입니다. 따라서 데이터의 진실 공급원(SoT)을 철저히 분리합니다.
- Ory Kratos (Identity SoT): 이메일, 패스워드 등 순수 식별 정보만 저장합니다.
- PostgreSQL (Business SoT): 반드시 커스텀 외부 백엔드 DB를 구축하여, 테넌트의 트리 구조, 사용자 직급, 애플리케이션 설정 등을 전담하여 관리합니다.
3. 데이터베이스 스키마 분리 전략
테넌트 테이블의 비대화를 막기 위해, Identity(신분증) 역할과 무거운 Business 데이터를 분리 조인(Join)합니다.
tenants테이블: 최소한의 식별 정보(id,name,type)만 저장하는 초경량 베이스 테이블.company_settings테이블:COMPANY및COMPANY_GROUP타입 전용 무거운 비즈니스 설정 (결제 정보, 커스텀 도메인 등).user_groups테이블:USER_GROUP타입 전용 사내 조직도 메타데이터 (parent_id, 조직장 정보 등).
4. 논리적 다중 테넌트 OIDC 관리 (Logical Pooling)
인프라 비용의 팽창을 막기 위해 테넌트별로 Hydra(OAuth2) 데이터베이스를 물리적으로 복제하는 방식은 금지합니다. 대신 공유되는 소수의 Hydra 클러스터 앞단에 도메인 및 헤더를 재작성하는 지능형 프록시를 배치하고, 백엔드의 동의(Consent) 로직을 통해 요청된 클라이언트의 테넌트 맥락에 맞는 **동적 클레임(Dynamic Claim)**을 ID Token에 주입합니다.