68 lines
5.5 KiB
Markdown
68 lines
5.5 KiB
Markdown
# 버전별 패키지 관리와 업로드
|
|
|
|
패키지는 등록 후 변경하지 않고 배포 정책만 변경한다. 같은 릴리스를 개발자 테스트부터 일반 배포까지 사용하며, 수정이 필요하면 새 릴리스를 만든다.
|
|
|
|
## 버전 및 관리 정보
|
|
|
|
| 정보 | 목적 |
|
|
| --- | --- |
|
|
| productId | 제품 식별. 기존 업데이트 제품 코드 `E901`과의 관계 정의 |
|
|
| productVersion | 사용자 표시와 업그레이드 판정에 사용할 제품 버전 |
|
|
| engineVersion | IntelliCAD 등 엔진 버전. 현재 대상은 `14.1` |
|
|
| releaseId / buildId | 고유 릴리스·빌드 식별자와 소스 커밋 연결 |
|
|
| platform / architecture | Windows 및 x64 등 대상 플랫폼 |
|
|
| artifacts | 파일 종류, 저장 경로, 크기, 최종 SHA-256, 서명 검증 결과 |
|
|
| patchTargets | 패치별 허용 기준 릴리스·제품 식별자·패치 이력·목표 릴리스 |
|
|
| fallbackArtifactId | 패치 적용 불가 또는 복구 후 사용할 동일 목표 버전의 전체 설치 파일 |
|
|
| compatibility | 지원 OS, 필수 런타임, 최소 업데이터 버전, 허용 업그레이드 경로 |
|
|
| recovery | 복구 가능한 릴리스와 데이터 호환 조건 |
|
|
|
|
예시 저장 경로는 다음과 같다. 값은 운영 체계를 설명하기 위한 예시다.
|
|
|
|
```text
|
|
/packages/egbim/1.13.2/build-001/windows-x64/FullSetup.exe
|
|
/packages/egbim/1.13.2/build-001/windows-x64/EG-BIM.msi
|
|
/patches/egbim/release-001/to-release-002/windows-x64/Patch.msp
|
|
/manifests/egbim/release-001.json
|
|
```
|
|
|
|
같은 URL의 바이너리를 교체하지 않는다. 패키지는 장기 캐시가 가능하고, 현재 그룹별 대상 버전을 반환하는 응답은 사용자 간 공유 캐시로 섞이지 않도록 한다.
|
|
|
|
위 `FullSetup.exe`는 단일 파일 출력이 가능한 경우의 예시다. 대용량 패키지는 MSI·분할 CAB·런타임을 각각 아티팩트로 등록하고 의존 관계와 전체 설치 실행 경로를 함께 저장한다. `fallbackArtifactId`도 필요한 모든 파일을 참조하는 설치 레이아웃/매니페스트로 연결해야 한다. 생성 프로그램의 데이터와 출력 계약은 [Rust + Tauri 설계](../code-design/README.md)를 따른다.
|
|
|
|
## 업로드와 공개 절차
|
|
|
|
| 단계 | 처리 | 실패 시 결과 |
|
|
| --- | --- | --- |
|
|
| 빌드 | 버전 반영, 난독화, 파일 서명, 패키징, 패키지 서명 | 업로드 중단 |
|
|
| 임시 업로드 | 필요하면 분할·재개 지원, 공개 저장 경로와 격리 | 전송 재시도 |
|
|
| 서버 검증 | 최종 해시·크기·서명·필수 파일·중복 릴리스 확인 | 공개 불가 |
|
|
| 설치 검증 | 신규 설치·지원 기준별 패치·전체 설치 전환·실행 확인 | 승인 불가 |
|
|
| 릴리스 등록 | 검증한 아티팩트와 메타데이터를 고정 | 그룹 공개 전 상태 유지 |
|
|
| 그룹 공개 | 승인된 그룹의 대상 릴리스를 원자적으로 변경 | 기존 정책 유지 |
|
|
|
|
권장 상태는 `Uploaded → Verified → Ready`이며 검증 실패는 `Rejected`로 관리한다. 그룹 배포 상태는 패키지 상태와 별도로 둔다. Ready는 모든 사용자에게 공개됐다는 뜻이 아니다.
|
|
|
|
CI 업로드를 기본으로 하되 관리자 수동 업로드도 같은 검증을 거친다. 업로드 권한과 일반 사용자 배포 승인 권한을 분리하고, 누가 어떤 릴리스를 어느 그룹에 공개했는지 기록한다. 동시에 두 배포가 변경될 때는 정책 버전 비교로 충돌을 검출한다.
|
|
|
|
## 서버 역할
|
|
|
|
| 구성 | 역할 |
|
|
| --- | --- |
|
|
| 패키지 저장소 | 서명된 파일과 불변 메타데이터 보관 |
|
|
| 배포 API | 인증, 장치·그룹 판정, 대상 버전 및 다운로드 권한 반환 |
|
|
| 관리 DB | 릴리스, 그룹, 배포 정책, 승인 이력 |
|
|
| 결과 수집 | 다운로드·설치·실행 상태와 오류 집계 |
|
|
|
|
인터넷 배포는 오브젝트 저장소와 CDN, 사내망 배포는 내부 HTTPS 서버를 후보로 둔다. 특정 클라우드 사업자는 아직 정하지 않았다. 비공개 테스트 패키지는 실제 다운로드 경로에도 접근 통제를 적용한다.
|
|
|
|
버전별 패치는 최초 필수 범위에 포함한다. 릴리스마다 전체 설치 파일을 유지하고, 지원하는 기준 버전에는 변경분 패치를 함께 제공한다. 서버는 그룹의 목표 릴리스를 먼저 결정한 뒤 설치 상태에 맞는 패치 또는 전체 설치 파일을 선택한다. 적용 범위와 복구 정책은 [버전별 패치](08-version-patching.md)를 따른다.
|
|
|
|
## 무결성과 보존
|
|
|
|
해시는 전송 중 변조·손상을 검출하지만 서버의 메타데이터와 해시가 함께 바뀌는 공격까지 막지는 못한다. 패키지의 Authenticode 서명과 배포 메타데이터 서명을 별도로 검토한다. 메타데이터에는 버전·만료·허용된 업그레이드 경로와 키 교체 정책이 필요하다. [TUF 메타데이터 설계](https://theupdateframework.io/docs/metadata/)
|
|
|
|
현재 배포 대상, 복구 대상, 진행 중인 설치가 참조하는 패키지는 삭제하지 않는다. Store에 등록한 URL도 해당 버전의 배포 수명 동안 유지한다. 보존 기간은 사용자 접속 주기와 저장 비용을 확인한 뒤 확정한다.
|
|
|
|
패치 생성·검증에 필요한 기준 및 목표 MSI, 서명 완료 원본 파일, WiX 설치 정의와 빌드 정보도 해당 기준 버전의 지원 기간 동안 보관한다. 후속 패치가 의존하는 이전 패치·원본을 삭제하지 않는다. 패키지 등록 정보에는 지원하는 각 기준에서 목표 상태로 도달하는 검증 결과를 연결한다.
|