ORBIT ORIGINAL GUIDE
saas 릴리스 노트
cms-orbit/saas 4.0.0부터 4.3.3까지의 릴리스 노트. 인스턴스별 관리자 콘솔, multi_database 격리, 라우트 캐시, Ploi SSL 마법사 변경 내역.
최종 수정 2026년 10월 10일
cms-orbit/saas는 사설 저장소로 배포되는 유료 패키지입니다. Composer는 의존 패키지가 선언한 repositories를 무시하고 루트 패키지의 것만 읽으므로, 구매자는 자기 composer.json에 사설 저장소와 인증을 직접 추가해야 합니다. cms-orbit/blog가 saas를 요구하므로 Packagist만으로는 blog도 설치되지 않습니다. 이때 나오는 cms-orbit/saas could not be found in any version 메시지는 패키지가 깨진 것이 아니라 저장소 선언이 없다는 뜻입니다.
4.3.3 — 2026-10-07
- 수정: 문서에 적힌
saas:route-cache build와saas:route-cache clear가 서로의 등록을 덮어쓰지 않고 각각 별도 Artisan 명령으로 실행됩니다. 알 수 없는 동작은 어느 캐시도 바꾸지 않고 번역된 오류 메시지로 거부합니다. - 검증: Laravel 13.35에서 패키지 테스트 9개(생성·정리·잘못된 동작 회귀 포함) 통과. 새 호스트에서 캐시 생성·정리·재생성과 스타터 테스트, 호스트 통합 테스트, PHPStan, Composer 감사 통과.
4.3.2 — 2026-10-05
- 설치된 Composer 의존을 더 이상 버전 관리하지 않습니다.
vendor,node_modules, 로컬 런타임 파일을 저장소와 배포본에서 제외합니다. - Laravel 13.34에서 새로 해석한 의존으로 패키지 테스트 6개와 호스트 SaaS 통합 테스트 57개 통과.
4.3.1 — 2026-09-08
composer-runtime-api ^2.2를 명시 선언했습니다.PackageContainerDiscovery가Composer\InstalledVersions로 설치 패키지를 훑는데 선언이 없어 요구사항이 드러나지 않았습니다.cms-orbit/blog를suggest에 추가했습니다.InstanceEntity가 블로그 인스턴스 관리자 바로가기를 렌더할 때 blog의SignedAdminUrlGenerator를 쓰는 선택적 통합입니다. blog가 saas를 요구하므로 하드 의존으로 만들면 순환이 됩니다.- 바로가기 렌더 실패를
report()로 보고합니다. 이전에는 예외를 삼켜 "바로가기가 그냥 안 보인다"로만 나타났습니다.
4.3.0 — 2026-09-08
추가
- 인스턴스별 Orbit 관리자 콘솔 (#2):
InstanceAwareOrbitAccess가 core의OrbitAccess바인딩을 덮어써, 요청이 인스턴스 엔드포인트를 향하면 패널을{endpoint}/settings로 올립니다. 중앙 호스트에서는 부모의 config 기반 동작을 그대로 씁니다. 인스턴스 식별 미들웨어는web(StartSession) 뒤에 끼워 넣습니다. 앞에 두면 기본 커넥션이 인스턴스 DB로 바뀐 뒤 세션·인증을 조회해 관리자 로그인이 깨집니다. - DB 세션 드라이버를 호스트 커넥션에 고정 (#2):
session.driver=database이고session.connection이 비어 있으면 호스트 커넥션으로 고정해, 인스턴스 요청 중 존재하지 않는 인스턴스별sessions테이블을 찾지 않게 합니다. - 테스트 하네스와 첫 자동 테스트 6개, GitHub Actions 워크플로.
수정
- 마이그레이션 전 부팅이 깨지는 문제:
InstanceAwareOrbitAccess가 마운트 지점을 판단하려고 라우트 맵을 읽는데, 새 설치에서는route_endpoints테이블도 캐시 파일도 없어php artisan migrate를 실행하는 그 부팅에서 예외가 올라갔습니다. 중앙 패널 동작으로 물러나고 예외는report()로 남깁니다. - 공유 물리 DB를 DROP하던 문제 (#1 후속):
data['database']오버라이드로 부모와 자식 인스턴스가 하나의 DB를 공유할 수 있는데, 인스턴스를 삭제하면 그 DB를 DROP해 남은 인스턴스의 데이터까지 사라졌습니다. 같은 이름으로 해석되는 다른 인스턴스가 있으면 DROP을 건너뛰고 경고 로그를 남깁니다.
안내
cms-orbit/core요구를^4.6으로 올렸습니다.OrbitAccess가 core 4.6.0에서 도입됐습니다.multi_database격리에서 인스턴스 요청은 기본 커넥션을 인스턴스 DB로 바꾸므로, 호스트에 남아야 하는 모델에는UsesHostConnection트레이트를 붙여야 합니다. README에 인스턴스 DB 공유와 삭제 동작과 함께 정리했습니다.
4.2.0 — 2026-08-31
- Laravel ^13.0 전용, core ^4.5. 배경은 core 4.5.0과 같습니다. Laravel 11·12 호스트는 업그레이드가 필요합니다.
4.1.0 — 2026-08-31
- PHP ^8.4, core ^4.4. 운영 의존은 바뀌지 않았습니다.
4.0.8 — 2026-08-28
- PHP 제약을
^8.3으로 복구하고laravel/pint^1.30,orchestra/testbench^9 ‖ ^10 ‖ ^11로 정정했습니다. 이전에는 testbench^10.0만 허용해 Laravel 13에서 테스트를 돌릴 수 없었습니다. - 릴리스 파이프라인(
.githooks/pre-push,bin/release)을 도입했습니다.
4.0.7 — 2026-07-24
MultiDatabaseEngine::manager()가mariadb드라이버를mysql매니저로 별칭 처리하고, 매니저가 없는 드라이버에는 조용히 실패하는 대신RuntimeException을 던집니다. multi_database 격리가 MariaDB 호스트를 지원합니다.InstanceDatabaseName::for()에 명시적 DB명 오버라이드 훅을 추가했습니다. 인스턴스data['database']값이 있으면 sanitize해 물리 DB명으로 씁니다. 브랜드와 지점 인스턴스가 하나의 DB를 공유하거나,app.name이 한글이라 slug가 비는 경우에 대응합니다.- 인스턴스 계층을 위한
parent_instance_id컬럼과Instance::parent()/children()관계. 부모가 있는 자식 인스턴스는 자체 라우트 엔드포인트 없이 프로비저닝할 수 있습니다.
4.0.6 ~ 4.0.5 — 2026-07-06 ~ 13
- core 의존을 정확한 버전에서
^4.0으로 완화해 core 패치와의 버전 충돌을 없앴습니다 (4.0.6). - 부팅 시 core의
AnalyticsSchemaConnectionresolver를 등록해 호스트 요청의 analytics DB 연결을HostConnection으로 재지정합니다. core↔saas 결합 제거의 saas 측 훅입니다 (4.0.5).
4.0.3 — 2026-07-06
HostConnection·InstanceDatabaseName헬퍼로 DB 연결명과 인스턴스 DB명 해석을 중앙화했습니다. 인스턴스 DB명은{app}_{container}_{slug}형식입니다.- 커스텀 도메인 SSL 발급 마법사
RouteEndpointSslScreen: DNS A 레코드 검증(Google DNS API) → Ploi 인증서 요청 → 진행 스트림. Ploi SSL 설정에 서버 IP 필드가 추가됐습니다. SAAS_DATABASE_PREFIX/SAAS_DATABASE_SUFFIX설정, 엔드포인트 목록의 컨테이너 링크와 타입·Primary·Redirect·SSL 배지.
4.0.2 ~ 4.0.0 — 2026-07-05
RedirectPathAliasSubdomains미들웨어:{instanceHost}.{appUrl}→blog.{appUrl}/{instanceHost}/301 리다이렉트 (4.0.2).- 손상된
ContainerMapCache파일을 만나면 재생성합니다 (4.0.2). route_endpoints테이블 마이그레이션을 단일 create 파일로 통합하고(도메인 검증·primary 리다이렉트 컬럼 포함), Boost 가이드라인·스킬saas-container-development를 추가했습니다 (4.0.0).- 컨테이너·인스턴스·라우트 엔드포인트 관리자 UI 한글팩 로드 시점을
register()로 앞당겨 영어로 남던 문구를 수정했습니다 (4.0.0).
beta2~beta4(2026-07-04)에서 컨테이너·인스턴스·라우트 엔드포인트 엔티티, 도메인·서브도메인·경로 기반 인스턴스 식별기, 세션·인증 가드·Postgres RLS를 포함한 격리 부트스트래퍼가 도입됐습니다.