왜 PHP 8.5+인가?
TCPDF-Next는 설계상 PHP 8.5+를 요구합니다. 이는 임의적인 제약이 아닙니다 — 라이브러리에서 사용하는 모든 모던 PHP 기능이 코드 품질, 보안, 개발자 경험에 직접적인 이점을 제공합니다.
사용하는 PHP 8.5 기능
| 기능 | TCPDF-Next에서의 이점 |
|---|---|
| 읽기 전용 클래스 | 불변 값 객체 (PageSize, Margin, Color, FontInfo) — 변형 버그 없음 |
| Backed 열거형 | 타입 안전 설정 (Orientation::Portrait, BarcodeType::QRCode, SignatureLevel::PAdES_B_LTA) |
| 명명된 인수 | 자체 문서화 API 호출 — setSignature(certInfo: $cert, level: SignatureLevel::PAdES_B_B) |
| Union/intersection 타입 | API 전반에 걸친 정밀한 매개변수 타입 |
| DNF 타입 | 내부 유효성 검사를 위한 복합 타입 제약 |
#[\SensitiveParameter] | 비밀번호와 개인 키가 스택 트레이스에 절대 노출되지 않음 (Aes256Encryptor, CertificateInfo, TsaClient) |
#[\NoDiscard] | 중요한 메서드의 반환 값을 무시하면 컴파일러 경고 발생 (FontManager::registerFont(), FormFlattener::flatten()) |
| 프로퍼티 훅 | 보일러플레이트 없는 깔끔한 getter/setter 패턴 |
| 파이프 연산자 | 간소화된 내부 데이터 변환 |
| Fiber | 큐 워커에서의 비동기 PDF 생성 기반 |
"하지만 내 서버는 PHP 8.1을 실행하고 있는데..."
Docker를 격리 레이어로 사용하세요. 여러분의 애플리케이션은 어떤 PHP 버전이든 실행할 수 있습니다 — TCPDF-Next는 컨테이너 내부에서 실행됩니다.
최소 Dockerfile
dockerfile
FROM php:8.5-cli
# 필수 확장 설치
RUN apt-get update && apt-get install -y \
libicu-dev libpng-dev libjpeg-dev libwebp-dev \
&& docker-php-ext-configure gd --with-jpeg --with-webp \
&& docker-php-ext-install gd intl
# Composer 설치
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader팀을 위한 Docker Compose
yaml
services:
pdf-generator:
build: .
volumes:
- ./output:/app/output
command: php generate-pdf.phpDocker를 사용한 Laravel
Laravel 앱이 PHP 8.2를 실행하지만 TCPDF-Next가 필요한 경우, PDF 생성을 마이크로서비스로 실행하세요:
yaml
services:
app:
image: php:8.2-fpm
# Laravel 앱
pdf-service:
build:
context: ./pdf-service
dockerfile: Dockerfile
image: php:8.5-cli
volumes:
- shared-output:/output
volumes:
shared-output:또는 Laravel의 큐 시스템을 사용하여 PHP 8.5 워커에 PDF 생성을 디스패치하세요.
🐳 Docker for Legacy PHP Environments
Docker는 프로덕션 PHP 버전을 업그레이드할 수 없는 팀에게 권장되는 접근 방식입니다. PDF 생성 프로세스는 격리되어 있습니다 — 입력을 읽고, PDF 파일을 작성하고, 종료합니다. 공유 상태도, 호환성 문제도 없습니다.
트레이드오프
PHP 8.5+를 요구함으로써 TCPDF-Next는 다음을 얻습니다:
- 더 작은 코드베이스 — 모던 기능이 수백 줄의 우회 코드를 대체합니다
- 더 강력한 타입 안전성 — PHPStan 레벨 8에서 오류 제로
- 더 나은 보안 —
#[\SensitiveParameter]가 로그에서 자격 증명 유출을 방지합니다 - 불변 객체 — 읽기 전용 클래스가 버그의 한 범주를 완전히 제거합니다
- 자체 문서화 코드 — 열거형이 매직 스트링을 대체하고, 명명된 인수가 위치 배열을 대체합니다
앞으로 10년간 여러분에게 봉사할 라이브러리는 앞으로 10년의 언어 기능 위에 구축되어야 합니다.