업데이트phplaravel업데이트
PHP 7.2.0 업데이트 — 한국 Laravel 개발자 영향 분석
작성: 라라벨 코리아 (초안)
발행: 2026년 8월 6일
## 요약
요약
PHP 7.2.0이 2017년 11월 30일 공식 릴리스되었습니다. 이번 버전은 타입 시스템 강화, 보안 개선, 성능 최적화, 그리고 오래된 기능 제거를 포함한 메이저 마이너 업데이트입니다. Laravel을 사용하는 한국 개발자들은 mcrypt 확장 제거, Countable 인터페이스 이동, 그리고 여러 Deprecation 사항을 반드시 확인해야 합니다.
핵심 내용
🔴 제거된 기능 (Breaking Changes)
mcrypt확장 PECL로 이전: PHP 7.1에서 deprecated 처리되었던mcrypt확장이 PHP 7.2에서 코어에서 완전히 제거되고 PECL로 이전되었습니다. Laravel 프로젝트에서Crypt::encrypt()등을 직접mcrypt_*함수 기반으로 사용하는 코드가 있다면 즉시openssl_*기반으로 마이그레이션해야 합니다. Laravel 프레임워크 자체는 이미 OpenSSL을 사용하지만, 레거시 코드나 서드파티 패키지에서mcrypt를 직접 호출하는 경우 주의가 필요합니다.sql.safe_mode디렉티브 제거:php.ini에서sql.safe_mode설정이 완전히 제거되었습니다. 해당 설정을 사용하는 서버 환경에서는 PHP 기동 시 경고가 발생할 수 있습니다.- Netware 플랫폼 지원 제거: 일반적인 Laravel 환경과는 무관하나, 빌드 환경 변경 시 참고 바랍니다.
- Windows 최소 지원 버전 상향: Windows 7 / Windows Server 2008 R2 미만 환경은 공식 지원이 종료됩니다.
🟠 Deprecation 사항
- Bareword(따옴표 없는 문자열) 사용 중단 예고: PHP 8.0에서 완전 제거 예정입니다. 코드 내 정의되지 않은 상수를 문자열처럼 사용하는 패턴(예:
$arr[key])은 이제 명시적 에러를 유발합니다. read_exif_data()별칭 deprecated: 대신exif_read_data()를 사용해야 합니다. 이미지 처리 관련 기능을 직접 구현한 경우 확인이 필요합니다.
🟡 타입 시스템 및 OOP 개선
object타입 힌트 추가: 함수 인자와 반환 타입으로object를 사용할 수 있게 되었습니다. 예:Laravel 서비스 컨테이너, Eloquent 모델 등 다양한 곳에서 더 유연한 타입 선언이 가능합니다.function doSomething(object $obj): object { return $obj; }Countable인터페이스 Core 이동: 기존 SPL에 속해 있던Countable인터페이스가 PHP Core로 이전되었습니다. 기능 변화는 없으나 SPL 의존도가 줄어들었습니다.DomNodeList,DOMNamedNodeMap에Countable구현: DOM 관련 작업 시count()함수를 직접 사용할 수 있습니다.HashContext가 리소스에서 객체로 변경:hash_init()반환값이 리소스 타입에서 객체 타입으로 변경되었습니다. 타입 체크나 직렬화 로직에서 영향을 받을 수 있습니다.ReflectionClass::isIterable()메서드 추가: 기존isIterateable()의 오타를 수정한 버전으로, 구 메서드는 별칭(alias)으로 유지됩니다.
🟢 성능 개선
- OPcache SSA 기반 전역 최적화 추가: Sparse Conditional Constant Propagation(SCCP), Dead Code Elimination(DCE), 미사용 지역 변수 제거 등 컴파일 타임 최적화가 추가되었습니다. 특별한 설정 변경 없이도 OPcache 활성화 시 성능 향상 효과를 기대할 수 있습니다.
- PCRE JIT fast path API 지원: 정규표현식 처리 성능이 개선되었습니다. Laravel 라우팅, 유효성 검사 등 내부적으로 정규표현식을 활용하는 영역에서 혜택을 받습니다.
in_array()해시 룩업 최적화:ZEND_IN_ARRAY명령어 추가로 배열 검색 성능이 향상되었습니다.array_keys()/array_values()마이너 최적화 추가.
🔵 보안 관련 변경
- 메일 헤더 인젝션 차단 강화:
mail()함수의extra headers파라미터를 통한 헤더 인젝션이 차단됩니다. Laravel의Mail파사드는 Swift Mailer / Symfony Mailer를 사용하므로 직접 영향은 낮으나, 레거시mail()직접 호출 코드를 사용 중이라면 확인이 필요합니다. - HMAC/PBKDF2에 비암호화 해시 함수 사용 불허:
hash_hmac()이나hash_pbkdf2()에crc32,adler32등 비암호화 목적의 알고리즘을 사용하면 오류가 발생합니다. JSON_INVALID_UTF8_IGNORE/JSON_INVALID_UTF8_SUBSTITUTE옵션 추가: 잘못된 UTF-8 바이트 시퀀스를 포함한 JSON 처리 시 무시하거나 대체 문자로 치환하는 옵션이 추가되었습니다. 외부 API 연동 시 인코딩 오류 처리에 유용합니다.- OpenSSL 기본 협상 방식이
TLS_ANY로 변경:ssl://및tls://스트림 기본값이 보다 유연한 TLS 버전 협상을 지원합니다. uniqid()랜덤 소스 개선: 더 나은 무작위성을 제공합니다. 단, 보안 목적에는random_bytes()사용을 권장합니다.
🔵 기타 주목할 변경
- Mbstring 함수 추가:
mb_chr(),mb_ord(),mb_scrub()추가. 한국어(EUC-KR, UTF-8) 문자열 처리 관련 코드에서 직접 활용 가능합니다.mb_convert_encoding()및mb_check_encoding()에 배열 입력 지원이 추가되었습니다. - FTP
ftp_append()및 MLSD 지원 추가. - EXIF 제조사별 벤더 태그 지원 확장: Samsung, Sony, Panasonic 등 국내에서 많이 사용하는 카메라/스마트폰의 EXIF 데이터 처리 정확도가 향상되었습니다.
PHP_OS_FAMILY상수 추가: OS 종류를 판별하는 새로운 상수. 단, macOS의 경우 기존"OSX"값이"Darwin"으로 변경되었으므로, OS 체크 코드를 사용 중이라면 수정이 필요합니다.extension=<name>방식 ini 지원:php.ini에서 확장 파일명 전체(extension=php_mbstring.dll) 대신 이름만(extension=mbstring)으로 로드 가능해졌습니다.- Group use에서 trailing comma 허용:
use구문 그룹에서 마지막 항목 뒤에 쉼표를 허용합니다.use App\Models\{ User, Post, // ← 허용 }; bcmod()소수점 처리 버그 수정:bcmod()가 소수 부분을 잘라내던 버그(#46564) 수정.bcmod('10.5', '3.2')와 같은 계산 결과가 달라질 수 있습니다.- FPM slow log trace caller 수 제한 설정 추가: 고트래픽 서비스에서 slow log의 스택 트레이스 깊이를 제한할 수 있습니다.
한국 Laravel 개발자에게 미치는 영향
호환성
| 항목 | 영향도 | 비고 |
|---|---|---|
mcrypt 제거 | 높음 | 레거시 프로젝트 의존 여부 확인 필수 |
object 타입힌트 추가 | 낮음 (긍정적) | 신규 코드에서 활용 가능 |
HashContext 객체 변환 | 중간 | 직접 타입 검사 코드 수정 필요 |
PHP_OS_FAMILY 값 변경 | 중간 | "OSX" → "Darwin" 확인 필요 |
bcmod() 버그 수정 | 중간 | 결제, 정산 관련 로직 검토 필요 |
| HMAC 비암호화 해시 불허 | 중간 | 관련 코드 사용 시 런타임 오류 |
마이그레이션 노력
- 낮음: 대부분의 최신 Laravel 프로젝트(Laravel 5.5+)는 PHP 7.2를 공식 지원하며, 프레임워크 자체는
mcrypt를 이미 사용하지 않습니다. - 중간: 레거시 코드베이스나 오래된 패키지를 포함하는 프로젝트는
mcrypt의존성 감사가 필요합니다.
보안 긴급도
mcrypt제거와 OpenSSL 기반 전환은 보안 관점에서 적극 권장되는 방향입니다. 아직 PHP 7.1 이하 환경을 사용 중이라면 업그레이드를 서두르기 바랍니다.
로컬 도구 관련 (Valet, Sail, Docker)
- Laravel Valet: macOS에서
PHP_OS_FAMILY가"Darwin"으로 반환되므로, Valet 환경에서 OS 체크 로직을 사용하는 경우 코드 검토가 필요합니다. Homebrew를 통해 PHP 7.2로 업그레이드 시brew upgrade php@7.2이후valet restart를 반드시 실행하세요. - Laravel Sail / Docker:
php:7.2-fpm이미지 사용 시docker-compose.yml의 PHP 이미지 태그 변경 후docker compose build --no-cache를 실행해 이미지를 재빌드해야 합니다.extension=mcrypt가Dockerfile에 포함되어 있다면 해당 줄을 제거하고 OpenSSL 기반으로 전환하세요. - FPM 운영 환경: slow log 설정에
request_slowlog_trace_depth옵션이 추가된 점을 활용해 운영 서버의 slow log 용량 관리에 적용할 수 있습니다.
실무 체크리스트
로컬 개발 환경
-
php -m | grep mcrypt명령으로mcrypt확장 사용 여부 확인 - 프로젝트 내
mcrypt_*함수 직접 호출 코드 검색:grep -rn "mcrypt_" ./app ./config -
composer.json의 의존 패키지 중mcrypt요구 패키지 확인:composer why-not php 7.2 -
hash_hmac()/hash_pbkdf2()사용 시 알고리즘이 암호화 해시(SHA-256 등)인지 확인 -
PHP_OS_FAMILY사용 코드가 있다면"Darwin"값으로 변경 여부 확인 -
bcmod()사용 코드(특히 금액 계산)의 결과값 검증 -
HashContext타입을 직접 검사하는 코드(is_resource()등) 수정 →$ctx instanceof HashContext - group
use구문 끝에 trailing comma 사용 여부 통일 (스타일 가이드 적용)
스테이징 환경
- PHP 7.2로 업그레이드 후
php -v및php --ini로 설정 확인 -
php.ini에서sql.safe_mode항목 제거 (존재 시 경고 발생) -
php.ini내extension=php_이름.dll형식 →extension=이름간소화 적용 여부 검토 - 애플리케이션 전체 기능 테스트 및
php artisan test실행 - OPcache 활성화 여부 확인 (
opcache.enable=1): SSA 최적화 자동 적용 - EXIF 처리 기능 사용 시 Samsung/Sony 등 국내 기기 이미지로 동작 검증
-
json_encode()/json_decode()호출부에서 새 상수(JSON_INVALID_UTF8_IGNORE) 활용 가능성 검토 - FPM 설정에
request_slowlog_trace_depth추가 여부 검토
운영(Production) 환경
- 운영 배포 전 스테이징에서 충분한 회귀 테스트 완료 확인
-
mcrypt의존 레거시 코드가 있다면 운영 배포 전 반드시 대체 완료 - PHP-FPM 재시작 후
phpinfo()또는php artisan about(Laravel 9+)으로 환경 확인 - APM/모니터링 도구(New Relic, Datadog, Sentry 등)에서 PHP 버전 변경 후 에러율 증가 여부 모니터링
- OpenSSL 기반 암호화 정상 작동 여부(
config/app.php의cipher,key설정) 재확인 - Docker 기반 배포 환경이라면 이미지 재빌드 및 컨테이너 롤링 업데이트 계획 수립
- 운영 서버의
extension_dir경로 설정 확인 (./ext상대경로 버그 수정 반영 여부)
⚠️ 주의 (Draft 검토 필요): PHP 7.2.0은 2017년 릴리스된 버전으로 현재(2024년) 기준 공식 지원이 종료된 상태입니다. 신규 프로젝트는 PHP 8.1 이상 사용을 강력히 권장합니다. 레거시 시스템 유지보수 목적으로 이 가이드를 참고하시기 바랍니다.