Enterprise 에디션
라이선스
한눈에 보기
섹션 제목: “한눈에 보기”NextPDF Enterprise는 라이선스를 런타임 권한으로 해석합니다. 즉, 에디션 등급, 기능 집합, 브랜딩 결정입니다. 만료된 유료 라이선스는 영구 폴백 보증 하에 계속 실행됩니다. 업데이트와 지원만 중단됩니다. 이 페이지는 라이선싱 표면의 외부에서 관찰 가능한 동작, 기능 및 기능별 게이트, 그리고 선택적 온라인 활성화 계약을 설명합니다.
가용성 및 라이선싱
섹션 제목: “가용성 및 라이선싱”이 기능은 NextPDF Enterprise(nextpdf/enterprise)에 제공되며 Enterprise 등급 라이선스 봉투로 활성화됩니다. 해당 권한이 없는 배포는 이 기능의 클래스를 로드하지 않습니다. 에디션 비교 및 라이선스 받기.
라이선싱은 기본 Enterprise 표면입니다. 다른 모든 기능을 해석하므로, Enterprise 패키지가 설치되면 항상 존재합니다. 개별 다운스트림 기능은 기능 코드로 게이트됩니다 — 에디션 등급 기능과 독립적으로 만료되는 애드온 팩입니다. 게이트는 활성 에디션, 유효성, 유예 기간 상태, 그리고 활성 팩 집합을 보고합니다.
개념 개요
섹션 제목: “개념 개요”라이선싱 표면에는 한 가지 임무가 있습니다. 라이선스를 호스트 애플리케이션이 따라 행동할 수 있는 결정으로 바꾸는 것입니다. 런타임에 중요한 다섯 가지 필드를 갖는 불변 권한 결과를 생성합니다 — 에디션 등급, 채널(유료 또는 평가), 브랜딩 모드, 설치된 버전의 실행 가능 여부, 그리고 업데이트와 지원이 부여되는지 여부입니다.
에디션은 엄격한 계층을 형성합니다. Enterprise는 Pro를 포함하고, Pro는 Core를 포함합니다. 따라서 기능 검사는 라이선스가 부여된 에디션이 해당 기능의 최저 등급 이상일 때 성공합니다. 일부 기능은 에디션에 전혀 연결되지 않습니다 — 이들은 기본 라이선스 기간과 무관하게 자체 만료를 갖는 애드온 팩에 속합니다.
권한 결정은 다섯 가지 개별 상태를 구분합니다. 활성 라이선스는 완전한 접근 권한을 갖습니다. 기간이 지났지만 유예 기간 내에 있는 유료 라이선스는 완전한 접근 권한을 유지하며 곧 갱신 경고를 표면화합니다. 유예 기간이 지난 유료 라이선스는 영구 폴백에 들어갑니다. 설치된 버전은 무기한 계속 실행되지만, 업데이트와 지원은 더 이상 부여되지 않습니다. 평가 라이선스는 다르게 동작합니다 — 만료되면 런타임이 제한됩니다. 평가는 설계상 기간이 한정되어 있기 때문입니다. 라이선스가 없으면 호스트는 실패-차단 상태로 해석되며, 라이선스가 없는 배포가 유료 배포로 오인되지 않도록 모든 출력에 시각적 표시가 들어갑니다.
계약상의 좌석 수는 런타임에 강제되지 않습니다. 일반적인 운영을 위한 텔레메트리나 필수 폰홈(phone-home)은 없습니다. 선택적 온라인 클라이언트는 명시적 활성화, 갱신 검사, 최선 노력(best-effort) 하트비트를 위해서만 존재하며, 이를 한 번도 호출하지 않는 호스트도 로컬에서 제공된 라이선스로부터 완전한 권한 결정을 받습니다.
평가판 모드는 별개의 더 좁은 정책입니다. 라이선스가 평가판으로 표시되면 처리 처리량을 제한하고 생성된 출력에 평가 워터마크를 적용하므로, 대량 생산 작업에는 유료 라이선스가 필요합니다. 평가판 만료는 유예 기간 없이 엄격하게 강제됩니다.
이렇게 작동하는 이유
섹션 제목: “이렇게 작동하는 이유”핵심이 되는 결정은 유료 라이선스가 설치된 런타임을 절대 비활성화하지 않는다는 것입니다. 유료 기간이 끝나면 권한은 EntitlementStatus::PerpetualFallback로 이동합니다 — 설치된 버전은 계속 실행되고, 앞으로의 업데이트와 지원만 취소됩니다. 이 보증이 유지되는 이유는 권한이 로컬에서 제공된 라이선스에 대한 순수한 인메모리 결정이기 때문입니다. 따라서 어떤 폰홈도, 어떤 네트워크 중단도 고객에게서 유료 런타임을 빼앗을 수 없습니다. 그 균형추는 실패-차단 기본값입니다. 라이선스가 없거나 평가가 만료되면 Core 등급으로 해석되고 brandingMode를 평가 워터마크로 설정합니다. 따라서 라이선스가 없는 배포가 유료 배포로 조용히 오인되는 일은 없습니다. 구매한 것에 대해서는 영구 폴백, 구매하지 않은 것에 대해서는 실패-차단 — 이 조합이 라이선싱을 명예 제도로 만들지 않으면서 오프라인 친화적으로 유지합니다.
설계 배경: 오픈 코어, 락인 없음.
공개 API 표면
섹션 제목: “공개 API 표면”composer require nextpdf/enterprise:^3지원되는 통합 지점은 권한 평가기(라이선스에서 권한 결과로), 런타임 기능 게이트(isFeatureEnabled, requireFeature, hasCapability, requireCapability, isInGracePeriod, currentEdition, getActivePacks, trialPolicy), 기능 레지스트리(라우트에서 기능으로의 해석과 사용 가능한 기능 집합), 그리고 선택적 라이선스 클라이언트(activate, checkRenewal, heartbeat)입니다. 권한 평가기를 라이선스 기반 결정의 단일 권위로 취급하십시오. 원시 라이선스 필드에 직접 분기하지 마십시오.
코드 샘플 — 빠른 시작
섹션 제목: “코드 샘플 — 빠른 시작”use NextPDF\Enterprise\Licensing\EntitlementEvaluator;
$result = (new EntitlementEvaluator())->evaluate($license);
if (! $result->runtimeAllowed) { // No license, or an expired evaluation license. throw new RuntimeException($result->warningMessage ?? 'Enterprise runtime disabled.');}
// Perpetual fallback: still allowed to run; updates/support may be off.$canUpdate = $result->updateEntitled;$watermark = $result->shouldApplyEvaluationBranding();코드 샘플 — 프로덕션
섹션 제목: “코드 샘플 — 프로덕션”use NextPDF\Enterprise\Licensing\CapabilityCode;use NextPDF\Enterprise\Licensing\FeatureGate;
final class ReportController{ public function __construct(private readonly FeatureGate $gate) {}
public function generate(): Response { // Throws a structured 403-style exception carrying the required // capability, the required pack, the current packs, and an // upgrade-info URL — usable as an upsell touchpoint. $this->gate->requireCapability(CapabilityCode::EnterpriseComplianceEvidence);
if ($this->gate->isInGracePeriod()) { $this->logger->notice('Enterprise license in grace period — renewal due.'); }
return $this->renderReport(); }}엣지 케이스 및 함정
섹션 제목: “엣지 케이스 및 함정”- 영구 폴백은 유예 기간이 아닙니다. 유예는 업데이트와 지원을 켜둔 채로 유지합니다. 폴백은 런타임만 켜둔 채로 유지합니다. 둘 다 유료 라이선스에 대해 설치된 버전을 계속 실행되도록 합니다.
- 평가 만료는 런타임을 제한합니다. 유료 라이선스와 달리, 만료된 평가 라이선스는 런타임을 중단시키고 평가 워터마크를 유지합니다.
- 라이선스 없음은 실패-차단됩니다. 라이선스가 구성되지 않으면 권한은 “라이선스 없음”이 되고, Enterprise 경로에 대해 런타임이 비활성화되며, 방출된 출력에 워터마크가 표시되어 로그와 아티팩트에서 상태가 보이도록 합니다.
- 팩 만료는 독립적입니다. 기본 라이선스가 여전히 활성인 동안에도 애드온 팩이 만료될 수 있습니다. 그러면 해당 팩이 부여한 기능은 “라이선스 없음”과는 별개인 고유한 “팩 만료” 결과와 함께 실패합니다.
- 기능 거부는 구조화되어 있습니다. 거부된 기능은 필요한 기능, 필요한 팩(있는 경우), 현재 팩, 그리고 업그레이드 정보 URL을 담습니다 — 단순 오류 대신 이를 사용자에게 표면화하십시오.
권한 평가와 기능 검사는 파싱된 라이선스에 대한 상수 시간 인메모리 연산입니다 — 요청 경로에 I/O가 없습니다. 선택적 온라인 클라이언트는 명시적 활성화, 갱신 검사, 하트비트에서만 네트워크 호출을 수행합니다. 하트비트 실패는 치명적이지 않으며 처리를 절대 차단하지 않습니다.
보안 참고
섹션 제목: “보안 참고”이 페이지는 의도적으로 관찰 가능한 동작만 설명합니다. 라이선스 봉투 검증, 서명 검사, 남용 방지 로직, 그리고 강제 코드의 위치는 범위 밖이며 공개 표면에 문서화되지 않습니다. 운영자는 공개 패키지 계약과 문서화된 동작 계약과 상호작용합니다. 온라인 활성화 계약은 서명된 응답 봉투와 클라이언트가 제공한 논스를 사용하므로, 호스트는 재생되거나 변조된 활성화 응답을 감지할 수 있습니다. 정확한 검증 절차는 공개 계약의 일부가 아닙니다.
적합성
섹션 제목: “적합성”- 온라인 활성화 응답은 JWS 방식의 서명된 봉투로 전달됩니다 — RFC 7515(JSON Web Signature) §3.1에 설명된 압축, URL 안전 형식의 보호 헤더 / 페이로드 / 서명 삼중쌍입니다.
- 서명 자료는 base64url이며, RFC 7515 §5.2에 따라 디코딩됩니다.
- 봉투 무결성을 위한 정규 JSON은 JSON Canonicalization Scheme, RFC 8785 §3을 따릅니다.
- 활성화 서명은 RFC 8032(EdDSA) §5.1에 따라 32바이트 공개 키에 대해 검증되는 Ed25519 서명입니다.
- 구성 요소 간에 사용되는 단명 서비스 토큰은 등록된 클레임
iss,aud,sub,exp,jti를 담고, RFC 7519(JWT) §4.1.4의expnot-after 규칙을 준수합니다.
동작 계약
섹션 제목: “동작 계약”- 권한 평가는 런타임 관련 필드의 고정 집합(에디션 등급, 채널, 브랜딩 모드, 런타임 허용 여부, 업데이트/지원 부여 여부)을 갖는 불변 결과를 생성합니다.
- 유료 라이선스는 설치된 런타임을 절대 비활성화하지 않습니다. 만료는 이를 유예를 거쳐 영구 폴백으로 이동시키며, 업데이트와 지원만 취소합니다.
- 만료된 평가 라이선스는 런타임을 제한하고 평가 워터마크를 유지합니다. 평가판 만료는 유예 기간 없이 엄격하게 강제됩니다.
- “라이선스 없음” 상태는 Enterprise 경로에 대해 실패-차단되며, 방출된 출력에 워터마크가 표시되어 라이선스가 없는 배포가 유료 배포로 오인되지 않도록 합니다.
- 기능 거부는 구조화되어 있습니다. 필요한 기능, 필요한 팩(있는 경우), 활성 팩, 그리고 업그레이드 정보 URL을 담습니다.
- 권한 및 기능 검사는 요청 경로에 I/O가 없는 상수 시간 인메모리 연산입니다.
발행 경계
섹션 제목: “발행 경계”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 표, 런북 파일명, 티켓 접두사는 범위 밖입니다.
Core 폴백
섹션 제목: “Core 폴백”NextPDF Core(Apache-2.0)에는 에디션 또는 기능 권한 표면이 없습니다 — 기능 게이트도, 권한 평가기도, 라이선스 클라이언트도 없습니다. 라이선스가 없는 Apache-2.0 동작이 필요한 호스트는 Enterprise 파이프라인 대신 Core 엔진을 직접 사용합니다. Core는 게이트하거나, 라이선싱을 위해 워터마크를 표시하거나, 권한을 평가하지 않습니다.
Pro 폴백
섹션 제목: “Pro 폴백”NextPDF Pro에도 권한 표면이 없습니다 — 전혀 없습니다. 이 기능에는 Pro 등급 등가물이 없습니다. 라이선싱, 기능 레지스트리, 기능 게이트, 활성화 계약은 nextpdf/enterprise 패키지에서만 제공됩니다.
Enterprise 경계 참고
섹션 제목: “Enterprise 경계 참고”라이선스 봉투 검증 절차, 서명 검사 구현, 남용 방지 로직, 그리고 강제 코드의 위치는 동작 수준에서만 설명되며 공개 표면에서 재현되지 않습니다. 온라인 활성화 계약은 클라이언트가 제공한 논스를 갖는 서명된 응답 봉투로 문서화됩니다. 정확한 검증 절차는 공개 계약의 일부가 아닙니다.
배포 경계
섹션 제목: “배포 경계”NextPDF Enterprise는 일반적인 운영을 위한 필수 폰홈 없이 로컬에서 제공된 라이선스로부터 권한을 해석합니다. 선택적 온라인 클라이언트는 명시적 활성화, 갱신 검사, 최선 노력 하트비트에서만 네트워크 호출을 수행합니다. 하트비트 실패는 치명적이지 않으며 처리를 절대 차단하지 않습니다. 운영자는 라이선스 프로비저닝, 활성화/갱신 구성, 그리고 선택적 온라인 클라이언트의 전송 정책을 소유합니다. NextPDF Enterprise는 계약상의 좌석 수를 런타임에 강제하지 않습니다.
법률 준수 경계
섹션 제목: “법률 준수 경계”용량 및 좌석 약관은 런타임 강제가 아니라 귀하의 라이선스 계약에 의해 규율됩니다. 이 문서는 법률 의견이 아닙니다. 계약상 및 규제상 의무에 대해서는 자체 준수 및 법률 자문에게 문의하십시오.