Laravel 13.34.0 업데이트
릴리스: 2026년 9월 29일
평가: 2026년 9월 29일
13.34.0은 다수의 버그 수정과 소규모 기능 추가로 구성된 정기 마이너 릴리스입니다. 릴리스 노트에 공개 API를 깨는 변경은 명시되어 있지 않지만, Eloquent 관계·큐·Number/Collection 헬퍼 등 여러 영역에서 동작이 수정되었으므로 해당 기능을 사용 중이라면 확인이 필요합니다. 대부분의 애플리케이션은 즉시 대응할 필요 없이 통상적인 업그레이드로 처리 가능합니다.
패키지 관리자가 확인할 것
- Horizon위험도 낮음
큐 워커 관련 변경(작업 처리 시간 포함 JobProcessed 이벤트, 타임아웃 예정 알림, maxExceptions에 워커 크래시 반영, queue:restart 오류 표시, queue:flush --queue 옵션)이 포함되어 있어 큐 대시보드/모니터링 로직에 영향이 있을 수 있습니다.
- Laravel Queue Rabbitmq위험도 낮음
PR #61651, #61737 등 큐 워커의 타임아웃/크래시/재시작 처리 방식이 수정되었으므로, RabbitMQ 드라이버와의 상호작용에서 동작 차이가 있는지 확인 권장.
- Laravel Permission위험도 낮음
PR #61721(whereNot 배열 조건 이중 부정 수정)과 관련해 권한/역할 조회에 whereNot 배열 조건을 사용하는 경우 결과가 달라질 수 있어 확인 권장.
- Laravel Medialibrary위험도 낮음
PR #61751(모델 replicate 시 refreshed 속성 제외)이 미디어 연관 모델 복제 로직에 영향을 줄 수 있어 확인 권장.
대응 체크리스트
- Eloquent whereMorphedTo/whereNotMorphedTo 및 morph map 사용처 점검가까운 시일
PR #61712, #61711에서 관계의 owner key 존중 및 폴리모픽 관계 조회 시 morph map 강제 적용이 변경되었습니다. 커스텀 owner key나 morph map을 사용 중이면 쿼리 결과를 재확인하세요.
- wherePivotBetween과 sync/detach/updateExistingPivot 조합 재확인가까운 시일
PR #61747에서 wherePivotBetween()이 sync(), detach(), updateExistingPivot()에서 무시되던 버그가 수정되었습니다. 이 조합을 사용 중이면 동작이 달라질 수 있으니 테스트하세요.
- Number:: 및 Collection:: 헬퍼 사용처 확인선택
Number::parseInt(), Number::format/percentage/currency의 -0 반환, Collection::mode(), sortBy() SORT_NUMERIC 소수점 절삭 버그가 수정되었습니다(PR #61691, #61716, #61686, #61699). 해당 헬퍼를 핵심 로직에 사용 중이면 결과값을 재확인하세요.
- 일반 업그레이드 및 테스트 실행선택
composer update laravel/framework 후 전체 테스트 스위트를 실행해 회귀가 없는지 확인하세요. 이번 릴리스는 하위 호환성을 깨는 변경으로 명시된 항목이 없습니다.
자동 생성상세 평가
요약
13.34.0(13.x 브랜치)은 다수의 버그 수정과 소규모 신규 기능이 포함된 정기 마이너 릴리스입니다. 릴리스 노트에는 공개 API를 깨뜨리는 변경으로 명시된 항목이 없으며, 대부분 내부 버그 수정 및 편의 기능 추가입니다.
주요 변경
- 큐:
JobProcessed이벤트에 처리 시간 포함, 타임아웃 예정 시 알림,queue:flush --queue옵션 추가,maxExceptions에 워커 크래시 반영,queue:restart에서 재시작 불가 시 오류 표시. - Eloquent:
whereMorphedTo/whereNotMorphedTo가 관계의 owner key를 존중하도록 수정, 폴리모픽 관계 읽기 시 morph map 강제 적용,wherePivotBetween()이sync()/detach()/updateExistingPivot()에서 무시되던 버그 수정,whereNot()배열 조건의 이중 부정 버그 수정, increment/decrement 후 refreshed 속성 원본 상태 동기화, replicate 시 refreshed 속성 제외. - 헬퍼/컬렉션:
Number::parseInt()32비트 초과 값 버그,Number::format/percentage/currency의-0반환 버그,Collection::mode()가 존재하지 않는 값을 반환하던 버그,sortBy()+SORT_NUMERIC소수점 절삭 버그,LazyCollection::combine()길이 불일치 시ValueErrorthrow. - 락/캐시:
PhpRedisLock::refresh()phpredis 직렬화 활성 시 버그, Memcached 락 30일 초과 시 즉시 만료되던 버그,DatabaseLock이 트랜잭션 내 데드락을 삼키던 문제 수정, 태그된 캐시 memoizedmany()의 숫자 키 처리 버그,ArrayStore::touch()에서 점(dot) 표기 키를 리터럴로 처리. - 기타:
trans_choice()음수 복수형 선택 오류 수정, S3 named credential provider 및 Cloud IAM 디스크 지원 추가,Schema\Builder::getColumn()메서드 신규 추가, multipart 요청 재시도 시 스트림 내용 손실 버그 수정,assertDatabaseCount가 배열을 받을 수 있도록 확장.
하위 호환성
릴리스 노트에 하위 호환성을 깨는 변경으로 명시된 항목은 없습니다. 다만 여러 항목이 "버그 수정"으로 기존의 잘못된 동작에 의존하고 있었다면 결과 값이나 쿼리 결과가 달라질 수 있습니다(특히 whereMorphedTo, wherePivotBetween, whereNot 배열 조건 관련).
패키지 관리자가 확인할 것
- Horizon / Laravel Queue Rabbitmq: 큐 워커의 타임아웃 알림, 크래시 카운트, 재시작 오류 처리 변경 사항이 대시보드나 커스텀 워커 로직과 상호작용하는지 확인.
- Laravel Permission:
whereNot()배열 조건 이중 부정 수정이 권한/역할 조회 쿼리에 영향을 주는지 확인. - Laravel Medialibrary: 모델 replicate 시 refreshed 속성 제외 변경이 미디어 연관 모델 복제에 영향을 주는지 확인.
- 그 외 등록된 패키지들에는 이번 릴리스 노트상 직접적인 영향 근거가 없습니다.
대응 체크리스트
-
composer update laravel/framework로 업그레이드 후 전체 테스트 스위트 실행 -
whereMorphedTo/whereNotMorphedTo, morph map,wherePivotBetween사용 코드 재검토 -
Number::및Collection::mode()/sortBy()사용처의 결과값 재확인 - 큐 워커 타임아웃/재시작/크래시 관련 커스텀 로직이 있다면 동작 재확인
- 긴급 대응 불필요 — 보안 패치나 강제 마이그레이션 항목 없음
GitHub 릴리스 노트를 근거로 언어 모델 (claude-sonnet-5)이 작성했으며, 사람이 검수하지 않았습니다. 실제 적용 전에는 공식 릴리스 노트와 업그레이드 가이드를 함께 확인하세요.
GitHub 원문 릴리스 노트 보기
- [13.x] Include duration in JobProcessed event by @jackbayliss in https://github.com/laravel/framework/pull/61672
- [13.x] Notify job when a timeout is going to occur by @jackbayliss in https://github.com/laravel/framework/pull/61651
- [13.x] Add --queue option to queue:flush by @jackbayliss in https://github.com/laravel/framework/pull/61630
- Allow null in docblocks to match existing code by @miclf in https://github.com/laravel/framework/pull/61679
- [13.x] Support LazyCollection values in between clauses by @vikas-kushwaha-dev in https://github.com/laravel/framework/pull/61678
- [13.x] Sync refreshed attributes to original state after increment / decrement by @ilhammmaulana in https://github.com/laravel/framework/pull/61680
- [13.x] Fix
Number::parseInt()returning false for values above 32-bit range by @sumaiazaman in https://github.com/laravel/framework/pull/61691 - [13.x] Fix
PhpRedisLock::refresh()when phpredis serialization is enabled by @sumaiazaman in https://github.com/laravel/framework/pull/61690 - [13.x] Fix Collection::mode() returning values not present in the data when nulls exist by @MoZayedSaeid in https://github.com/laravel/framework/pull/61686
- [13.x] Adjust some worker docblocks by @jackbayliss in https://github.com/laravel/framework/pull/61683
- [13.x] Respect the relation's owner key in whereMorphedTo / whereNotMorphedTo by @axlon in https://github.com/laravel/framework/pull/61712
- Enforce morph map on read side of polymorphic relations by @paulinevos in https://github.com/laravel/framework/pull/61711
- [13.x] Display error in
queue:restartwhen worker isn't restartable by @jackbayliss in https://github.com/laravel/framework/pull/61706 - [13.x] Test Improvements by @crynobone in https://github.com/laravel/framework/pull/61697
- [13.x] Throw ValueError in LazyCollection::combine() on mismatched lengths by @mrjavadseydi in https://github.com/laravel/framework/pull/61696
- [13.x] Fix
trans_choice()picking the wrong plural form for negative numbers by @sumaiazaman in https://github.com/laravel/framework/pull/61700 - [13.x] Don't swallow deadlocks in
DatabaseLockinside a transaction by @lazerg in https://github.com/laravel/framework/pull/61708 - [13.x] Fix
sortBy()with multiple columns andSORT_NUMERICtruncating fractional values by @sumaiazaman in https://github.com/laravel/framework/pull/61699 - [13.x] Fix Number::format(), percentage() and currency() returning "-0" by @mrjavadseydi in https://github.com/laravel/framework/pull/61716
- [13.x] Allow assertDatabaseCount to accept an array by @jackbayliss in https://github.com/laravel/framework/pull/61727
- [13.x] Fix multipart requests losing attached stream contents on retry by @mehdishakki in https://github.com/laravel/framework/pull/61728
- [13.x] Allow enums in Queue::isPaused() by @jackbayliss in https://github.com/laravel/framework/pull/61725
- [13.x] Fix double negation in Eloquent
whereNot()with array conditions by @Nejcc in https://github.com/laravel/framework/pull/61721 - [13.x] Allow enums in environment checks by @Taldres in https://github.com/laravel/framework/pull/61730
- [13.x] Return an empty collection from
shift($count)on an empty collection by @Nejcc in https://github.com/laravel/framework/pull/61723 - [13.x] Test with real objects by @jasonmccreary in https://github.com/laravel/framework/pull/61663
- [13.x] Cloud exceptions by @timacdonald in https://github.com/laravel/framework/pull/61704
- [13.x] Run workflows on Windows 2025 by @jnoordsij in https://github.com/laravel/framework/pull/61718
- [13.x] Use constant time lookups for validator exclusions by @owenconti in https://github.com/laravel/framework/pull/61698
- [13.x] Preserve existing PDO options when forcing emulated prepares for pooled Cloud Postgres by @laurenschristian in https://github.com/laravel/framework/pull/61735
- [13.x] Fix using elsePushIf blade directive with complex conditions by @mrjavadseydi in https://github.com/laravel/framework/pull/61741
- [13.x] Fix Memcached locks longer than 30 days expiring immediately by @sumaiazaman in https://github.com/laravel/framework/pull/61742
- [13.x] Allow jobs to count worker crashes towards maxExceptions by @williamjulianvicary in https://github.com/laravel/framework/pull/61737
- [13.x] Fix Redis throttle returning a timestamp as the remaining attempts by @sumaiazaman in https://github.com/laravel/framework/pull/61748
- Fix typos for Markdown files by @peter279k in https://github.com/laravel/framework/pull/61746
- [13.x] Support named S3 credential providers and Cloud IAM disks by @kieranbrown in https://github.com/laravel/framework/pull/61676
- [13.x] Supports
phpstan/phpstan:2.2.15by @crynobone in https://github.com/laravel/framework/pull/61719 - [13.x] feat: add the new 'Database\Schema\Builder::getColumn' method by @fgaroby in https://github.com/laravel/framework/pull/61759
- Apply fixes from StyleCI by @taylorotwell in https://github.com/laravel/framework/pull/61763
- [13.x] Fix through() returning HasOneThrough for MorphMany relations by @mrjavadseydi in https://github.com/laravel/framework/pull/61760
- [13.x] Exclude refreshed attributes when replicating models by @ilhammmaulana in https://github.com/laravel/framework/pull/61751
- [13.x] Fix
wherePivotBetween()being ignored bysync(),detach()andupdateExistingPivot()by @sumaiazaman in https://github.com/laravel/framework/pull/61747 - [13.x] Fix flaky scheduling test on Windows by @jasonmccreary in https://github.com/laravel/framework/pull/61768
- [13.x] Fix findOrFail() with an array of enum ids by @jabysa in https://github.com/laravel/framework/pull/61765
- [13.x] Fix
Builder::with()when a null callback is passed explicitly by @lazerg in https://github.com/laravel/framework/pull/61769 - Final Mockery cleanup by @jasonmccreary in https://github.com/laravel/framework/pull/61739
- [13.x] Treat dotted keys literally in ArrayStore::touch() by @Button99 in https://github.com/laravel/framework/pull/61777
- [13.x] Fix memoized tagged cache
many()returning null for numeric keys by @sajjadhossainshohag in https://github.com/laravel/framework/pull/61780 - [13.x] Add regression test for createPayloadUsing on the queue manager by @fajarwz in https://github.com/laravel/framework/pull/61773
- [13.x] Add mime type to the files reportable details by @sbourouis in https://github.com/laravel/framework/pull/61772
- [13.x] Explicitly enable imagick extension for CI tests by @jnoordsij in https://github.com/laravel/framework/pull/61756