메인 콘텐츠로 건너뛰기
2026년 6월에는 Laravel Cloud가 Symfony 앱을 지원하고, Forge에 관리형 Valkey 캐시와 오브젝트 스토리지가 추가되었습니다. 프레임워크에는 벌크 잡 디스패치, Postgres 풀러 지원, MCP 클라이언트/서버 등 알찬 업데이트가 도착했습니다. 출처: Laravel June Product Updates

Laravel Framework

Bus::bulk() — 벌크 잡 디스패치

대량의 잡을 1회의 데이터베이스 INSERT로 등록할 수 있게 되었습니다. 큐 · 커넥션별로 벌크 INSERT가 이루어지므로, 1건씩 INSERT하는 비용이 불필요해집니다.
use Illuminate\Support\Facades\Bus;

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // 수천 건이라도 효율적
]);

Postgres 트랜잭션 풀러 지원

PgBouncer, AWS RDS Proxy, Neon 등 트랜잭션 모드의 Postgres 접속 풀러를 프레임워크 레벨에서 지원했습니다.
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // 풀러 경유의 접속을 선언
    // ...
],
스키마 조작이나 DDL 문 등 직접 접속이 필요한 경우, 커넥션 이름에 ::direct를 추가하면 풀러를 바이패스합니다. DB::connection('pgsql::direct')->statement('CREATE INDEX ...')
프레임워크가 자동으로 emulated prepares, boolean binding, 그 외 풀러에 필요한 모든 처리를 수행합니다.

MCP 클라이언트 · 서버 툴 지원

Laravel AI 에이전트가 원격 MCP 서버(HTTP 경유)와 로컬 MCP 서버 클래스의 툴을 이용할 수 있게 되었습니다. 스키마 변환, 래핑, 호출이 모두 자동으로 처리됩니다.
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // 원격 MCP 서버의 툴 이용
            McpClient::tools('https://mcp.example.com'),
            // 로컬 MCP 서버의 툴 이용
            McpServer::tools(MyMcpServer::class),
        ];
    }
}

artisan dev 명령

모든 개발 프로세스를 하나의 명령으로 시작할 수 있는 artisan dev가 추가되었습니다. 서버, 큐 워커, 로그 테일링, Vite가 각각 색상 코드가 있는 출력으로 동시에 동작합니다.
php artisan dev
// 서비스 프로바이더에서 추가 명령 등록
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
Node.js 패키지 매니저(npm, yarn, pnpm, bun)를 자동 감지합니다. 기존의 composer dev 스크립트를 대체하는 Artisan의 공식 컨벤션입니다.

라우트 메타데이터 지원

라우트에 임의의 메타데이터를 부여할 수 있는 ->metadata() 메서드가 추가되었습니다. 라우트 캐시와도 완전 호환이며, 그룹에 설정된 메타데이터는 자식 라우트에 병합됩니다.
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// 컨트롤러나 미들웨어에서 접근
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'

재시도하지 않는 예외 핸들러

재시도해도 의미가 없는 예외(잘못된 입력, 영구적인 외부 장애 등)에 대해 재시도를 억제할 수 있게 되었습니다.
// 예외 클래스에 직접 정의
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// bootstrap/app.php에서도 설정 가능
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})

schema:dump의 —without-migration-data 플래그

schema:dump에서 마이그레이션 테이블의 행을 생략한 순수한 구조 덤프를 생성할 수 있게 되었습니다.
php artisan schema:dump --without-migration-data

between()/unlessBetween()의 타임존 수정

between()이나 unlessBetween() 앞에 timezone()을 호출하는 순서와 무관하게, 올바른 타임존으로 스케줄이 동작하도록 되었습니다.
// 둘 다 같은 동작을 함 (이전에는 between을 먼저 쓰면 UTC가 사용되는 문제가 있었음)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');

그 외 프레임워크 변경

  • Bus::bulk()의 트레이트 대응: 트레이트에 큐 어트리뷰트 정의 가능
  • MariaDB 벡터 인덱스: MariaDB에서 벡터 인덱스 지원
  • attachFromStorage() 헬퍼: 알림의 MailMessage에 스토리지에서 첨부 파일 추가
  • Cache::rememberWithState(): 상태를 가진 캐시 지원
  • 병렬 테스트용 메인터넌스 모드 드라이버: array 드라이버로 각 프로세스가 독립된 메인터넌스 상태를 가질 수 있음
  • whenFilledEnum(): Enum을 사용한 필드의 조건부 처리
  • JSON Schema의 anyOf 지원: 유효성 검증에서 JSON Schema의 anyOf 사용 가능

Inertia

  • Client\Request::uri(): 클라이언트 요청 URI 취득
  • 앵커의 target 속성 지원: <Link> 컴포넌트에서 target="_blank" 등 사용 가능
  • 폼의 async 옵션: 폼 컴포넌트에서 비동기 송신 지원
  • titleCallback에 페이지 정보: 타이틀 콜백에 페이지 데이터가 전달됨

Laravel Cloud · Laravel Forge

제품주요 업데이트
Laravel CloudSymfony 앱 완전 지원 (Symfony 7.4 LTS · 8.x, PHP 8.2~8.5 대응), Stripe Projects로부터의 배포 · 결제 대응, 팀 멤버별 Slack/메일 알림 설정
Laravel Forge관리형 Valkey 캐시 (대시보드에서 생성 · 관리), 관리형 오브젝트 스토리지, 알림 메일 리디자인
마지막 수정일 2026년 7월 13일