모듈 분류 체계
📝 초안 (Draft)
이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.
Core 모듈의 분류 체계와 관리 원칙을 설명합니다.
개요
Multi-SaaS Kit의 모듈은 필수성, 활성화 시점, 수익화 여부에 따라 세 가지 계층으로 분류됩니다.
┌─────────────────────────────────────────────────────────────┐
│ 모듈 분류 체계 │
├───────────────── ────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Core Base (15개) │ │
│ │ • 필수: 모든 프로젝트에 반드시 필요 │ │
│ │ • 비활성화 불가 │ │
│ │ • 수익화 대상 아님 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Extensions (4개) │ │
│ │ • 선택적: 프로젝트별로 활성화 │ │
│ │ • 프로젝트 생성 시 결정 │ │
│ │ • 수익화 대상 아님 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Plugins (18개) │ │
│ │ • 완전 선택: 런타임에 토글 가능 │ │
│ │ • 독립 패키지 │ │
│ │ • 수익화 대상 (유료 판매) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
분류 비교
| 구분 | Core Base | Extensions | Plugins |
|---|---|---|---|
| 위치 | packages/core/Base/ | packages/core/Extensions/ | packages/plugins/ |
| 필수 여부 | 필수 | 선택적 | 완전 선택 |
| 활성화 시점 | 항상 | 프로젝트 생성 시 | 런타임 |
| 비활성화 | 불가 | 가능 (설정) | 가능 (토글) |
| 수익화 | 불가 | 불가 | 가능 |
| 개수 | 15개 | 4개 | 18개 |
Core Base (15개)
모든 프로젝트에 필수적인 시 스템 기반 기능입니다.
1. Native Core (3개)
자체 개발한 독자 기술로, 특허 출원 가능한 핵심 기술입니다.
| 모듈 | 설명 | 특징 |
|---|---|---|
| 권한 시스템 (Level 0~6, ADR-058) | Level 0-6 계층 구조 | 플랫폼~멤버까지 7단계 |
| PostgreSQL RLS 통합 | DB 레벨 자동 테넌트 격리 | SQL Injection에도 안전 |
| Dual Redis 전략 | Auth(AOF) + Cache(LRU) 분리 | 인증 데이터 보존, 캐시 효율 |
// 권한 분류 (Level 0~6)
Level 0: Platform Admin // 플랫폼 전체 관리
Level 1: SaaS Admin // SaaS 제품 관리
Level 2: Tenant Admin // 테넌트 관리
Level 3: Organization Admin
Level 4: Workspace Admin
Level 5: Group Leader
Level 6: Member
// PostgreSQL RLS
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.tenant_id')::uuid);
2. Integrated Core (3개)
Laravel 생태계의 검증된 패키지를 통합합니다.
| 모듈 | 패키지 | 용도 |
|---|---|---|
| 인증 | Laravel Sanctum | API 토큰, SPA 인증 |
| 테넌시 | Stancl/Tenancy v4 | 멀티테넌트 기반 |
| 어드민 | Filament v4 | 관리자 UI |
Spatie Permission 미사용
spatie/laravel-permission은 사용하지 않습니다. Level 0~6 계층 시스템과 RLS 통합에 부적합하며, UserPermission 모델로 대체합니다.
3. Core Base 기능 (5개)
| 모듈 | 설명 | 관련 문서 |
|---|---|---|
| Audit | 모든 변경 감사 로그 | Audit 모듈 |
| Security | 보안 헤더, XSS 방지 | - |
| Rate Limiting | API 요청 제한 | - |
| Tenant Security | 테넌트 컨텍스트 관리 | Tenant 모듈 |
| Security Monitoring | 권한 거부/침입 탐지 로깅 | - |
4. Core Infrastructure (4개)
| 모듈 | 설명 |
|---|---|
| SaasProduct | 1:N SaaS 구조 지원 |
| Chief/Sub Admin | UserPermission 기반 세밀한 권한 |
| Menu Permission | config 기반 메뉴 권한 자동화 |
| Background Jobs | Queue + Horizon 기반 |
Extensions (4개)
Core에 포함되지만 프로젝트별로 선택적으로 활성화합니다.
| Extension | 설명 | 적합 프로젝트 | 문서 |
|---|---|---|---|
| Guardian | 보호자-피보호자 관계 | LMS, 교육, 의료 | Guardian |
| Impersonate | 사용자 전환 | 고객지원, B2B | Impersonate |
| Admin Override | 긴급 권한 우회 | 금융, 규정준수 | - |
| Feature Visibility | 기능 가시성 제어 | A/B 테스트, 롤아웃 | - |
활성화 설정
// config/core.php
'extensions' => [
'guardian' => env('CORE_GUARDIAN_ENABLED', false),
'impersonate' => env('CORE_IMPERSONATE_ENABLED', true),
'admin_override' => env('CORE_ADMIN_OVERRIDE_ENABLED', false),
'feature_visibility' => env('CORE_FEATURE_VISIBILITY_ENABLED', true),
],
# .env
CORE_GUARDIAN_ENABLED=true # 교육/의료 프로젝트
CORE_IMPERSONATE_ENABLED=true # 대부분 활성화
CORE_ADMIN_OVERRIDE_ENABLED=false
CORE_FEATURE_VISIBILITY_ENABLED=true
프로젝트 유형별 권장
| 프로젝트 | Guardian | Impersonate | Admin Override | Feature Visibility |
|---|---|---|---|---|
| 일반 SaaS | ❌ | ✅ | ❌ | ✅ |
| LMS/교육 | ✅ | ✅ | ❌ | ✅ |
| 의료/헬스케어 | ✅ | ✅ | ✅ | ✅ |
| 금융/핀테크 | ✅ | ✅ | ✅ | ✅ |
| E-Commerce | ❌ | ✅ | ❌ | ✅ |
Plugins (18개)
런타임에 토글 가능한 확장 기능으로, 유료 판매 대상입니다.
티어별 분류
| 티어 | 설명 | 개수 | 예시 |
|---|---|---|---|
| L0 독립 | Core만 의존 | 7개 | TwoFactorAuth, PasswordPolicy |
| L1 복합 | Core + L0/Extensions 의존 | 4개 | Notification, ActivityLog |
| 비즈니스 | 수익화 핵심 | 4개 | Subscription, Invoice |
| 엔터프라이즈 | 대기업 특화 | 3개 | SSO, DataExport |
주요 플러그인
| 플러그인 | 설명 | 가격 |
|---|---|---|
| TwoFactorAuth | TOTP + SMS 2차 인증 | $9/월 |
| PasswordPolicy | 계층별 비밀번호 정책 | 무료 |
| Subscription | 구독 결제 관리 | $19/월 |
| Invoice | 청구서/세금계산서 | $15/월 |
| Analytics | 사용량 분석 대시보드 | $12/월 |
| SSO | SAML/OAuth 통합 인증 | $29/월 |
| DataExport | 대량 데이터 내보내기 | $9/월 |
폴더 구조
packages/
├── core/ # Core 모듈
│ ├── Base/ # 필수 Core (15개)
│ │ ├── Permission/ # 권한 분류 (Level 0~6)
│ │ ├── Tenant/ # 테넌시
│ │ ├── Auth/ # 인증
│ │ ├── Audit/ # 감사 로그
│ │ ├── Security/ # 보안
│ │ └── ...
│ │
│ ├── Extensions/ # 선택 Core (4개)
│ │ ├── Guardian/ # 보호자 관계
│ │ ├── Impersonate/ # 사용자 전환
│ │ ├── AdminOverride/ # 긴급 권한
│ │ └── FeatureVisibility/ # 기능 가시성
│ │
│ ├── Contracts/ # Interface 정의
│ ├── Providers/ # ServiceProvider
│ └── config/ # core.php
│
└── plugins/ # Plugins (18개)
├── TwoFactorAuth/
├── Subscription/
├── Analytics/
└── ...
프로젝트 연결
workspace/_template/web/app/
├── Core → ../../../../packages/core # 심볼릭 링크
└── Plugins → ../../../../packages/plugins
분류 판단 기준
새 기능 추가 시 분류 판단:
Core Base 여부
□ 모든 프로젝트에 반드시 필요한가?
□ 비활성화하면 시스템이 동작하지 않는가?
□ 플랫폼의 핵심 인프라인가?
→ YES: Core Base
Extensions vs Plugins
□ Core 기능과 밀접하게 연관?
YES → Extensions 후보
NO → Plugins
□ 프로젝트 생성 시 결정해야 하는 기능?
YES → Extensions
NO → Plugins
□ 런타임에 동적 토글이 필요?
YES → Plugins
NO → Extensions
□ 유료 판매 대상?
YES → Plugins
NO → Extensions (Core에 포함)