PHP 7.3.0 업데이트 — 한국 Laravel 개발자 영향 분석
작성: 라라벨 코리아 (초안)
발행: 2026년 8월 6일
## 요약
요약
PHP 7.3.0이 2018년 12월 6일 정식(GA) 릴리스되었습니다. 이번 버전은 GC(가비지 컬렉터) 개선, 유연한 Heredoc/Nowdoc 문법, JSON_THROW_ON_ERROR 플래그 추가 등 Laravel 개발 실무에 직접적인 영향을 미치는 변경사항을 다수 포함합니다. 한국 Laravel 커뮤니티 개발자라면 기존 7.2 환경에서의 호환성 검토와 함께 PCRE2 마이그레이션, 대소문자 구분 없는 상수 deprecation 등 Breaking Change에 대한 사전 대응이 필요합니다.
핵심 내용
1. 유연한 Heredoc / Nowdoc 문법 (Flexible Heredoc/Nowdoc)
RFC에 따라 Heredoc과 Nowdoc의 닫는 식별자(marker)를 이제 들여쓰기(indent)할 수 있습니다. Laravel Blade 템플릿이나 긴 SQL 쿼리를 코드 내에 포함할 때 가독성이 크게 향상됩니다.
// 7.3 이전 — 닫는 마커가 반드시 열 1에 위치해야 했음
$query = <<<SQL
SELECT * FROM users
SQL;
// 7.3 이후 — 닫는 마커를 들여쓰기 가능
$query = <<<SQL
SELECT * FROM users
SQL;주의: 7.2 이하 환경과 코드를 공유하는 경우 구문 오류(Parse Error)가 발생합니다. 배포 파이프라인에서 PHP 버전을 확인하세요.
2. JSON_THROW_ON_ERROR — Laravel JSON 처리 방식 개선
기존 json_decode() / json_encode()는 실패 시 null이나 false를 반환했고, json_last_error()로 별도 확인이 필요했습니다. 이제 JSON_THROW_ON_ERROR 플래그를 사용하면 JsonException이 자동으로 throw됩니다.
// 7.3 이전 방식
$data = json_decode($payload);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new \RuntimeException('JSON 파싱 실패');
}
// 7.3 이후 방식
$data = json_decode($payload, true, 512, JSON_THROW_ON_ERROR);Laravel의 Illuminate\Http\Request, API Resource, JSON Response 내부 파싱 로직을 직접 오버라이드하거나 커스텀 미들웨어를 작성할 때 훨씬 명확한 예외 처리가 가능해집니다.
3. list() 및 배열 구조 분해 시 참조(Reference) 지원
$array = [1, 2];
[&$a, &$b] = $array;Laravel 컬렉션 파이프라인이나 복잡한 데이터 매핑 로직에서 참조를 활용한 구조 분해가 가능해져 코드 간결성이 향상됩니다.
4. PCRE2 마이그레이션 — 정규식 동작 변경 주의
PCRE 라이브러리가 PCRE2(버전 10.32)로 업그레이드되었습니다. 대부분의 경우 하위 호환성이 유지되지만, 일부 패턴에서 동작 차이가 보고되었습니다(Bug #76909 참조). Laravel의 라우팅(Route::pattern()), 유효성 검사 규칙(Regex rule), 커스텀 정규식을 사용하는 코드는 반드시 테스트가 필요합니다.
\w가 유니코드 문자를 포함하던 방식이 변경될 수 있음 (Bug #76512)PREG_JIT_STACKLIMIT_ERROR관련 동작도 수정됨 (Bug #76514)
5. 대소문자 구분 없는 상수(Case-Insensitive Constants) Deprecation
// 이제 Deprecated
define('MY_CONST', 'value', true); // 세 번째 인자 truePHP 8.0에서는 완전히 제거될 예정입니다. 레거시 Laravel 프로젝트에서 define() 세 번째 인자를 사용하는 코드를 점검해야 합니다.
6. GC(가비지 컬렉터) 개선
내부 GC 알고리즘이 개선되어 메모리 집약적인 Laravel 애플리케이션(대용량 Eloquent 컬렉션 처리, Queue Worker 장기 실행 등)에서 성능 향상을 기대할 수 있습니다. 단, 정확한 수치는 애플리케이션별로 다를 수 있으므로 프로파일링을 권장합니다.
7. FPM 개선사항
fpm_get_status()함수 추가로 FPM 상태를 PHP 코드 내에서 직접 조회 가능log_limit,log_buffering,decorate_workers_output설정 옵션 추가getallheaders()PHP-FPM 누락 버그 수정 (Bug #62596) — Laravel 미들웨어에서 헤더 파싱 시 오동작이 있었다면 이번 버전으로 해결될 수 있음
8. DateTime::createFromImmutable() 추가
DateTimeImmutable 객체를 DateTime으로 변환하는 메서드가 공식 추가되었습니다. Laravel Carbon과 혼용하는 코드에서 유용합니다.
9. BCMath 개선
- 현재 스케일(scale)을 반환하는 방법 추가 (Request #67855)
bcmul()이 scale 파라미터를 무시하던 버그 수정 (Bug #66364)
금융 계산, 결제 처리 등을 BCMath로 구현한 Laravel 프로젝트에서는 이전 버전의 bcmul() 버그가 잠재적으로 존재했을 수 있으므로 검증이 필요합니다.
10. GD — WebP 이미지 지원 강화
imagecreatefromstring()에서 WebP 포맷을 지원합니다. Laravel의 이미지 처리 패키지(Intervention Image 등)와 연계 시 WebP 파이프라인 구성이 더 용이해집니다.
한국 Laravel 개발자에게 미치는 영향
호환성
| 항목 | 영향도 | 비고 |
|---|---|---|
| PCRE2 마이그레이션 | 높음 | 정규식 기반 라우팅/유효성 검사 재검증 필요 |
| Case-Insensitive Constants Deprecation | 중간 | PHP 8 대비 사전 정리 권장 |
| Flexible Heredoc | 낮음 | 신규 문법, 기존 코드 영향 없음 |
JSON_THROW_ON_ERROR | 낮음 (선택적 적용) | 기존 코드 변경 불필요, 신규 코드에 적용 권장 |
BCMath bcmul() 버그 수정 | 중간 | 금융/결제 로직에서 기존 동작 재검증 필요 |
Laravel Valet (macOS)
- Valet은 내부적으로 Homebrew PHP를 사용합니다.
brew install php@7.3또는valet use php@7.3으로 전환 가능합니다. - 다만 PHP 7.3은 현재 공식 지원이 종료(EOL)된 버전입니다. 신규 프로젝트라면 PHP 8.1 이상을 권장하며, 이 가이드는 레거시 환경 유지보수 목적으로 참고하세요.
Laravel Sail / Docker
# docker-compose.yml
services:
laravel.test:
image: 'sail-7.3/app' # PHP 7.3 기반 이미지Sail 공식 이미지는 7.3을 포함한 여러 PHP 버전을 지원합니다. sail build --no-cache 후 sail up으로 환경 재구성이 필요합니다.
운영 서버 (AWS, NCP, Cafe24 등)
국내 호스팅 환경에서는 PHP 버전 변경 시 phpinfo() 또는 php -v로 실제 적용 버전을 반드시 확인하세요. 일부 공유 호스팅 패널(cPanel, DirectAdmin)은 PHP 버전 선택 옵션이 제한될 수 있습니다.
실무 체크리스트
로컬 환경
-
php -v로 현재 PHP 버전 확인 - Valet:
valet use php@7.3또는 Sail:.env의APP_SERVICE이미지 변경 -
composer.json의require.php버전 제약 조건 검토 ("php": "^7.3"등) - PHPUnit 실행:
./vendor/bin/phpunit— PCRE2 관련 정규식 테스트 케이스 중점 확인 -
define()세 번째 인자 사용 여부 전체 검색:grep -rn "define(" app/ --include="*.php" | grep ", true)"
스테이징 환경
- Laravel 라우팅 정규식 패턴 (
Route::pattern()) 동작 검증 - 유효성 검사
Regex룰 통합 테스트 실행 - BCMath를 사용하는 금융/결제 계산 로직의 결과값 비교 검증
- PHP-FPM
log_limit설정 검토 — 긴 로그 메시지 truncation 이슈 있었다면 수정 -
getallheaders()관련 미들웨어 동작 확인 - Queue Worker 장기 실행 시 메모리 사용량 모니터링 (GC 개선 효과 확인)
프로덕션 배포
- 블루/그린 또는 롤링 배포 전략으로 PHP 버전 전환
-
php.ini변경사항 확인:syslog.facility,syslog.ident,syslog.filter신규 옵션 - PHP-FPM
pool.conf에log_limit,log_buffering설정 적용 여부 결정 - OPcache 캐시 초기화:
php-fpm reload또는cachetool opcache:reset - 배포 후 Sentry / Bugsnag 등 에러 트래킹 대시보드에서
JsonException,ParseError신규 발생 여부 모니터링 -
IMAP확장 사용 시 Bug #77153(임의 셸 명령 실행 취약점) 패치 포함 여부 확인 — 보안 관련, 우선순위 높음
⚠️ 보안 참고: PHP 7.3은 2021년 12월 EOL이 완료된 버전입니다. 현재 운영 중인 프로젝트라면 PHP 8.1 이상으로의 업그레이드 로드맵을 수립하시기 바랍니다. 이 문서는 레거시 환경 분석 및 마이그레이션 계획 수립 참고용으로 작성되었습니다.