프로덕션 운영
한눈에 보기
섹션 제목: “한눈에 보기”이 페이지는 NextPDF를 프로덕션에 투입하고 그곳에서 계속 운영하기 위한 체크리스트입니다. 매뉴얼 전체를 큐레이션하는 역할을 하며, 각 항목은 깊이 있는 내용을 담은 페이지로 연결됩니다. 따라서 여기서 확인하고 링크된 곳에서 읽는 구성입니다. 첫 릴리스 전에 배포 전 체크리스트를 끝까지 진행하십시오. 업그레이드 주기와 인시던트 트리아지 진입점은 운영 개시 후(day-two) 운영의 일부로 다시 검토하십시오.
배포 전 체크리스트
섹션 제목: “배포 전 체크리스트”- 런타임을 확인하십시오. NextPDF는 PHP
>=8.4 <9.0이 필요합니다. Composer는 이 범위를 벗어나는 것은 모두 거부합니다. 설치를 참조하십시오. -
php -m으로 여섯 개의 필수 확장을 확인하십시오.ext-mbstring,ext-zlib,ext-intl,ext-gd,ext-curl,ext-openssl입니다. 설치 페이지에서 각각이 무엇을 하는지 설명합니다. - 환경을 한 번에 확인하려면
vendor/bin/nextpdf doctor를 실행하십시오 (PHP 버전, 확장, 폰트 가용성을 하나의 보고서로 정리합니다). - 하드웨어를 사이징하기 전에 렌더링 경로를 결정하십시오. 인프로세스
파이프라인(
writeHtml())은 추가 서비스가 필요하지 않습니다. Artisan, Gotenberg, Cloudflare는 각각 운영해야 할 브라우저 또는 네트워크 서비스를 추가합니다. 결정에는 경로 선택을 활용하십시오. - 렌더러 브리지를 선택했다면, 프로덕션 가동 전에 해당 브리지의 보안 및 운영 페이지를 읽으십시오. 렌더러 표면 강화를 참조하십시오.
- 렌더링에 사용하는 폰트만을 빌드 시점에 번들하십시오. 프로덕션에서 폰트 프로비저닝을 참조하십시오.
리소스 사이징
섹션 제목: “리소스 사이징”평균이 아니라, 생성하는 문서 중 가장 큰 것에 맞추어 사이징하십시오.
getPdfData()는 Portable Document Format (PDF) 문서 전체를 메모리에 구축하여
하나의 문자열로 반환합니다.
- 워커 또는 함수 메모리는 서버리스 사이징 가이드에 따라 설정하십시오. 몇 페이지짜리 문서는 512–1024 MB에서 여유롭지만, 이미지가 많거나 페이지가 많은 문서는 더 많이 필요합니다.
- 타임아웃은 최악의 경우 빌드 시간보다 여유를 두어 높게 설정하십시오. 지나치게 큰 작업은 오브젝트 스토리지에 기록하는 비동기 큐로 옮기십시오. 그 패턴은 동일한 사이징 섹션에 나와 있습니다.
- 장기 실행 워커에는 타임스탬프 검증을 끈 opcache를 설정하십시오. Docker
레시피의 opcache 섹션에
프로덕션용
ini값이 들어 있습니다. - 가동 후 메모리 또는 처리량이 어긋나기 시작하면, 증상에서 레버로 이어지는 결정 표에서 시작하십시오.
워커 안전성 규칙
섹션 제목: “워커 안전성 규칙”Document는 일회용입니다. 구축하고, 한 번만 써낸 뒤, 스코프를 벗어나도록
두십시오. 요청마다 또는 큐 작업마다 새 인스턴스를 생성하십시오. 공유해도 되는
것은 프로세스 수명 레지스트리 — FontRegistry와 ImageRegistry — 뿐이며,
이들은 워커 부팅 시 한 번만 생성합니다. 이는 PHP-FPM, 큐 워커, 장기 실행
애플리케이션 서버의 요청 단위·작업 단위 모델과 일치합니다.
- 부팅 시퀀스와 사이클별 리셋을 담은 레시피: 워커 세이프 배치 렌더링.
- 한 문답으로 보는 계약: 워커 세이프하고 스레드 세이프한가요?
렌더러 표면 강화
섹션 제목: “렌더러 표면 강화”HTML은 신뢰할 수 없는 것으로 취급하십시오. 특히 사용자의 영향을 받는 것은 더욱 그렇습니다. 경로 선택이 그 경계를 설명합니다. 기본적으로 내장 파이프라인은 어떤 스크립트도 실행하지 않고 원격 리소스도 가져오지 않는 반면, 각 브리지는 브라우저 또는 네트워크 서비스를 통해 렌더링합니다. 브리지를 프로덕션 트래픽에 노출하기 전에, 해당 브리지의 보안 및 운영 페이지를 끝까지 진행하십시오.
- Artisan 보안 및 운영 — Chrome 렌더러 표면.
- Gotenberg 보안 및 운영 — Gotenberg 서비스 표면.
- Cloudflare 보안 및 운영 — 엣지 배포 표면.
- 엔진을 서비스로 실행하시나요? Connect 보안 및 운영을 추가하십시오.
관측 가능성
섹션 제목: “관측 가능성”NextPDF는 서비스 수준 목표(SLO) 목표치를 공개하지 않습니다. 아래에서 측정하는 렌더링 소요 시간과 메모리 메트릭에서 여러분의 목표치를 도출하십시오.
첫 인시던트 이후가 아니라 그 전에 렌더링 경로를 계측하십시오.
- 인프로세스 엔진: OpenTelemetry로 관측하기.
- NextPDF Connect 배포: Connect OpenTelemetry 레시피.
- 렌더링마다 다음을 기록하십시오. 실제 경과 시간, 최대 메모리, 페이지 수, 출력 크기, 오류 레퍼런스의 예외 카테고리를 포함한 결과.
- 실패뿐 아니라 추세에도 알림을 설정하십시오. 빌드 시간의 상승, 최대 메모리의 상승, 타임아웃 또는 메모리 고갈 횟수는 메모리 및 성능 항목에서 선행 신호입니다.
업그레이드 주기
섹션 제목: “업그레이드 주기”- 버전 지원 정책을 한 번 읽고, 이후
릴리스를 그에 맞추십시오. 이 정책은 시맨틱 버저닝 계약, 안정성 라벨, 지원 중단
라이프사이클, 이 매뉴얼이 사용하는 라이프사이클 용어(
active,lts,maintenance,frozen,eol)를 정의합니다. composer.lock을 커밋하여 배포되는 모든 워커가 동일한 엔진 버전을 해석하도록 하십시오. 설치 페이지가 이 원칙을 명시합니다.- 버전을 올릴 때마다 변경 이력을 검토하십시오.
인시던트 트리아지 진입점
섹션 제목: “인시던트 트리아지 진입점”렌더러 브리지 인시던트(Chrome 크래시, Gotenberg 중단, 엣지 렌더링 실패)의 경우, 렌더러 표면 강화에 있는 해당 브리지의 실패 모드 섹션에서 시작하십시오.
- 클래스 이름이 아니라 증상을 기준으로 트러블슈팅 지식 베이스에서 시작하십시오.
- 포착한 예외를 그 카테고리 및 컨텍스트 계약에 대응시키십시오. 오류 레퍼런스를 참조하십시오.
함께 보기
섹션 제목: “함께 보기”- 프로덕션에서 NextPDF 운영하기 — 부하 상황에서 엔진이 이렇게 동작하는 이유를 설명하는 Insider_ 에세이입니다.
- NextPDF 애플리케이션 컨테이너화 — 프로덕션용 Docker 이미지를 처음부터 끝까지.
- 서버리스에 배포하기 — Lambda, Cloud Run, App Runner의 구체적인 사항.
- Connect에서 워커 세이프 렌더링 — 동일한 수명 규칙을 서버에 적용한 것.