Multi-SaaS Module System
MSK는 하나의 Laravel 플랫폼에서 여러 SaaS를 운영하거나, 각 SaaS를 독립 프로젝트로 분리할 수 있는 표준 구조를 제공합니다.
2-레이어 분리
| 레이어 | 위치 | 생성 방법 | 의미 |
|---|---|---|---|
| 파일시스템 | app/Sites/{StudlyName}/ | saas:make | routes, controllers, views, models, migrations 등 코드 |
| DB 레코드 | saas_products | saas:install | Platform Admin에서 관리되는 비즈니스 엔티티 |
폴더만 있고 DB 레코드가 없으면 Platform 관리페이지에 SaaS가 표시되지 않습니다. 신규 SaaS 추가 시 saas:make 후 saas:install을 실행합니다.
미러사이트와 독립사이트
MSK는 도메인별 사이트 운영 방식을 다음 용어로 구분합니다.
| 용어 | 설정 | 구현 범위 | 사용 기준 |
|---|---|---|---|
| 미러사이트 | settings.custom_theme | 같은 route/controller 유지, Blade/브랜딩만 오버레이 | 로고, 푸터, 색상, 일부 화면만 다른 경우 |
| 독립사이트 | settings.site + app/Sites/{StudlyName} | routes/controllers/views/필요 시 모델까지 분리 | 사이트 구조, 기능, 운영 경계가 다른 경우 |
독립사이트는 이 SaaS 모듈 구조를 사용합니다. 미러사이트는 Core ViewThemeResolver가 resources/views/saas/{theme} 및 resources/views/tenants/{theme}를 우선 탐색하는 방식입니다.
표준 폴더 구조
app/Sites/{StudlyName}/
├── site.json
├── routes.php
├── Controllers/
├── Models/
├── Services/
├── Filament/Resources/
├── Providers/{Name}ServiceProvider.php
├── database/migrations/
├── database/seeders/
├── resources/views/
├── resources/lang/
└── config.php
운영 모드
| 모드 | 구조 | 적합한 경우 |
|---|---|---|
| Integrated | 한 프로젝트의 app/Sites/에 여러 SaaS 폴더 배치 | 개발 실험, 통합 운영, 리소스 공유 |
| Isolated | 프로젝트마다 하나의 SaaS 폴더 운영 | 독립 배포, 별도 SLA, 규모/규정 경계 필요 |
saas:extract와 saas:import로 통합 모드와 분리 모드 사이를 전환할 수 있습니다.
Platform 관리 표면
| 메뉴 | 역할 |
|---|---|
SaaS Products | SaaS Product DB 레코드와 기본 설정 관리 |
Tenant Domains & Sites | Tenant별 도메인, 미러사이트, 독립사이트 설정 현황 확인 및 수정 |
Help Pages | 관리페이지별 상단 설명과 ? 도움말 모달 편집 |
Tenant Domains & Sites의 도움말은 Help Pages에서 panel=platform, page_key=tenant-domains.index로 관리합니다.