feat: 일괄 릴리스 실행 계획을 추가한다

Gateway와 권한 있는 프로필 작업을 하나의 고정 커밋과 순서로 영속화한다. 앞 대상 성공 뒤 다음 작업을 claim하고 실패 대상은 같은 작업 ID로 재시도한다.
This commit is contained in:
2026-08-25 09:19:12 +00:00
parent ac48f2ae5b
commit 9613b482c1
11 changed files with 609 additions and 14 deletions
+26 -1
View File
@@ -14,12 +14,37 @@ Gateway 전체는 별도 release-controller가 처리합니다.
Profile 화면은 `/gateway/admin/servers/:profileName/version`
`/gateway/admin/servers/:profileName/scenario`, Gateway 화면은
`/gateway/admin/releases`입니다. 이전 `/gateway/admin/server-operations`
`/gateway/admin/releases`, 통합 화면은 `/gateway/admin/releases/batch`입니다.
이전 `/gateway/admin/server-operations`
호환성을 위해 서버 목록으로 이동합니다. Profile 작업은 runtime/settings/deploy/reset
capability로 분리되며 포괄 운영 권한은 사용하지 않습니다. Gateway 전체 릴리스에는
profile 범위 권한과 별개인 전역 `admin.releases.manage` 권한이 필요합니다.
일반 사용자와 권한이 없는 관리자는 Gateway 릴리스 영역을 사용할 수 없습니다.
### 일괄 업데이트
일괄 업데이트는 새 종류의 배포 엔진이 아니라 기존 Gateway release와 profile
`DEPLOY` operation을 `GatewayBulkRelease`로 묶는 durable 실행 계획입니다.
1. 브랜치 또는 commit을 요청 시점에 하나의 full commit SHA로 고정합니다.
2. 인증 session의 `admin.releases.manage`와 각
`admin.profiles.deploy:<profileName>`을 대상별로 다시 검사합니다.
3. 묶음, Gateway release operation과 profile `DEPLOY` operation을 한 Gateway DB
transaction으로 등록합니다. 한 대상이라도 활성 작업과 충돌하면 아무것도
등록하지 않습니다.
4. Gateway가 포함되면 첫 순서로 실행하고, profile은 표시 순서대로 실행합니다.
기존 전역 advisory lock은 그대로 사용하므로 동시에 여러 release build를
실행하지 않습니다.
5. 앞 대상이 `FAILED` 또는 `CANCELLED`이면 뒤 대상은 claim하지 않습니다. 실패
대상을 재시도하면 새 branch head가 아니라 묶음의 고정 SHA로 같은 operation을
다시 queue하고, 성공 후 다음 대상을 진행합니다.
일괄 업데이트는 여러 대상에 대한 원자적 runtime 전환이나 자동 rollback을 약속하지
않습니다. 이미 성공한 profile의 forward migration을 자동으로 되돌리지 않으며,
화면은 묶음 전체와 대상별 상태를 함께 표시합니다. 같은 commit의 후속 frontend와
server build는 기존 Turbo cache를 재사용할 수 있지만, 자원 보호를 위한 기본 build
동시성 1 계약은 변경하지 않습니다.
운영 전에 다음을 확인해 주세요.
- 대상 branch 또는 전체 commit SHA가 Core2026 저장소에 존재합니다.