HTTP 리다이렉트
번역일: 2026년 6월 20일
HTTP 리다이렉트
리다이렉트 생성
리다이렉트 응답은 Illuminate\Http\RedirectResponse 클래스의 인스턴스이며, 사용자를 다른 URL로 이동시키는 데 필요한 HTTP 헤더를 포함합니다. RedirectResponse 인스턴스를 생성하는 방법은 여러 가지가 있는데, 가장 간단한 방법은 전역 redirect 헬퍼를 사용하는 것입니다.
Route::get('/dashboard', function () {
return redirect('/home/dashboard');
});폼 유효성 검사 실패 등의 상황에서 사용자를 이전 페이지로 돌려보내야 할 때는 전역 back 헬퍼를 사용합니다. 이 기능은 내부적으로 세션을 사용하므로, back 함수를 호출하는 라우트가 반드시 web 미들웨어 그룹에 속해 있거나 세션 관련 미들웨어가 적용되어 있어야 합니다.
Route::post('/user/profile', function () {
// 요청 유효성 검사...
return back()->withInput();
});이름이 지정된 라우트로 리다이렉트
redirect 헬퍼를 인수 없이 호출하면 Illuminate\Routing\Redirector 인스턴스가 반환됩니다. 이 인스턴스의 메서드를 이용해 다양한 방식으로 리다이렉트를 생성할 수 있습니다. 예를 들어, 이름이 지정된 라우트로 리다이렉트하려면 route 메서드를 사용합니다.
return redirect()->route('login');라우트에 파라미터가 있다면 route 메서드의 두 번째 인수로 전달합니다.
// 다음 URI를 가진 라우트로 리다이렉트: profile/{id}
return redirect()->route('profile', ['id' => 1]);편의를 위해 Laravel은 전역 to_route 함수도 제공합니다.
return to_route('profile', ['id' => 1]);Eloquent 모델로 라우트 파라미터 채우기
라우트 파라미터(예: {id})에 Eloquent 모델의 값을 넣어 리다이렉트하는 경우, 모델 인스턴스를 직접 전달할 수 있습니다. Laravel이 자동으로 모델의 기본 키 값을 추출합니다.
// 다음 URI를 가진 라우트로 리다이렉트: profile/{id}
return redirect()->route('profile', [$user]);라우트 파라미터에 사용할 값을 직접 지정하고 싶다면, Eloquent 모델의 getRouteKey 메서드를 오버라이드합니다.
/**
* 모델의 라우트 키 값을 반환합니다.
*/
public function getRouteKey(): mixed
{
return $this->slug;
}컨트롤러 액션으로 리다이렉트
컨트롤러 액션으로 직접 리다이렉트할 수도 있습니다. action 메서드에 컨트롤러 클래스와 메서드 이름을 배열로 전달하면 됩니다.
use App\Http\Controllers\HomeController;
return redirect()->action([HomeController::class, 'index']);컨트롤러 라우트에 파라미터가 필요한 경우, action 메서드의 두 번째 인수로 전달합니다.
return redirect()->action(
[UserController::class, 'profile'], ['id' => 1]
);세션 플래시 데이터와 함께 리다이렉트
새로운 URL로 리다이렉트하면서 세션에 데이터를 플래시하는 작업은 보통 함께 이루어집니다. 예를 들어, 어떤 작업이 성공적으로 완료된 후 성공 메시지를 세션에 담아 전달하는 패턴이 일반적입니다. RedirectResponse 인스턴스는 메서드 체이닝을 통해 리다이렉트와 세션 플래시를 한 번에 처리할 수 있습니다.
Route::post('/user/profile', function () {
// 사용자 프로필 업데이트...
return redirect('/dashboard')->with('status', '프로필이 업데이트되었습니다!');
});또한 RedirectResponse의 withInput 메서드를 사용하면, 리다이렉트 전에 현재 요청의 입력 데이터를 세션에 플래시할 수 있습니다. 세션에 플래시된 입력 데이터는 다음 요청에서 손쉽게 복원할 수 있습니다. 폼 유효성 검사 실패 후 입력값을 유지하는 데 유용합니다.
return back()->withInput();리다이렉트 후에는 세션에 저장된 플래시 메시지를 뷰에서 표시할 수 있습니다. 아래는 Blade 문법을 사용한 예시입니다.
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endifNOTE
세션 플래시 데이터는 바로 다음 요청에서만 유효합니다. 리다이렉트 후 첫 번째 응답이 처리되면 해당 데이터는 세션에서 자동으로 삭제됩니다.