테넌트, 호스트, 데이터 필터
ToRun은 ABP Framework의 멀티테넌트 모델 위에 만들어졌습니다. IsMultiTenant로 표시된 행에는 TenantId 열이 있어 프레임워크가 자동으로 걸러 냅니다. 한 테넌트의 컨텍스트에서 실행된 쿼리는 다른 테넌트의 행을 절대 보지 못합니다. 호스트 컨텍스트(TenantId == null)는 별도의 영역을 봅니다. SubscriptionPlan, AiProvider, LegalDocument 같은 표준 카탈로그가 그곳에 있습니다.
호스트를 온전한 참여자로 대하는 이유
대부분의 SaaS 제품은 호스트를 "관리 도구"로 덧붙입니다. 당사는 호스트를 형제 테넌트로 모델링합니다. 호스트에는 자체 대시보드, 자체 AI 정책, 자체 청구 관계가 있습니다. 덕분에 당사의 프로덕션 트래픽을 모든 고객이 쓰는 것과 같은 구성 요소 위에서 운영할 수 있습니다.
테넌트별 요금제 연동 기능
구독 요금제에는 FeatureLimit, Entitlement, Capability, Mode 행이 들어 있습니다. 테넌트가 요금제를 활성화하면 사용할 수 있는 기능의 집합은 그 요금제와 전역 카탈로그의 교집합이 됩니다. 새 모드를 추가해도 테넌트마다 손댈 필요가 없습니다. 보유한 요금제에 그 모드가 포함되어 있으면 자동으로 받게 됩니다.
모든 호출에서의 BYOK 주입
인프라를 공유하더라도 BYOK 자격 증명은 그것을 소유한 테넌트 범위에 머뭅니다. 각 AI 요청은 같은 데이터 필터로 테넌트 컨텍스트 안에서 자격 증명을 가져오므로, 저장소 계층에서 테넌트 간에 키가 새어 나갈 수 없습니다.
일부러 하지 않는 것
당사는 데이터베이스나 프로세스 수준에서 테넌트를 격리하지 않습니다. 테넌트마다 데이터베이스를 따로 확장하는 비용은 멀티테넌트 SaaS 제품의 단위 경제성을 무너뜨립니다. 처음부터 그에 맞게 스키마를 설계했다면 데이터 필터와 테넌트별로 나뉜 캐시로 충분합니다.