Laravel 13.26.0 업데이트
릴리스: 2026년 8월 18일
평가: 2026년 8월 28일
이번 13.26.0은 새 기능(디바운스 큐 리스너, Queue::forward, 프로세스 풀 이터러블화 등) 추가와 다수의 Redis 클러스터/파이프라인 버그 수정이 중심인 마이너 릴리스입니다. 대부분 하위 호환되며, Redis 클러스터를 쓰는 팀과 임시 업로드 URL·in 검증 규칙을 사용하는 팀만 동작 변화를 확인하면 됩니다.
예상되는 하위 호환성 문제
- 임시 업로드 URL의 upload 파라미터를 쿼리스트링에서만 허용심각도 낮음
PR #61145에 따르면 temporary upload url에서 'upload' 값을 request의 query string에서만 가져오도록 엄격화되었습니다. 다른 위치(body 등)에서 해당 값을 읽던 코드가 있다면 더 이상 동작하지 않을 수 있습니다.
영향 범위: Livewire/파일 업로드용 temporary upload URL을 커스텀 처리하는 코드
- in 검증 규칙의 loose comparison 우회 방지심각도 낮음
PR #61146에 따르면 'in' validation rule이 느슨한 비교(loose comparison)로 우회되던 문제가 수정되었습니다. 특정 타입(예: boolean, 숫자형 문자열)에 의존해 검증을 통과시키던 코드는 동작이 달라질 수 있습니다.
영향 범위: in:... 규칙을 사용하는 유효성 검증 로직
패키지 관리자가 확인할 것
- Scout위험도 낮음
이번 릴리스에 Scout 관련 직접적인 변경 사항은 없습니다. 다만 Guzzle 8 지원(#60321) 추가로 인해 Scout 내부에서 HTTP 클라이언트를 다루는 드라이버(Algolia/Meilisearch 등)를 쓴다면 의존성 트리에서 Guzzle 버전 충돌 여부만 확인하는 것이 좋습니다.
대응 체크리스트
- Redis 클러스터 사용 시 큐/캐시 동작 재확인가까운 시일
PhpRedisClusterConnection 재구성, cross-slot read 회피, cache tag 정리 시 무한 스캔 수정 등 다수의 Redis 클러스터 관련 버그 수정이 포함되었습니다. Redis 클러스터를 큐나 캐시 태그에 사용 중이라면 스테이징에서 큐 워커와 캐시 태그 정리 동작을 점검하세요.
- in 검증 규칙과 임시 업로드 URL 처리 점검가까운 시일
'in' validation rule을 사용하는 폼 요청과, 임시 업로드 URL을 커스텀 미들웨어/컨트롤러에서 다루는 코드가 있다면 변경된 동작(엄격한 타입 비교, 쿼리스트링 전용 파라미터)에 맞게 테스트를 재실행하세요.
- Guzzle 8 지원 관련 의존성 확인선택
composer.json에서 guzzlehttp/guzzle 버전 제약을 확인하고, Guzzle 8로 업그레이드 시 패키지 호환성 문제가 없는지 composer why-not 등으로 점검하세요.
자동 생성상세 평가
요약
라라벨 13.26.0은 마이너 릴리스로, 큐/Redis 클러스터 안정성 개선과 몇 가지 새 편의 기능(디바운스 큐 리스너, Queue::forward(), 프로세스 풀 이터러블화, wherePivot/orWherePivot 클로저 지원 등)이 추가되었습니다. 보안 취약점 수정이나 대규모 공개 API 변경은 없으며, 대부분의 애플리케이션은 특별한 조치 없이 업그레이드 가능합니다.
주요 변경
- Redis 클러스터 관련 다수 버그 수정: cross-slot read 회피, 파이프라인/트랜잭션 실패 후 연결 복구, 캐시 태그 정리 시 무한 스캔 수정, 클러스터 노드 재스캔 등.
- 새 기능:
JobReleased이벤트,Queue::forward(), 디바운스 가능한 큐 리스너,wherePivot/orWherePivot클로저 지원,orWhereKey/orWhereKeyNot, 프로세스 풀 이터러블화, 프로세스 페이크 어설션 헬퍼 추가. - Guzzle 8 지원 추가(#60321).
- 다수의 테스트 안정화 및 내부 리팩터(QueueWorkerTest, FoundationDevCommandsTest 등)로, 이 부분은 대응 불필요.
하위 호환성
- 임시 업로드 URL의
upload값이 이제 쿼리스트링에서만 인식됩니다(#61145). 커스텀 처리 코드가 있다면 확인 필요. in검증 규칙이 느슨한 비교로 우회되던 문제가 수정되었습니다(#61146). 검증 결과가 이전과 달라질 수 있는 엣지 케이스가 있습니다.- 그 외 공개 API를 깨는 변경은 릴리스 노트상 확인되지 않습니다.
패키지 관리자가 확인할 것
- Scout: 이번 릴리스와 직접 관련된 변경은 없으나, Guzzle 8 지원 추가로 HTTP 클라이언트 의존 드라이버의 의존성 트리를 점검해두면 안전합니다.
- 그 외 등록된 패키지(Sendgo, Core, Socialite 계열, Image 등)에 영향을 주는 변경 사항은 릴리스 노트에서 확인되지 않았습니다.
대응 체크리스트
- Redis 클러스터를 큐/캐시에 사용 중이면 스테이징에서 큐 워커, 캐시 태그 정리 동작 테스트
-
in:검증 규칙을 쓰는 폼 요청의 기존 테스트 재실행 - 임시 업로드 URL을 커스텀 처리하는 코드가 있다면 쿼리스트링 기반 동작 확인
- Guzzle 버전 제약 및 호환성 점검(선택)
GitHub 릴리스 노트를 근거로 언어 모델 (claude-sonnet-5)이 작성했으며, 사람이 검수하지 않았습니다. 실제 적용 전에는 공식 릴리스 노트와 업그레이드 가이드를 함께 확인하세요.
GitHub 원문 릴리스 노트 보기
- [13.x] Add JobReleased event to Worker by @jackbayliss in https://github.com/laravel/framework/pull/61108
- [13.x] Fix QueueWorkerTest by @jackbayliss in https://github.com/laravel/framework/pull/61134
- [13.x] Avoid cross-slot reads when checking paused queues by @lazerg in https://github.com/laravel/framework/pull/61139
- [13.x] Add managedQueues() to the Cloud queue by @jackbayliss in https://github.com/laravel/framework/pull/61149
- [13.x] Accept enums in
inOrderOf()by @ziadoz in https://github.com/laravel/framework/pull/61147 - [13.x] Surface paused queues in the queue worker output by @jackbayliss in https://github.com/laravel/framework/pull/61142
- [13.x] Respect readonly=false in Microsoft SQL Server configuration by @HenkPoley in https://github.com/laravel/framework/pull/61141
- [12.x] Stricten
uploadto be fetch only from request's query string for temporary upload urls by @crynobone in https://github.com/laravel/framework/pull/61145 - Read-through filesystem by @taylorotwell in https://github.com/laravel/framework/pull/61140
- [13.x] Pass a connector to PhpRedisClusterConnection so it can rebuild its client by @tgivslife in https://github.com/laravel/framework/pull/61161
- [13.x] Only register pail dev command when installed by @jackbayliss in https://github.com/laravel/framework/pull/61157
- [13.x] feat: add closure support to wherePivot and orWherePivot by @calebdw in https://github.com/laravel/framework/pull/61150
- [13.x] feat: add orWhereKey and orWhereKeyNot to Eloquent Builder by @calebdw in https://github.com/laravel/framework/pull/61154
- [13.x] allow read through filesystems to optionally not copy by @jimbojsb in https://github.com/laravel/framework/pull/61155
- [13.x] Fix constantly asking to install
multiplex& startingviteon project without vite by @nunomaduro in https://github.com/laravel/framework/pull/61167 - [13.x] Add debounceable queued listeners by @stevebauman in https://github.com/laravel/framework/pull/61169
- [13.x] Add test to ensure pail is ignored if not installed by @jackbayliss in https://github.com/laravel/framework/pull/61168
- Allow some Redis commands to retry on transient failures by @taylorotwell in https://github.com/laravel/framework/pull/61175
- Fix Redis pipeline facade annotation by @MNazikk in https://github.com/laravel/framework/pull/61173
- [13.x] Remove the pinned
@laravel/multiplexversion by @joetannenbaum in https://github.com/laravel/framework/pull/61171 - [13.x] Fix FoundationDevCommandsTest by @jackbayliss in https://github.com/laravel/framework/pull/61170
- [12.x] Improves
invalidation rule from getting bypass via loose comparison by @crynobone in https://github.com/laravel/framework/pull/61146 - [13.x] Retry timed-out cloud agent long-polls by @kieranbrown in https://github.com/laravel/framework/pull/61177
- [12.x] Retry timed-out cloud agent long-polls by @kieranbrown in https://github.com/laravel/framework/pull/61178
- [13.x] Scan every master node in phpredis cluster connections by @tgivslife in https://github.com/laravel/framework/pull/61174
- [13.x] Fix uncaptured setTestNow now() reuse in tests by @lucasmichot in https://github.com/laravel/framework/pull/61190
- [13.x] Make process pools iterable by @xurshudyan in https://github.com/laravel/framework/pull/61184
- [13.x] Report seeder progress in db:seed command - when a specific class is specified by @iz-ahmad in https://github.com/laravel/framework/pull/61186
- [13.x] Fix infinite scan loop when pruning stale cache tags on a Redis cluster by @tgivslife in https://github.com/laravel/framework/pull/61181
- [13.x] Add a dedicated exception for idle process timeouts by @xurshudyan in https://github.com/laravel/framework/pull/61182
- [13.x] Keep the Redis connection usable when a pipeline or transaction fails by @tgivslife in https://github.com/laravel/framework/pull/61183
- [12.x] Escape single quotes in Postgres JSON path attributes by @crynobone in https://github.com/laravel/framework/pull/61192
- [13.x] Support Guzzle 8 by @GrahamCampbell in https://github.com/laravel/framework/pull/60321
- [13.x] Add process fake assertion helpers by @xurshudyan in https://github.com/laravel/framework/pull/61193
- [13.x] Introduce
Queue::forward()by @jackbayliss in https://github.com/laravel/framework/pull/61188 - [13.x] Support array commands in process fake assertions by @xurshudyan in https://github.com/laravel/framework/pull/61197
- [13.x] Prevent TypeError when JSON:API query parameters are arrays by @s-shiryaev in https://github.com/laravel/framework/pull/61206
- More Mockery cleanup by @jasonmccreary in https://github.com/laravel/framework/pull/61199
- [13.x] fix:
expectsQuestion()docblock to allow array answers by @joostdebruijn in https://github.com/laravel/framework/pull/61223 - [13.x] Test on MySQL 9.7 (lts) by @jnoordsij in https://github.com/laravel/framework/pull/61218
- [13.x] Promote nested data to top-level managed queue event by @timacdonald in https://github.com/laravel/framework/pull/61209
- [13.x] Rebuild the phpredis client after a cluster response error by @tgivslife in https://github.com/laravel/framework/pull/61214
- [13.x] Fix
throwUnless()silently doing nothing when given a closure by @xurshudyan in https://github.com/laravel/framework/pull/61217 - [13.x] Keep the assertion failure message when session errors are JSON serialized by @lazerg in https://github.com/laravel/framework/pull/61201
- [13.x] Add getRelatedClass to Relation by @jackbayliss in https://github.com/laravel/framework/pull/61222
- [12.x] Promote nested data to top-level managed queue event by @timacdonald in https://github.com/laravel/framework/pull/61225
- Merge branch '12.x' into 13.x by @crynobone in https://github.com/laravel/framework/pull/61228
- [13.x] Preserve input key order when merging files in Request::all() by @roger-hermasch in https://github.com/laravel/framework/pull/61221
- Wait for Redis cluster nodes before creating the test cluster by @crynobone with @Copilot in https://github.com/laravel/framework/pull/61229