회사소개
회사 소개 팀 소개 연혁
서비스 쇼케이스 비전 테크 FAQ 문의
무료 상담 신청

Laravel 10 → 12 업그레이드 완전 가이드

PHP 최소 버전, AppServiceProvider 재구성, Pest 도입, Vite 전환까지 — 실제 프로젝트에서 겪은 이슈와 체크리스트를 단계별로 정리합니다.

Laravel 10 → 12 업그레이드 완전 가이드

1. 버전별 핵심 변경사항

Laravel은 2023년부터 연간 Major 릴리스 체계로 전환했습니다. 각 버전의 LTS 지원 기간과 PHP 요구사항을 먼저 파악하는 것이 업그레이드 계획의 출발점입니다.

버전 최소 PHP 릴리스 EOL 주요 변경
10.xPHP 8.12023.022025.02typed model props, Process facade
11.xPHP 8.22024.032026.03슬림 앱 구조, bootstrap/app.php 재편, Folio/Volt
12.xPHP 8.22025.022027.02Starterkit 통합, WorkOS AuthKit, React/Vue Inertia 기본 포함

2. Laravel 10 → 11 업그레이드

2-1. PHP & Composer 요구사항 확인

Laravel 11은 PHP 8.2 이상을 필수로 요구합니다. 로컬 환경과 서버 PHP 버전을 먼저 확인합니다.

php --version            # 8.2+ 확인
composer --version       # 2.6+ 권장

# composer.json 변경
"require": {
    "php": "^8.2",
    "laravel/framework": "^11.0"
}

2-2. AppServiceProvider 재구성

Laravel 11부터 App\Providers\RouteServiceProvider가 제거되고 라우팅 설정이 bootstrap/app.php로 이동합니다.

// bootstrap/app.php (Laravel 11+)
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin.auth' => \App\Http\Middleware\AdminAuth::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

2-3. Middleware 변경

기존 app/Http/Kernel.php가 삭제됩니다. 미들웨어는 bootstrap/app.phpwithMiddleware()에서 관리합니다. 커스텀 글로벌 미들웨어는 $middleware->append()로 추가합니다.

3. Laravel 11 → 12 업그레이드

3-1. 스타터킷 변경

Laravel 12는 Breeze/Jetstream 대신 React + Inertia 또는 Vue + Inertia 기반 Starter Kit을 기본 옵션으로 제공합니다. 기존 Breeze를 사용한다면 별도 마이그레이션이 필요합니다.

# Laravel 12 새 프로젝트 생성 시 스타터킷 선택
composer create-project laravel/laravel myapp
cd myapp
php artisan install:api       # API 라우트 설치
php artisan install:broadcasting  # WebSocket 브로드캐스팅 설치

3-2. 주요 Deprecation 정리

  • Model::$dates 프로퍼티 제거 → casts 배열로 대체
  • assertDatabaseMissing() 시그니처 변경
  • Flysystem 3.x 기본 → S3/로컬 드라이버 설정 방식 변경

4. Webpack Mix → Vite 전환

Laravel 10에서 Vite가 기본 번들러로 전환되었습니다. Mix를 사용하는 프로젝트는 Vite로 마이그레이션이 필요합니다.

# 1. 패키지 교체
npm remove laravel-mix
npm install --save-dev vite laravel-vite-plugin

# 2. vite.config.js 생성
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/scss/app.scss', 'resources/js/app.js'],
            refresh: true,
        }),
    ],
});

# 3. Blade 레이아웃 변경
{{-- 기존 Mix --}}
<link rel="stylesheet" href="{{ mix('css/app.css') }}">

{{-- Vite --}}
@vite(['resources/scss/app.scss', 'resources/js/app.js'])

5. 업그레이드 체크리스트

✅ 사전 준비

  • 로컬 PHP를 8.2 이상으로 업그레이드
  • Composer 패키지 중 Laravel 11 호환 여부 확인 (composer outdated)
  • 전체 테스트 스위트 실행으로 베이스라인 확보
  • git checkout -b upgrade/laravel-11 브랜치 생성

✅ 업그레이드 실행

  • composer require laravel/framework:^11.0 --no-update
  • composer update 실행 및 충돌 패키지 개별 대응
  • php artisan config:clear && php artisan cache:clear
  • bootstrap/app.php 슬림 구조로 재구성
  • Kernel.php → Middleware 클래스 등록 방식 전환

✅ 검증

  • php artisan test 전체 통과 확인
  • 스테이징 서버 배포 후 주요 기능 테스트
  • 로그 파일 에러 모니터링 48시간

작성자

동지커뮤니케이션

Laravel 개발팀

공유하기
동지 AI 어시스턴트
온라인
{{ msg.content }}
{{ msg.summary }}
  • {{ b }}
이어서 물어보세요
{{ msg.time }}
Powered by AI — 동지커뮤니케이션