인생이 쓰다!인생쓰

개발/라라벨(PHP프레임워크)

라라벨 미들웨어 (Laravel Middleware)

Johnal 2021. 4. 21. 14:21
반응형

Middleware 어디서 많이 들어본 단어지만 정확한 개념은 모르고 있었는데 라라벨에서 접하게 되었습니다.

 

 

일단 미들웨어가 무엇인지 알아볼까요?

 

미들웨어는 컴퓨터 제작회사가 사용자의 요구대로 만들어 제공하는 프로그램으로,

운영 체제와 응용 스프트웨어의 중간에서 조정과 중개의 역할을 수행하는,양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어라고 생각하시면 될것 같습니다. 

 

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

 

사용자가 로그인시에 인증되었는지를 확인하고 검사하는 미들웨어를 내장하고 있습니다.

만약 여기서 인증이 되지 않은 사용자 즉 게스트 일 경우에 그 사용자를 로그인 화면으로 리다이렉트합니다.

반대로 인증 되어있는 회원가입되어있는 사용자라면 미들웨어를 넘기고 다음 요청을 진행합니다. 

 

이런 인증 이외에도 다양한 작업을 수행하는 미들웨어를 작성하고 사용할 수 있습니다.

 

미들웨어를 같이 봐보시면 좋을 것같아서 준비했습니다. 어떻게 넘어가는 지 알려드리겠습니다.

 

 

먼저 미들웨어가 어떻게 돌아가는지를 확인하면 좋을 것 같아서 준비했습니다.

 

web.php

 

 

auth 미들웨어

인증되어있는지를 확인하는 미들웨어입니다. auth:sanctum , verifed 두개의 미들웨어가 사용됬다는 뜻입니다. 

미들웨어를 통해서 인증이 되었으면 dashboard로 이동해 화면을 보여줍니다.

 

 

App\Http\Kernel.php

위처럼 middleware를 사용하기 위해서는  app/Http/Kernel.php파일에서 그 미들웨어의 이름을 지정해야됩니다.

 

여기서 미들웨어를 추가한후에 특정 라우트에 할당할 수 있습니다. 

 

이렇게도 가능하고 여러개의 미들웨어도 사용할 수 있습니다.

 

 

 

 

일단 Jetstream 에서 사용하는 Team의 권한을 미들웨어로 생성해주고 싶었습니다.

참 유용한 기능들이 많은 Team인데 이걸 미들웨어로 만들어서 더 간단하게 표현해 주었습니다.

 

그럼 이제는 직접 미들웨어를 생성해볼까요?

 

미들웨어 생성

php artisan make:middleware [미들웨어 이름] 으로 생성해줍니다.

 

 

기존 생성화면

기존 생성된 미들웨어 화면입니다. 

기존에 생성된 미들웨어 현재 속한 Team의 권한중에 read 라는 권한이 있는지 확인해서 진행하겠습니다.

 

 

CheckTeam 

인증되어있는 user의 현재팀권한을 확인한 후에 read가 속해있는지,

체크하고 맞으면 $next($request) 로 넘어갑니다.

아니면 dashboard (홈) 화면 으로 돌리는 미들웨어입니다. 

 

 

 

 

 

이렇게 설정한 후에 kernel.php로 가서 

team.read 라는 미들웨어의 이름으로 추가해줬습니다.

 

 

 

 

 

그리고 나서 web.php 로 돌아온 후에 

 

게시판을 열때, 인증되어있는 미들웨어를 지나서 team.read라는 미들웨어를 만나며 통과시에 게시판으로 이동됩니다.

이렇게 밑처럼 3개의 미들웨어를 같이 써주면 더 좋겠죠?

 

 

 

 

이처럼 미들웨어를 HTTP 요청이 애플리케이션에 도달하기 전에 반드시 통과해야 하는 일종의 "단계(layers)"라고 생각하는 것이 가장 좋습니다. 각 단계에서 요청을 검사할 수 있고 요청을 완전히 거절할 수도 있습니다.

 

그렇지만 미들웨어는 애플리케이션이 진행되고 나서 후에도 미들웨어가 실행될 수 있습니다. 글이 수정되었는지, 무엇이 변경된 점을 체크하고 넘어갈 수도 있을 것 같습니다.

 

오늘은 이처럼 미들웨어에 대해서 알아보았습니다. 다음에는 Jetstream의 팀에 대해서 같이 알아보면 좋을것같습니다.

감사합니다.

 

 

728x90
반응형