Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 기록

Laravel 이해하고 쓰자(라우팅/미들웨어) 본문

웹 자료/Laravel

Laravel 이해하고 쓰자(라우팅/미들웨어)

기록개발자 2020. 5. 20. 11:24

이 글은 Laravel의 라우팅과 미들웨어의 개념과 사용법에 대해 알아보고자 작성됐습니다.

 

라우팅(Routing)

공식문서의 정의

가장 기본적인 라라벨 라우트는 URI와 클로저를 전달 받아, 라우팅을 정의하는 간단하고 쉽게 이해할 수 있는 방법을 제공합니다.

라라벨은 보통 get과 post를 이용하여 RUI와 클로저를 전달 받아 라우팅을 정의합니다.

Route::get("get-test", function (){
 return "get-test"
});

Route::post("post-test", function (){
 return "post-test"
});

한번더 말하자면, Route는 전 포스팅에서 공부한 내용인 프로바이더와 파사드를 이용하여 Route를 정적 메서드로써 사용할 수 있습니다.

 

put, patch, delete, options등의 메서드도 사용 가능하고 PHP의 PSR7형식을 따르고 있습니다.

라우팅 과정에서 POST의 경우에는 CSRF 토큰 필드를 사용해야 합니다.

CSRF토큰 필드를 포함하지 않을 경우 request는 전달되지 않습니다.

(CSRF 필드 사용의 경우 아직 실제로 설정해본 적이 없습니다. 추후에 사용 시 사용 경험 기입하겠습니다.)

 

미들웨어(middleware)

라우팅에 미들웨어를 사용할 수도 있는데 미들웨어의 개념에 대해 알아보겠습니다.

미들웨어는 HTTP 요청을 간편하게 필터링할 수 있는 방법을 제공합니다.

예를 들면 로그인에 관련된 처리가 있다고 했을때 사용자가 로그인이 된 채로 HTTP 요청을 보내면 문제없이 접속할 수 없지만, 로그인이 되어 있지 않은 요청이 온다면 Middleware는 로그인 페이지로 리다이렉션하는 작업을 수행할 수 있다.

 

아래는 공식문서의 라우팅 적용 예제입니다.

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);
    }
}

위의 예제는 handle 메서드 안에 age가 200보다 작으면 home으로 redirect하고, 아니면 $next($request);를 실행한다.의 의미를 가집니다.

 

이후에 app/Http/Kernel.php 안에 아래 코드처럼 미들웨어를 등록한 후에

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

라우팅을 사용하고 싶으면 아래 두개의 예제 중 하나의 방법으로 사용하면 됩니다.

방법 1

Route::middleware("checkAge", function() {
 Route::get("test", function(){
  return "ok";
 });
});

방법 2(실서버 적용 방법)

Route::get("test", function () {
    return "ok"
})->middleware('checkAge');

또한 미들웨어 그룹을 이용하여, 라우팅 하는 순간뿐만 아니라, 별다른 설정 없이 모든 리퀘스트에 대하여, 미들웨어를 설정 포함시키는 방법도 있습니다.

protected $middlewareGroups = [
    'web' => [
        AgeCheck::class,
    ],
];

여기서 중요한 포인트는 미들웨어에 순서가 존재하기 때문에, 미들웨어를 추가할 경우에는 순서를 잘 생각하여야 합니다. 또한 순서는 app/Http/Kernel.php 파일의 protected $middlewarePriority속성을 이용하여 우선순위를 정할 수 있습니다.(아직 실서버에서는 적용하지 않았음)

 

미들웨어를 사용해야하는 이유를 자세히 기술해둔 블로그

https://cordelia273.space/5

 

Laravel Middleware 정의와 사용법

오늘 여러가지로 라라벨을 만지다가 문뜩 Middleware에 대한 글을 써봐야겠다고 생각했다. 라라벨 공식 Docs : https://laravel.com/docs/5.6/middleware 미들웨어란? 미들웨어는 어플리케이션에 들어오는 HTTP ��

cordelia273.space