Laravel 13.7.0 업데이트
릴리스: 2026년 4월 29일
평가: 2026년 8월 28일
Laravel 13.7.0은 마이너 릴리스로, 다수의 버그 수정과 enum 지원 확장, docblock/타입 정리가 중심입니다. 주목할 항목은 서명된 URL 검증에서 배열 쿼리 파라미터를 이용한 우회를 방지한 보안성 수정과 큐 워커 시그널 처리 변경이며, 이 두 가지는 확인이 필요합니다. 나머지는 대부분 하위 호환되는 개선/버그 수정이라 별도 대응이 필요 없습니다.
패키지 관리자가 확인할 것
- Http (illuminate/http)위험도 보통
서명된 URL(signed URL) 검증 시 배열 형태의 쿼리 파라미터로 검증을 우회할 수 있던 문제가 수정되었습니다(PR #59860). 서명된 URL을 사용하는 라우트나 미들웨어에서 배열 쿼리 파라미터를 다루는 경우 동작 변화가 있을 수 있어 확인이 필요합니다.
대응 체크리스트
- 서명된 URL 검증 로직 점검가까운 시일
URL::signedRoute 또는 hasValidSignature를 사용하는 곳에서 배열 형태의 쿼리 파라미터를 전달하는지 확인하고, 업그레이드 후 서명 검증이 의도대로 동작하는지 테스트하세요.
- 큐 워커 시그널 반응 변경 확인선택
PR #59833, #59848에서 워커가 시그널(SIGTERM 등)에 반응하고 WorkerInterrupted 이벤트가 추가되었습니다. 커스텀 워커 종료 로직이나 큐 매니지드 워커(예: Horizon, 관리형 큐)를 사용 중이면 종료/일시정지 동작 변화가 있는지 확인하세요.
- composer update 후 일반 테스트 실행선택
enum 지원 확장, LazyCollection::has()/keyBy() 수정 등 컬렉션/캐시/레디스 관련 동작이 다수 변경되었으므로 CI에서 전체 테스트를 한 번 돌려 회귀 여부를 확인하세요.
자동 생성상세 평가
요약
Laravel 13.7.0은 마이너 릴리스로, 대부분 버그 수정, enum 지원 확대, PHPDoc/타입 정리로 구성되어 있습니다. 공개 API를 깨는 변경은 릴리스 노트 상 확인되지 않았습니다. 다만 서명된 URL 검증 우회 방지 수정과 큐 워커 시그널 처리 변경은 실사용 영향이 있을 수 있어 점검을 권장합니다.
주요 변경
- 서명된 URL 검증 강화: 배열 쿼리 파라미터로 서명 검증을 우회할 수 있던 문제를 수정했습니다 (#59860). 보안 관련 수정이므로 서명 URL을 쓰는 앱은 주의가 필요합니다.
- 큐 워커 시그널 대응: 잡(Job)이 워커 시그널에 반응할 수 있게 되었고,
WorkerInterrupted이벤트가 도입되었습니다 (#59833, #59848). 관리형 큐 워커에서는 일시정지(pausing)가 비활성화되도록 변경되었습니다 (#59870). - enum 지원 확대:
LazyCollection::keyBy(),ConcurrencyManager드라이버,RateLimitedWithRedis의$limiterName, Cachetouch(),QueueManager/LogManager/SessionManager의setDefaultDriver,RedisManager::purge()등 여러 곳에 UnitEnum 지원이 추가되었습니다. 이는 기존 문자열 사용을 깨지 않는 추가 기능입니다. - 테스트 헬퍼 개선:
assertSoftDeleted/assertNotSoftDeleted에 배열 지원,TestResponse에 JSON 경로 벌크 assertion 추가. - 기타 버그 수정: 도메인 스코프 라우트 등록 문제,
LazyCollection::has()중복 키 false positive,SqsConnector자격 증명 메모이제이션, 팩토리hasAttachedpivot JSON 처리 등. - 다수의 PHPDoc/타입 정리 및 rector 리팩토링: 실제 동작 변경 없는 내부 정리성 PR이 다수 포함되어 있습니다.
하위 호환성
릴리스 노트 상 공개 API를 깨는 변경(behaviour breaking change)은 명시되어 있지 않습니다. enum 지원 추가는 기존 문자열/값 기반 사용을 그대로 지원하면서 선택적으로 enum도 받는 방식이므로 하위 호환됩니다. 서명 URL 검증 수정은 보안을 강화하는 방향이라 기존에 우회 가능했던 잘못된 사용 패턴만 영향을 받습니다.
패키지 관리자가 확인할 것
- Http (illuminate/http): 서명된 URL 검증 로직을 사용하는 코드가 배열 쿼리 파라미터에 의존하고 있었다면 동작이 달라질 수 있습니다.
- 등록된 다른 패키지(Scout, Socialite, Inertia Laravel, Image 등)에 대해서는 이번 릴리스 노트에서 직접적인 영향 근거가 없습니다.
대응 체크리스트
- 서명된 URL(
signedRoute,hasValidSignature)을 사용하는 라우트에서 배열 쿼리 파라미터 사용 여부 확인 - 큐 워커 종료/일시정지 로직이나
WorkerInterrupted이벤트 관련 커스텀 처리가 있는지 확인 -
composer update laravel/framework후 CI 전체 테스트 실행 - 특별한 조치가 필요 없는 경우, 이번 릴리스는 일반 업그레이드로 충분함
GitHub 릴리스 노트를 근거로 언어 모델 (claude-sonnet-5)이 작성했으며, 사람이 검수하지 않았습니다. 실제 적용 전에는 공식 릴리스 노트와 업그레이드 가이드를 함께 확인하세요.
GitHub 원문 릴리스 노트 보기
- [13.x] Apply rector fixes by @lucasmichot in https://github.com/laravel/framework/pull/59787
- Support enum in LazyCollection -> keyBy() by @Back1ng in https://github.com/laravel/framework/pull/59809
- [13.x] Add enum support to ConcurrencyManager driver method by @maherelgamil in https://github.com/laravel/framework/pull/59801
- [13.x] Allow arrays for assertSoftDeleted & assertNotSoftDeleted by @jackbayliss in https://github.com/laravel/framework/pull/59796
- [13.x] Extract exception context in
JsonFormatterwhenExceptionHandleris not bound by @cosmastech in https://github.com/laravel/framework/pull/59799 - [13.x] Add isLocked to the Lock class by @jackbayliss in https://github.com/laravel/framework/pull/59791
- Fix route registration for domain-scoped routes by @Bottelet in https://github.com/laravel/framework/pull/59793
- [13.x] Mark
Scope@applybuilder parameter as having covariant template by @jnoordsij in https://github.com/laravel/framework/pull/59790 - [13.x] Allowing
DebounceForattribute to be inherited by @TWithers in https://github.com/laravel/framework/pull/59795 - [13.x] Fix PendingDispatch resolving Cache for every dispatched job by @sumaiazaman in https://github.com/laravel/framework/pull/59821
- [13.x] Add bulk JSON path assertions to TestResponse by @cyrodjohn in https://github.com/laravel/framework/pull/59829
- [13.x] Fix false positives in LazyCollection::has() for duplicate keys by @Button99 in https://github.com/laravel/framework/pull/59832
- [13.x] Add UnitEnum type support for $limiterName on RateLimitedWithRedis by @trippo in https://github.com/laravel/framework/pull/59841
- [13.x] Allow jobs to react to worker signals by @jackbayliss in https://github.com/laravel/framework/pull/59833
- [13.x] Honor empty JSON:API sparse fieldsets by @prateekbhujel in https://github.com/laravel/framework/pull/59813
- [13.x] Fix flaky DynamoBatchTest timing assertions by @sumaiazaman in https://github.com/laravel/framework/pull/59844
- [13.x] Memoize credentials in SqsConnector by @kieranbrown in https://github.com/laravel/framework/pull/59866
- [13.x] Disable pausing on managed queue workers by @kieranbrown in https://github.com/laravel/framework/pull/59870
- [13.x] Fix getMigrationBatches return type annotation by @mahfuz-rahman007 in https://github.com/laravel/framework/pull/59876
- [13.x] Fix PHPDoc typo in MigrationRepositoryInterface by @mahfuz-rahman007 in https://github.com/laravel/framework/pull/59875
- [13.x] Add UnitEnum support to Cache Repository touch method by @shane-zeng in https://github.com/laravel/framework/pull/59864
- [13.x] Prevent array query params from bypassing signed URL validation by @maherelgamil in https://github.com/laravel/framework/pull/59860
- [13.x] Add enum support to setDefaultDriver in QueueManager, LogManager, and SessionManager by @maherelgamil in https://github.com/laravel/framework/pull/59861
- [13.x] Add enum support to RedisManager purge method by @genius-asif-hub in https://github.com/laravel/framework/pull/59857
- [13.x] Fix factory hasAttached method pivot JSON attribute handling by @rmd974 in https://github.com/laravel/framework/pull/59856
- [13.x] Implement CanFlushLocks on NullStore and MemoizedStore by @sumaiazaman in https://github.com/laravel/framework/pull/59850
- [13.x] Introduce WorkerInterrupted event by @jackbayliss in https://github.com/laravel/framework/pull/59848
- [13.x] Fix MigrationRepositoryInterface return type docblocks (object vs array) by @mosabbirrakib in https://github.com/laravel/framework/pull/59887
- int argument for Collection::sortBy() by @lorenzolosa in https://github.com/laravel/framework/pull/59894
- [13.x] Add detailed @return shape to Schema\Builder::getForeignKeys by @maherelgamil in https://github.com/laravel/framework/pull/59903
- [13.x] Fix EloquentModelDecimalCastingTest assertion across brick/math versions by @maherelgamil in https://github.com/laravel/framework/pull/59904
- [13.x] Correct Lock getCurrentOwner @return type to string|null by @mosabbirrakib in https://github.com/laravel/framework/pull/59890
- [13.x] Correct Batch fresh and add @return to self|null by @mosabbirrakib in https://github.com/laravel/framework/pull/59891
- [13.x] Align Mailable::cc @return with sibling fluent methods by @mosabbirrakib in https://github.com/laravel/framework/pull/59892
- [13.x] Add support for
SortDirectionenum to collections and Arr by @jnoordsij in https://github.com/laravel/framework/pull/59859 - Add @fonts Blade directive and Vite font optimization runtime by @WendellAdriel in https://github.com/laravel/framework/pull/59584
- [13.x] Refactor: add
matchby @alipowerful7 in https://github.com/laravel/framework/pull/59914 - [13.x] Refactor: remove unnecessary call function by @alipowerful7 in https://github.com/laravel/framework/pull/59915
- [13.x] Refactor: improve tests by @alipowerful7 in https://github.com/laravel/framework/pull/59912
- Align Enumerable all, times and range @return with implementations by @mosabbirrakib in https://github.com/laravel/framework/pull/59911
- Align Enumerable search and flatten @return with implementations by @mosabbirrakib in https://github.com/laravel/framework/pull/59910
- Specify Translation Loader namespaces shape by @mosabbirrakib in https://github.com/laravel/framework/pull/59913
- Fix duplicate type key in getTypes/processTypes return shape by @mosabbirrakib in https://github.com/laravel/framework/pull/59909
- int argument for sortByDesc and Enumerable sort methods by @mosabbirrakib in https://github.com/laravel/framework/pull/59907
- Match processForeignKeys return shape to Builder::getForeignKeys by @mosabbirrakib in https://github.com/laravel/framework/pull/59908