메인 콘텐츠로 건너뛰기

기본 라우팅

Laravel의 가장 기본적인 라우트는 URI와 클로저를 받습니다. 복잡한 설정 파일 없이 라우트와 동작을 간단히 정의할 수 있습니다.
use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

기본 라우트 파일

모든 Laravel 라우트는 routes/ 디렉터리의 라우트 파일에 정의합니다. 이 파일들은 bootstrap/app.php의 설정에 따라 Laravel이 자동으로 로드합니다. routes/web.php에는 브라우저용 라우트를 정의합니다. 이 파일의 라우트에는 web 미들웨어 그룹이 적용되어 세션·CSRF 보호·쿠키 암호화가 제공됩니다.
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

API 라우트

애플리케이션이 상태 비저장 API를 제공하는 경우, install:api Artisan 명령으로 API 라우팅을 활성화할 수 있습니다.
php artisan install:api
install:api 명령은 Laravel Sanctum을 설치하고 routes/api.php 파일을 생성합니다. Sanctum은 서드파티 API 컨슈머, SPA, 모바일 애플리케이션용의 단순하고 견고한 API 토큰 인증 가드를 제공합니다.
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');
routes/api.php의 라우트는 상태 비저장이며, api 미들웨어 그룹이 적용됩니다. 또한 모든 라우트에는 자동으로 /api URI 프리픽스가 적용되므로 수동으로 부여할 필요는 없습니다. 프리픽스를 변경하는 경우, 애플리케이션의 bootstrap/app.php 파일을 편집합니다.
->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api/admin',
    // ...
)

사용 가능한 HTTP 메서드

라우터는 모든 HTTP 메서드에 대응하는 라우트를 등록할 수 있습니다.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
여러 HTTP 메서드에 응답하는 라우트는 match 또는 any를 사용합니다.
Route::match(['get', 'post'], '/', function () {
    // ...
});

Route::any('/', function () {
    // ...
});
web 라우트 파일에서 POST·PUT·PATCH·DELETE를 받는 HTML 폼에는 반드시 @csrf 디렉티브를 포함시켜 주세요. 포함시키지 않으면 요청이 거부됩니다.

뷰를 반환하는 라우트

라우트가 뷰만 반환하는 경우에는 Route::view를 사용하면 간결하게 작성할 수 있습니다.
Route::view('/welcome', 'welcome');

// 뷰에 데이터를 전달하는 경우
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

라우트 파라미터

필수 파라미터

URL의 일부를 동적으로 가져오려면 라우트 파라미터를 사용합니다. 파라미터는 {}로 감싸고, 라우트 콜백의 인수로 받습니다.
Route::get('/user/{id}', function (string $id) {
    return '사용자 ID: ' . $id;
});
여러 파라미터도 정의할 수 있습니다.
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
    return "게시물 {$postId}의 댓글 {$commentId}";
});
라우트 파라미터에는 / 문자를 포함할 수 없습니다.

선택 파라미터

파라미터를 선택 사항으로 하려면, 파라미터 이름 끝에 ?를 붙이고 대응하는 인수에 기본값을 설정합니다.
Route::get('/user/{name?}', function (?string $name = null) {
    return $name ?? '게스트';
});

Route::get('/user/{name?}', function (?string $name = '게스트') {
    return $name;
});

정규 표현식에 의한 파라미터 제약

where 메서드를 사용해 파라미터의 형식을 정규 표현식으로 제약할 수 있습니다.
Route::get('/user/{id}', function (string $id) {
    // ...
})->where('id', '[0-9]+');

Route::get('/user/{name}', function (string $name) {
    // ...
})->where('name', '[a-zA-Z]+');
자주 사용하는 패턴은 편의 메서드로도 작성할 수 있습니다.
Route::get('/user/{id}/{name}', function (string $id, string $name) {
    // ...
})->whereNumber('id')->whereAlpha('name');

이름 지정 라우트

이름 지정 라우트를 사용하면 URL 생성이나 리다이렉트를 수행할 때 라우트 이름을 사용해 참조할 수 있습니다.
Route::get('/user/profile', function () {
    // ...
})->name('profile');

이름 지정 라우트에 대한 URL 생성

라우트 이름에서 URL을 생성하려면 route 헬퍼를 사용합니다.
// URL 생성
$url = route('profile');

// 파라미터 포함 URL 생성
$url = route('user.show', ['id' => 1]);

리다이렉트

return redirect()->route('profile');

라우트 그룹

관련된 라우트를 그룹화해 미들웨어·컨트롤러·프리픽스 등을 공통 설정할 수 있습니다.

미들웨어

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        // 인증된 사용자만 접근 가능
    });

    Route::get('/account', function () {
        // 인증된 사용자만 접근 가능
    });
});

컨트롤러

같은 컨트롤러를 사용하는 라우트를 그룹화할 수 있습니다.
use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders', 'index');
    Route::post('/orders', 'store');
    Route::get('/orders/{id}', 'show');
});

프리픽스

라우트의 URI에 공통 프리픽스를 붙일 수 있습니다.
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // /admin/users로 접근 가능
    });
    Route::get('/posts', function () {
        // /admin/posts로 접근 가능
    });
});

라우트 목록 확인

정의된 모든 라우트를 목록으로 표시하려면 Artisan 명령을 사용합니다.
php artisan route:list
미들웨어 정보도 함께 표시하려면 다음과 같이 합니다.
php artisan route:list -v
특정 URI로 시작하는 라우트만 표시하려면 다음과 같이 합니다.
php artisan route:list --path=user

다음 단계

뷰를 생성하고 컨트롤러에서 데이터를 전달하는 방법을 배웁니다.
마지막 수정일 2026년 7월 13일