본문 바로가기

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의 AnalyticsSchemaConnection resolver를 등록해 호스트 요청의 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를 포함한 격리 부트스트래퍼가 도입됐습니다.