본문 바로가기

개발자 이야기/PHP

[PHP·백엔드] PHP 8.5.10 업데이트: DOM·배열·Exif 안정성 수정과 안전한 배포 체크리스트

반응형

PHP 8.5를 운영 중이라면 PHP 8.5.10으로 업데이트하되, DOM·Exif·깊게 중첩된 배열을 다루는 경로를 먼저 회귀 테스트하는 것이 좋습니다. PHP 프로젝트는 2026년 8월 27일 PHP 8.5.10을 버그 수정 릴리스로 공개하며 모든 PHP 8.5 사용자에게 업그레이드를 권고했습니다.

PHP 8.5.10에서 무엇이 바뀌었나

공식 변경 로그에서 웹 애플리케이션 운영과 직접 연결되는 수정은 다음과 같습니다.

  • 깊게 중첩된 배열 비교에서 발생할 수 있는 스택 오버플로를 수정했습니다.
  • 깊게 중첩된 DOMDocument와 Dom\XMLDocument 정규화 과정의 스택 오버플로를 수정했습니다.
  • 깊게 중첩된 DOM 노드를 DOMNode::isEqualNode()로 비교할 때의 스택 오버플로를 수정했습니다.
  • DTD가 기본값을 선언한 속성에서 DOMElement::setAttribute()가 조용히 실패하던 문제를 수정했습니다.
  • exif_read_data()가 HEIF 파일 크기보다 큰 메타 박스를 할당할 수 있던 문제를 수정했습니다.
  • DatePeriod::__construct()를 두 번 호출할 때의 메모리 누수를 수정했습니다.

이번 버전은 PHP.net이 공식적으로 버그 수정 릴리스라고 분류합니다. 따라서 근거 없이 보안 릴리스라고 부르기보다는, 비정상 입력과 복잡한 데이터에서 충돌·메모리 문제를 줄이는 안정성 업데이트로 이해하는 편이 정확합니다.

어떤 서비스가 우선 확인 대상인가

다음 기능이 있다면 업데이트 우선순위를 높이고 관련 테스트를 따로 실행하세요.

  • XML·HTML 문서를 DOMDocument로 파싱하거나 정규화하는 수집기와 변환기
  • 이미지 업로드 후 EXIF·HEIF 메타데이터를 읽는 미디어 처리 서비스
  • 외부 JSON을 재귀 배열로 변환한 뒤 비교하는 API·동기화 작업
  • OPcache preloading에서 상수 표현식과 first-class callable을 사용하는 애플리케이션
  • DatePeriod 객체를 반복 생성하거나 재초기화하는 장기 실행 워커

가장 작은 업그레이드 검증 절차

아래 명령은 Composer 기반 프로젝트에서 사용할 수 있는 설명용 예시입니다. 실제 테스트 명령과 배포 방식은 프로젝트에 맞게 바꾸세요.

php -v
composer check-platform-reqs
php vendor/bin/phpunit

컨테이너를 사용한다면 스테이징 이미지의 PHP 패치 버전을 8.5.10으로 고정한 뒤, 운영과 같은 확장 모듈을 로드해 테스트합니다.

FROM php:8.5.10-fpm

버전만 확인하고 바로 배포하지 말고, 업로드 샘플과 복잡한 XML·JSON 입력을 포함한 회귀 테스트를 실행하세요. 패치 릴리스는 새 기능 도입보다 위험이 작지만, 네이티브 확장·이미지 라이브러리·배포 이미지의 조합은 서비스마다 다릅니다.

호환성·보안·마이그레이션 주의점

  • PHP 8.5.10은 PHP 8.5 계열의 패치 업데이트입니다. PHP 8.4 이하에서 바로 올린다면 패치 업데이트가 아니라 마이너 버전 전환이므로 PHP 8.5 마이그레이션 가이드와 비호환 변경을 별도로 검토해야 합니다.
  • PECL이나 자체 컴파일한 네이티브 확장은 대상 PHP 바이너리와 함께 다시 빌드해야 할 수 있습니다. 스테이징에서 php -m과 애플리케이션 시작 로그를 비교하세요.
  • 이미지 메타데이터와 XML은 외부 입력입니다. 런타임 업데이트와 별개로 업로드 크기 제한, MIME 검증, 처리 시간 제한, 워커 격리를 유지하세요.
  • PHP 8.2는 공식 일정상 2026년 12월 31일까지 보안 수정만 제공됩니다. 8.2 운영자는 8.5.10 패치만 적용할 수 없으므로 지원되는 상위 브랜치로의 별도 마이그레이션 계획이 필요합니다.
  • 롤백을 위해 이전 이미지 태그와 설정을 보존하되, 데이터베이스 마이그레이션을 PHP 런타임 교체와 한 번에 묶지 않는 편이 안전합니다.

배포 체크리스트

  • 현재 PHP가 8.5 계열인지 확인했다.
  • Composer 플랫폼 요구 사항과 잠금 파일을 검사했다.
  • DOM·XML·Exif·중첩 배열 입력을 포함한 회귀 테스트를 실행했다.
  • PECL·네이티브 확장의 로드와 ABI 호환성을 확인했다.
  • 스테이징에서 FPM 재시작, 워커 종료, 세션·캐시 동작을 확인했다.
  • 단계적 배포와 즉시 롤백 가능한 이전 이미지 태그를 준비했다.
  • 배포 뒤 오류율, 메모리 사용량, 워커 재시작 횟수를 모니터링한다.

공식 출처

반응형