Zum Hauptinhalt springen

Public 스키마 ERD

개요

public 스키마의 플랫폼 공유 테이블입니다. RLS 없음 — lumie_apptenant_id 필터 없이 전체 행을 읽을 수 있습니다.

schema_name 컬럼(tenants)과 별도 tenant_{slug} 물리 스키마는 V18에서 제거되었습니다.

ERD

테이블 상세

tenants

학원(테넌트) 디렉토리. 내부 요청은 slug로 식별하고, 공개 홈페이지는 custom_id 경로(lumie-edu.com/{customId}) 또는 custom domain으로 라우팅합니다.

  • slug — URL-safe 식별자, UNIQUE
  • custom_id — 학원이 직접 설정하는 커스텀 ID (V9)
  • plan_idplans.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

마이그레이션 이력

버전내용
V1tenants, tenant_settings 생성
V2users 생성
V4federated_identities 추가
V6email 추가
V7tenant contact 필드 추가
V8tenants.logo_object_key 추가, tenant_settings 제거
V9ENTERPRISE → MAX 리네임, custom_id 추가
V10custom domain 필드 추가
V11custom domain manual 모드 단순화
V12users OWNER-only 슬림화
V15타임스탬프 TIMESTAMPTZ 전환
V18RLS baselinetenants.schema_name 제거, 모든 테넌트 테이블 public 통합
V22owner_directory 신설
V50tenants.custom_id NOT NULL 강제
V60tenants.hidden_sidebar_item_ids 추가