Public 스키마 ERD
개요
public 스키마의 플랫폼 공유 테이블입니다. RLS 없음 — lumie_app이 tenant_id 필터 없이 전체 행을 읽을 수 있습니다.
schema_name컬럼(tenants)과 별도tenant_{slug}물리 스키마는 V18에서 제거되었습니다.
ERD
테이블 상세
tenants
학원(테넌트) 디렉토리. 내부 요청은 slug로 식별하고, 공개 홈페이지는 custom_id 경로(lumie-edu.com/{customId}) 또는 custom domain으로 라우팅합니다.
slug— URL-safe 식별자, UNIQUEcustom_id— 학원이 직접 설정하는 커스텀 ID (V9)plan_id—plans.id참조 (FREE / BASIC / PRO / MAX)custom_domain— 수동 설정 커스텀 도메인 (Traefik IngressRoute와 연동)logo_object_key— 학원 로고 파일의 오브젝트 스토리지 키 (V8)phone,address— 학원 대표 연락처와 주소 (V7)hidden_sidebar_item_ids— 학원에서 숨긴 관리자 사이드바 메뉴 ID 목록 (V60)version— 테넌트 수정 충돌 방지를 위한 낙관적 잠금 버전 (V17)status— PENDING / PROVISIONING / ACTIVE / SUSPENDED
V18에서
schema_name컬럼 제거됨. Schema-per-tenant 폐기 후 불필요해졌습니다.
owner_directory (V22 신설)
OWNER 사용자의 경량 라우팅 테이블. RLS 없음 — pre-auth 라우팅에 사용합니다.
public.users는 RLS로 보호되어 app.tenant_id가 설정되기 전에는 조회 불가입니다. 로그인 시 사용자 ID → 테넌트 매핑을 이 테이블에서 조회합니다.
id— OWNER의users.id와 동일 값 (application-supplied, BIGINT not BIGSERIAL)user_login_id— UNIQUE, 로그인 ID
federated_identities
OAuth 제공자별 외부 ID 매핑.
- 한 사용자가 여러 OAuth 제공자 연동 가능
(provider, provider_user_id)조합 UNIQUE
마이그레이션 이력
| 버전 | 내용 |
|---|---|
| V1 | tenants, tenant_settings 생성 |
| V2 | users 생성 |
| V4 | federated_identities 추가 |
| V6 | email 추가 |
| V7 | tenant contact 필드 추가 |
| V8 | tenants.logo_object_key 추가, tenant_settings 제거 |
| V9 | ENTERPRISE → MAX 리네임, custom_id 추가 |
| V10 | custom domain 필드 추가 |
| V11 | custom domain manual 모드 단순화 |
| V12 | users OWNER-only 슬림화 |
| V15 | 타임스탬프 TIMESTAMPTZ 전환 |
| V18 | RLS baseline — tenants.schema_name 제거, 모든 테넌트 테이블 public 통합 |
| V22 | owner_directory 신설 |
| V50 | tenants.custom_id NOT NULL 강제 |
| V60 | tenants.hidden_sidebar_item_ids 추가 |