[Laravel] 03. 미들웨어(Middleware)

yunulog·2022년 10월 10일
0

Laravel

목록 보기
3/6
post-thumbnail

미들웨어(middleware)

미들웨어란?

‘운영 체제에서 제공하는 서비스 외의 서비스를 애플리케이션에 제공하는 소프트웨어’로 서로 다른 애플리케이션이 서로 통신하는 데 사용되는 소프트웨어를 의미한다.

라라벨 미들웨어

라라벨에서 미들웨어는 애플리케이션으로 들어온 HTTP 요청을 간편하게 필터링할 수 있는 방법을 제공하는 역할을 한다.

예를 들어, 로그인 확인 미들웨어는 로그인 되지 않은 사용자는 로그인 페이지로 이동시키고, 로그인된 사용자는 다른 서비스를 이용할 수 있도록 해 줄 것이다.

미들웨어 디렉토리는 app/Http/Middleware 에 있다.

미들웨어 생성

나이를 체크하는 미들웨어를 만들어보자.

우선 artisan 을 이용해 CheckAge 라는 이름의 미들웨어를 생성해준다.
php artisan make:middleware CheckAge

그럼 app/Http/Middleware 디렉토리에 CheckAge.php 라는 이름의 미들웨어 파일 만들어진다.

<?php
namespace App\Http\Middleware;
use Closure;

class CheckAge
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }
}

이와 같이 코드를 구성하면 나이가 200 이하인 사용자는 ‘home’으로 이동시키는 미들웨어가 만들어진다.

Before / After Middleware

미들웨어는 애플리케이션 이후/이전 중 언제 실행될지 타이밍을 선택할 수 있다.

// 이전
class BeforeMiddleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}
// 이후
class AfterMiddleware
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // Perform action

        return $response;
    }
}

전역(Global) 미들웨어

미들웨어를 전역으로 사용하기 위해 app/Http/Kernel.php 안에 아래 코드처럼 미들웨어를 등록한다.

protected $routeMiddleware = [
    'checkAge' => CheckAge::class,
];

라우팅 설정

라우트에 middleware 메소드를 사용하여 미들웨어를 지정할 수 있다.

Route::get('admin/profile', function () {
    //
})->middleware('auth');

라우트에 여러개의 미들웨어를 지정할 수도 있다.

Route::get('/', function () {
    //
})->middleware('first', 'second');

미들웨어를 지정할 때, 전체 클래스 이름을 전달할 수도 있다.

use App\Http\Middleware\CheckAge;

Route::get('admin/profile', function () {
    //
})->middleware(CheckAge::class);

0개의 댓글