← 아티클 목록
업데이트phplaravel업데이트

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); // 세 번째 인자 true

PHP 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-cachesail up으로 환경 재구성이 필요합니다.

운영 서버 (AWS, NCP, Cafe24 등)

국내 호스팅 환경에서는 PHP 버전 변경 시 phpinfo() 또는 php -v로 실제 적용 버전을 반드시 확인하세요. 일부 공유 호스팅 패널(cPanel, DirectAdmin)은 PHP 버전 선택 옵션이 제한될 수 있습니다.


실무 체크리스트

로컬 환경

  • php -v로 현재 PHP 버전 확인
  • Valet: valet use php@7.3 또는 Sail: .envAPP_SERVICE 이미지 변경
  • composer.jsonrequire.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.conflog_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 이상으로의 업그레이드 로드맵을 수립하시기 바랍니다. 이 문서는 레거시 환경 분석 및 마이그레이션 계획 수립 참고용으로 작성되었습니다.