Enterprise 에디션
릴리스
한눈에 보기
섹션 제목: “한눈에 보기”NextPDF Enterprise는 릴리스를 타입이 지정된 값 객체 — 릴리스 매니페스트, 아티팩트별 매니페스트, 빌드 프로파일, 배포 채널, 액세스 경계 — 로 모델링하고, 각 아티팩트를 올바른 채널과 액세스 경계로 라우팅하는 게시 계획을 도출합니다.
가용성 및 라이선싱
섹션 제목: “가용성 및 라이선싱”이 기능은 NextPDF Enterprise(nextpdf/enterprise)에 포함되며 Enterprise 계층 라이선스 봉투로 활성화됩니다. 해당 권한이 없는 배포는 이 기능의 클래스를 로드하지 않습니다. 에디션 비교 및 라이선스 받기.
composer require nextpdf/enterprise:^3개념 개요
섹션 제목: “개념 개요”ReleaseManifest는 한 버전에 대한 불변의 최상위 문서입니다. 시맨틱 버전, 소스 커밋, 빌드 타임스탬프, 아티팩트별 매니페스트의 목록, 그리고 선택적 공급망 증거 경로(SBOM, GPG 서명, 체크섬)를 기록합니다. 그 스키마 버전은 추가에는 마이너(minor-for-additive), 호환성 파괴에는 메이저(major-for-breaking)를 따릅니다.
ArtifactManifest는 빌드된 하나의 아티팩트를 기록합니다. 즉, 정규 파일명, 버전, 소스 커밋, 대상 에디션, 전달 모드, 인코딩 기술, 배포 채널, 대상 PHP 버전, SHA-256 다이제스트, 선택적 인코딩 만료, 그리고 빌드 타임스탬프입니다. EncodingTechnology는 아티팩트를 인코딩하는 데 사용된 도구를 그것이 인코딩되었는지 여부와 구별합니다. 평문 아티팩트는 항상 None을 갖습니다.
DistributionChannel은 두 가지 관심사를 명시적으로 분리합니다. 즉, 아티팩트 원본(이진 저장소)과 패키지 소비 계층(composer require가 읽는 레지스트리)입니다. AccessBoundary는 누가 아티팩트에 액세스할 수 있는지를 결정합니다 — 유료 고객, 기간 제한 평가, 또는 고객에게 절대 노출되지 않는 내부 CI/QA/스테이징 — 그리고 모든 경계는 인증을 요구합니다.
PublishingPlan은 빌드 프로파일과 릴리스 매니페스트로부터 도출됩니다. 각 프로파일은 게시 대상으로 해석됩니다. 즉, 아티팩트 원본 대상과 소비 계층 대상이며, 올바른 액세스 경계가 적용되어 유료 및 평가 아티팩트가 올바른 위치로 라우팅됩니다.
이렇게 작동하는 이유
섹션 제목: “이렇게 작동하는 이유”핵심이 되는 결정은 릴리스를 느슨한 구성이 아니라 불변의 타입 지정 값 객체로 모델링하는 것입니다. 아티팩트 원본과 소비 계층은 별개의 enum 타입 관심사이며, 액세스 경계는 명시적입니다. 그래서 잘못 라우팅된 아티팩트 — 고객 채널에 놓인 내부 빌드 — 는 조용한 프로덕션 실수가 아니라 모델링 오류로 드러납니다. 계획은 권위적이지 않고 도출된 상태로 유지됩니다. 즉, 의도된 대상을 명명할 뿐 실제 전송은 사용자의 릴리스 도구가 수행합니다. 동일한 객체가 Core 계약을 통해 해석되므로, 에디션을 업그레이드하는 소비자는 호출 코드를 전혀 바꾸지 않습니다. 그 연속성이 바로 오픈 코어 경계의 요점입니다 — 재작성이 아니라 Enterprise 표면을 구매하는 것입니다. 설계 배경: 오픈 코어, 락인 없음.
API 표면
섹션 제목: “API 표면”| Class | Responsibility |
|---|---|
ReleaseManifest | 불변의 최상위 릴리스 문서입니다. |
ArtifactManifest | 아티팩트별 메타데이터와 검증 필드입니다. |
BuildProfile | 게시할 빌드 구성입니다. |
DistributionChannel | 원본 대 소비 계층 채널 enum입니다. |
AccessBoundary | Paid / Evaluation / Internal 액세스 enum입니다. |
EncodingTechnology | 인코딩 도구 enum입니다(예: 인코딩됨 / 없음). |
PublishingPlan / PublishingTarget | 도출된 계획과 대상별 라우팅입니다. |
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”use NextPDF\Enterprise\Release\PublishingPlan;
$plan = PublishingPlan::fromProfiles($profiles, '3.1.0');코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”use NextPDF\Enterprise\Release\PublishingPlan;use NextPDF\Enterprise\Release\PublishingEnvironment;
$plan = PublishingPlan::fromProfiles( $profiles, '3.1.0', PublishingEnvironment::Production,);
foreach ($plan->targets as $target) { $logger->info('release.target', [ 'version' => $plan->version, 'channel' => $target->channel->value, ]);}엣지 케이스 및 주의 사항
섹션 제목: “엣지 케이스 및 주의 사항”- 아티팩트 원본과 소비 계층은 별개의 채널입니다. 원본은 이진 파일을 저장하고, 소비 계층은 그것을 가리키는 메타데이터를 제공합니다.
composer require가 어디에서 해석되는지를 추론할 때 둘을 혼동하지 마십시오. - 평문 아티팩트는 항상
EncodingTechnology::None을 보고합니다. 인코딩 기술 필드는 “어떤 도구”에 답하지 “보호되었는가”에 답하지 않습니다. - Internal 액세스 경계 아티팩트는 고객에게 절대 노출되지 않습니다. 이를 고객 채널로 라우팅하는 것은 이 모델이 명시적으로 드러내도록 설계된 구성 오류입니다.
- 게시 계획은 도출된 것이며 전송에 대해 권위가 없습니다 — 의도된 대상을 설명할 뿐, 실제 업로드는 사용자의 릴리스 도구가 수행합니다.
계획 도출은 빌드 프로파일 수에 선형적이며 프로파일당 적은 수의 대상을 생성합니다. 값 객체는 불변이며 생성 비용이 저렴합니다.
보안 참고 사항
섹션 제목: “보안 참고 사항”릴리스 매니페스트는 공급망 증거 경로(SBOM, GPG 서명, 체크섬)를 담습니다. 이 모듈은 그러한 참조를 기록하고 라우팅합니다. 서명을 직접 생성하거나 출처를 증명하지는 않습니다. 매니페스트를 그 자체로 증거가 아니라, 사용자의 릴리스 파이프라인이 검증해야 할 메타데이터로 취급하십시오.
데이터 레지던시 및 PII 완화
섹션 제목: “데이터 레지던시 및 PII 완화”릴리스 매니페스트는 개인 데이터가 아니라 빌드 및 아티팩트 메타데이터를 담습니다. 아티팩트 저장소에 평소의 통제를 적용하십시오.
안전한 텔레메트리 및 로그 스크러빙
섹션 제목: “안전한 텔레메트리 및 로그 스크러빙”릴리스 로그는 서명 키 자료나 내부 저장 경로가 아니라 버전과 채널을 기록해야 합니다.
적합성
섹션 제목: “적합성”이 모듈에 대해서는 어떠한 표준 적합성도 주장하지 않습니다. 이는 릴리스 모델링 계층입니다. 공급망 증거(SBOM, 서명, 체크섬)는 매니페스트가 참조하며, 사용자의 릴리스 도구가 생성하고 검증합니다.
FIPS 모드 동작
섹션 제목: “FIPS 모드 동작”이 모듈은 어떠한 암호화 연산도 수행하지 않습니다. GPG 서명과 체크섬 생성은 외부 릴리스 도구가 수행하며 여기서는 참조만 됩니다.
위협 모델
섹션 제목: “위협 모델”입력은 호출자가 제공한 빌드 프로파일과 매니페스트 데이터입니다. 이 모델은 원본 대 소비 구분과 액세스 경계 구분을 명시적으로 만들어, 잘못된 라우팅(예: 내부 아티팩트 노출)이 조용한 오류가 아니라 가시적인 모델링 오류가 되도록 합니다.
동작 계약
섹션 제목: “동작 계약”ReleaseManifest는 한 버전에 대한 불변의 최상위 문서입니다. 그 스키마 버전은 추가에는 마이너, 호환성 파괴에는 메이저를 따릅니다.DistributionChannel은 아티팩트 원본과 패키지 소비 계층을 별개의 관심사로 유지합니다. 이를 혼동하는 것은 이 타입이 명시적으로 드러내는 모델링 오류입니다.AccessBoundary는 Paid / Evaluation / Internal을 구별하며, 모든 경계는 인증을 요구합니다. Internal 아티팩트는 고객에게 절대 노출되지 않습니다.PublishingPlan은 빌드 프로파일과 릴리스 매니페스트로부터 도출됩니다. 의도된 대상을 설명하며 전송에 대해 권위가 없습니다.
게시 경계
섹션 제목: “게시 경계”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 표, 런북 파일명, 티켓 접두사는 범위 밖입니다.
Core 폴백
섹션 제목: “Core 폴백”NextPDF Core에는 릴리스 모델링 계층이 없습니다. 릴리스 매니페스트, 빌드 프로파일, 또는 게시 계획이 필요한 Core 전용 소비자는 이를 직접 모델링해야 합니다.
Pro 폴백
섹션 제목: “Pro 폴백”NextPDF Pro는 타입이 지정된 릴리스 매니페스트, 빌드 프로파일, 액세스 경계, 또는 도출된 게시 계획을 제공하지 않습니다. 이들은 nextpdf/enterprise 패키지에만 포함됩니다. Pro 전용 배포에는 릴리스 모델링 요청을 충족할 Enterprise 구성 요소가 없습니다. Enterprise 표면은 Enterprise 개요를 참조하십시오.
Enterprise 경계 참고
섹션 제목: “Enterprise 경계 참고”매니페스트 스키마, 원본 대 소비 구분, 액세스 경계 라우팅은 동작 수준에서만 설명됩니다. 내부 채널 해석 표와 내부 게시 대상 와이어링은 공개 표면의 범위 밖이며 여기에서 재현하지 않습니다.
배포 경계
섹션 제목: “배포 경계”게시 계획은 도출된 메타데이터이지 전송이 아닙니다. 실제 아티팩트 업로드는 사용자의 릴리스 도구가 수행합니다. 공급망 증거(SBOM, GPG 서명, 체크섬)는 매니페스트가 참조하며, 이 모듈이 아니라 사용자의 릴리스 파이프라인이 생성하고 검증합니다. 각 채널의 라우팅, 자격 증명, 저장소는 운영자의 책임입니다.
법률 준수 경계
섹션 제목: “법률 준수 경계”이 페이지는 릴리스 모델링 계층을 설명합니다. 공급망 증거 참조를 기록하고 라우팅하며, 서명을 직접 생성하거나, 출처를 증명하거나, 릴리스를 인증하거나, 법적 자문을 구성하지 않습니다. 매니페스트를 그 자체로 증거로 취급하는 것은 잘못입니다. 검증은 사용자의 릴리스 파이프라인이 수행합니다. 릴리스가 계약상 또는 규제상 의무를 충족하는지 판단하는 것은 사용자의 책임입니다.