English

Multi-tenancy

MOAI Cloud는 워크스페이스 단위 테넌트 격리를 제공합니다. 모든 데이터는 cloud_tenants → cloud_users → resources의 3단 계층으로 분리됩니다.

테넌트 모델

  • cloud_tenants — 워크스페이스(고객사 1곳 = 1 tenant)
  • cloud_users — 워크스페이스 멤버(OWNER / ADMIN / MEMBER)
  • cloud_api_keys — tenant 단위 발급, 모듈별 권한 스코프
  • 모듈 리소스(words, events, posts 등) — 모두 tenantId 컬럼으로 격리

데이터 격리

모든 요청은 API Key에서 추출한 tenantId로 자동 필터링됩니다. 애플리케이션 레이어에서 강제되며, Phase 1에서는 PostgreSQL RLS는 활성화되어 있지 않습니다(아래 Phase 2 참조).

sql
-- 모든 조회는 tenantId WHERE가 자동 주입됨
SELECT * FROM mod_anon_posts
WHERE tenant_id = 'tn_3f29...'   -- 자동
  AND board_id = 'b_travel';

엔드유저 식별

모듈 API의 userId 필드는 고객사 자체 유저 ID를 사용합니다. MOAI Cloud는 별도 회원 시스템을 강제하지 않습니다. userId는 tenant 내에서만 유일하면 됩니다(글로벌 unique 불필요).

API Key 스코프

키 발급 시 모듈별 권한을 지정할 수 있습니다. 예: 모바일 클라이언트용 키는 lingua:read만, 서버용 키는 전체 권한.

json
{
  "id": "key_3f29",
  "prefix": "mcl_live_3f29",
  "scopes": [
    "lingua:read",
    "chat:write",
    "notify:write"
  ],
  "tenantId": "tn_3f29..."
}

Phase 2: RLS

PostgreSQL Row Level Security(RLS)는 2026 Q4에 활성화될 예정입니다. 현재는 애플리케이션 레이어에서 tenant 격리가 강제되며, 모든 쿼리에 자동으로 tenant_id 조건이 주입됩니다.