PHP 8.3.24 업데이트 — 한국 Laravel 개발자 영향 분석
작성: 라라벨 코리아 (초안)
발행: 2026년 8월 6일
## 요약
요약
PHP 8.3.24가 릴리스되었습니다. 이번 버전은 Core의 메모리 해제 후 사용(Use-After-Free) 버그, Phar 이중 해제(double free) 크래시, Opcache JIT 세그폴트 등 실무에서 발생할 수 있는 심각한 안정성 문제들을 포함한 다수의 버그 픽스를 담고 있습니다. 보안 취약점이 포함된 PHP 8.3.23의 후속 패치이므로, 8.3.x 계열을 사용하는 모든 프로젝트에서 즉시 업그레이드를 검토해야 합니다.
핵심 내용
🔴 안정성에 영향을 미치는 주요 버그 픽스
Core — WeakMap Use-After-Free (GH-18833)
- 객체 소멸 순서에 따라
WeakMap이 이미 해제된 메모리에 접근하는 버그가 수정되었습니다. - Laravel의 서비스 컨테이너나 이벤트 시스템처럼 다수의 객체를 관리하는 코드에서 간헐적으로 발생할 수 있는 크래시 원인이었습니다.
- PHP 8.3의 WeakMap을 캐시나 옵저버 패턴으로 활용 중인 프로젝트는 특히 주의가 필요합니다.
Phar — Stream 이중 해제 및 SplFileObject 크래시
phar스트림에서 double free가 발생하는 버그와,SplFileObject와 함께 사용 시 크래시 및 파일 손상이 발생하는 버그가 동시에 수정되었습니다.- 배포 자동화나 아카이브 처리 기능에서
.phar파일을 직접 다루는 경우 영향을 받을 수 있습니다.
Opcache — JIT 세그폴트 및 프리로딩 호환성
GH-18639: 내부 클래스 별칭(alias)이 프리로딩과 JIT를 동시에 사용할 때 깨지는 버그가 수정되었습니다.GH-14082: JIT 코드 내 알 수 없는 주소에서 발생하던 세그멘테이션 폴트가 수정되었습니다.opcache.preload와 JIT를 함께 활성화한 프로덕션 환경에서 실제로 재현될 수 있는 문제입니다.
SPL — MultipleIterator 크래시 (GH-19094)
Iterator인터페이스를 구현하지 않은 클래스를MultipleIterator에 연결할 경우 크래시가 발생하던 버그가 수정되었습니다.- 커스텀 이터레이터 구현을 활용하는 코드베이스에서 잠재적 위험이 있었습니다.
PCNTL — Fork 후 셧다운 시 Fatal Error (GH-18958)
pcntl_rfork()또는pcntl_forkx()사용 후zend-max-execution-timers와 함께 셧다운 시 Fatal Error가 발생하던 버그가 수정되었습니다.- Laravel Horizon, Queue Worker, Octane 등 멀티프로세스 환경에서 의미 있는 수정입니다.
🟡 메모리 누수 수정
| 컴포넌트 | 내용 |
|---|---|
| Curl | 콜백에서 refcounted 값 반환 시 메모리 누수 |
| OCI8 | OCI_RETURN_LOBS 플래그 사용 시 메모리 누수 |
| SOAP | HTTP 소켓이 객체 소멸 시 닫히지 않는 문제 / URL 파싱 실패 시 누수 |
| Streams | fgets() / stream_get_line()이 필터 Fatal Error 시 false 미반환 (GH-13264) |
| Zip | ZipArchive::extractTo()에서 경로가 너무 길 때 누수 |
| MbString | mb_split() 정수 오버플로 |
🟢 기타 수정
- OpenSSL:
stream_socket_server()에서 클라이언트 피어 인증서를 가져올 수 없던 버그 수정 (버그 #80770, 오랫동안 미해결 상태였던 이슈) - LDAP: 빈 요청 OID로
ldap_exop()호출 시 assert 트리거 수정 - Standard:
printf()오해를 유발하는 오류 메시지 수정,pack()함수의h/H포맷에서INT_MAX반복자 값 오버플로 수정 - Calendar:
jewishtojd()연도 인수 오버플로 수정
한국 Laravel 개발자에게 미치는 영향
Laravel 버전별 호환성
PHP 8.3.24는 기존 8.3.x 코드와 완전한 하위 호환성을 유지합니다. Laravel 10.x(PHP 8.1+), Laravel 11.x(PHP 8.2+), Laravel 12.x(PHP 8.2+) 모두 PHP 8.3.24와 함께 사용 가능합니다.
실무 영향 포인트
Opcache + JIT 사용자 (영향 높음)
opcache.jit=tracing또는opcache.jit=1255와opcache.preload를 함께 설정한 프로덕션 서버에서 GH-18639, GH-14082 버그가 간헐적 크래시를 유발했을 수 있습니다.- 업그레이드 후 기존에 설명되지 않던 크래시가 사라지는지 모니터링을 권장합니다.
Laravel Octane 사용자 (영향 중간)
- Octane(Swoole/RoadRunner/FrankenPHP)은 장기 실행 프로세스 특성상 메모리 누수 수정의 혜택을 직접적으로 받습니다. Curl 콜백 누수, SOAP 소켓 미닫힘 문제가 트래픽이 높은 환경에서 메모리 증가로 나타날 수 있었습니다.
Queue Worker / Horizon (영향 중간)
- PCNTL fork 관련 수정(GH-18958)은 Queue Worker가
pcntl기반으로 동작하는 환경에서 예기치 않은 셧다운 오류를 방지합니다.
로컬 개발 환경별 업그레이드 방법
# Laravel Valet (macOS, Homebrew)brew upgrade phpvalet restart# Laravel Sail (Docker)# docker-compose.yml 또는 Dockerfile의 PHP 이미지 태그 확인 후docker compose pulldocker compose up -d --build# 직접 Ubuntu/Debian 서버sudo apt updatesudo apt upgrade php8.3# Ondřej PPA 사용 시sudo apt-get upgrade php8.3Streams 동작 변경 주의 (GH-13264)
fgets()및stream_get_line()이 필터 Fatal Error 발생 시 이제false를 올바르게 반환합니다.- 기존에 이 함수들의 반환값 체크를 생략했던 코드에서 동작이 달라질 수 있으므로 스트림 처리 로직을 검토하세요.
실무 체크리스트
로컬 환경
-
php -v명령으로 현재 버전 확인 - Valet:
brew upgrade php && valet restart실행 - Sail/Docker: 베이스 이미지 업데이트 후
docker compose build --no-cache실행 -
phpunit으로 전체 테스트 스위트 실행하여fgets()/stream_get_line()반환값 관련 회귀 확인
스테이징 환경
- PHP 업그레이드 후
opcache.preload가 설정된 경우 서버 재시작 후 프리로드 정상 동작 확인 - JIT 활성화 환경에서 애플리케이션 워밍업 후 로그에 세그폴트 흔적 없는지 확인
- Phar 기반 도구(Composer, PHPStan, Pint 등)의 정상 실행 여부 확인
- SOAP 클라이언트 사용 시 메모리 사용량 모니터링
-
ZipArchive사용 기능(파일 업로드, 익스포트 등) 정상 동작 확인
프로덕션 환경
- 배포 전
composer check-platform-reqs로 패키지 PHP 버전 요구사항 충족 여부 재확인 (변동 없음이 예상되나 확인 권장) - PHP-FPM 사용 시:
sudo systemctl restart php8.3-fpm실행 - Opcache 캐시 초기화:
opcache_reset()호출 또는 FPM 재시작 - 배포 후 APM(New Relic, Datadog, Sentry 등)에서 메모리 사용 추이 및 크래시 빈도 비교 모니터링
- Laravel Horizon 사용 시:
php artisan horizon:terminate후 재시작하여 Worker 프로세스 갱신 - Laravel Octane 사용 시: 서버 재시작으로 장기 실행 프로세스에 패치 적용
보안 참고 사항
PHP 8.3.24의 직접적인 CVE는 changelog에 명시되어 있지 않지만, 직전 버전인 PHP 8.3.23에는 CVE-2025-1735 (PGSQL 확장 이스케이핑 오류), CVE-2025-6491 (SOAP NULL 포인터 역참조), CVE-2025-1220 (호스트명 Null 바이트 종료) 등 보안 취약점이 포함되어 있었습니다. 아직 8.3.23 미만 버전을 사용 중이라면 보안상의 이유로 8.3.24로의 업그레이드가 긴급히 권장됩니다.
편집자 주: 이 문서는 공식 PHP 릴리스 changelog를 기반으로 작성된 초안입니다. 릴리스 날짜(
?? ??? ????)는 공식 발표 시 확정되므로, 최종 발행 전 php.net/releases에서 정확한 날짜를 확인하여 보완하시기 바랍니다.