테넌트 모델
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 조건이 주입됩니다.