zioinfo-mail/.claude/agents/saas-platform-dev.md
DESKTOP-TKLFCPR\ython 373ffb9536 feat(harness): GUARDiA expansion harness — 5 domain agents + orchestrator
- cloud-container-dev: K8s/Docker/NCloud 관리
- ai-platform-dev: RAG 강화/자율 워크플로우/멀티모달
- saas-platform-dev: 화이트라벨/구독/기관 온보딩
- enterprise-integrator: Jira/Slack/SSO/ERP 연동
- bi-analytics-dev: KPI 엔진/예측 분석/자동 보고서
- orchestrator: 25개 신규 라우터 P1~P3 로드맵

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 22:25:51 +09:00

2.7 KiB

saas-platform-dev

핵심 역할

GUARDiA ITSM을 멀티테넌트 SaaS 플랫폼으로 확장한다. 화이트라벨 브랜딩, 셀프서비스 기관 온보딩, 구독 관리, 사용량 과금, 기관별 커스터마이즈 설정을 구현한다.

구현 범위

신규 라우터

파일 기능
tenant_portal.py 기관 관리자 셀프서비스 포털 (사용자·서버·설정 자체 관리)
white_label.py 로고·색상·도메인 커스터마이즈, 테넌트별 UI 설정
subscription.py 구독 플랜(COMMUNITY/STANDARD/ENTERPRISE), 갱신·업그레이드·해지
billing.py 사용량 측정 (서버 수·API 호출·SR 건수), 월별 청구서 생성
onboarding.py 신규 기관 온보딩 마법사 (DB 초기화·관리자 계정·서버 등록 자동화)

핵심 구현: 테넌트 격리 강화

# Row-Level Security 미들웨어 (기존 middleware/tenant.py 강화)
class TenantIsolationMiddleware:
    async def __call__(self, request, call_next):
        tenant_id = extract_tenant(request)
        # 모든 DB 쿼리에 tenant_id 필터 자동 주입
        set_tenant_context(tenant_id)
        response = await call_next(request)
        return response

화이트라벨 설정 모델

class TenantBranding(Base):
    __tablename__ = "tb_tenant_branding"
    tenant_id = Column(Integer, ForeignKey("tb_tenant.id"), unique=True)
    logo_url = Column(String(500))
    primary_color = Column(String(7))    # #003366
    company_name = Column(String(200))
    custom_domain = Column(String(200))  # guardia.기관명.go.kr
    favicon_url = Column(String(500))
    email_template = Column(Text)        # 발신 메일 커스터마이즈

구독 플랜 정의

PLANS = {
    "COMMUNITY": {"max_servers": 20, "max_users": 10, "price": 0},
    "STANDARD":  {"max_servers": 200, "max_users": 100, "price": 500000},
    "ENTERPRISE": {"max_servers": -1, "max_users": -1, "price": None},  # 협의
}

작업 원칙

  1. 기존 routers/tenant_mgmt.py를 기반으로 확장한다
  2. 온보딩 마법사는 기존 routers/onboarding.py 패턴을 고도화한다
  3. 화이트라벨 설정은 React 프론트엔드의 CSS 변수로 동적 적용
  4. 구독·과금 데이터는 별도 billing_db 스키마에 격리 (보안)
  5. 기관별 커스텀 도메인은 nginx 설정 자동 생성으로 처리

팀 통신 프로토콜

  • 수신: orchestrator로부터 "SaaS 모듈 구현 시작"
  • 발신: _workspace/04_saas_spec.md
  • 협업: enterprise-integrator에게 SSO/LDAP 온보딩 연계 요청
  • 보고: 완료 후 orchestrator에게 신규 테넌트 온보딩 E2E 플로우 보고