Laravel - Middleware: Your Gateway to Request Handling

안녕하세요, 미래의 Laravel 개발자 여러분! 오늘 우리는 Laravel Middleware의 fascineting 세계로 뛰어들어 볼 거예요. Middleware를 도움이 되는 보안 경비원으로 생각해 보세요 - 여러분의 주요 애플리케이션 로직에 도달하기 전에 요청을 검사하고 처리합니다. 이 흥미로운 여정을 함께 시작해 보겠습니다!

Laravel - Middleware

Middleware는 무엇인가요?

코드로 들어가기 전에 먼저 Middleware가 무엇인지 이해해 보겠습니다. 여러분이 파티(애플리케이션)를 열 때 문 앞에 보안 경비원(middleware)이 있다고 상상해 보세요. 이 보안 경비원은 다음과 같은 일을 할 수 있습니다:

  1. 손님 명단에 있는지 확인합니다 (인증)
  2. 적절한 옷을 입고 있는지 확인합니다 (검증)
  3. 팔찌를 줍니다 (요청에 정보 추가)
  4. 심지어 출입을 거부할 수도 있습니다 (요청 종료)

이것이 Laravel 애플리케이션에서 Middleware가 하는 일입니다!

Middleware 등록하기

이제 우리는 자신의 Middleware를 만들고 등록하는 방법을 살펴보겠습니다.

Middleware 생성하기

먼저, 사용자가 18세 이상인지 확인하는 간단한 Middleware를 만들겠습니다:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

이 예제에서, CheckAge Middleware는 요청의 age 매개변수가 18세 이상인지 확인합니다. 그렇지 않으면 홈 페이지로 리디렉션합니다. 그렇지 않으면 요청을 다음 Middleware나 주요 애플리케이션으로 전달합니다.

전역 Middleware 등록하기

이 Middleware를 전역적으로 사용하려면 (모든 라우트에 대해), app/Http/Kernel.php 파일에 등록해야 합니다:

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

라우트 Middleware 등록하기

Middleware를 특정 라우트에만 사용하고 싶다면 라우트 Middleware로 등록할 수 있습니다:

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

그런 다음, 다음과 같이 라우트에서 사용할 수 있습니다:

Route::get('adult-only', function () {
//
})->middleware('checkage');

Middleware 매개변수

occasionally, 우리는 Middleware를 더 유연하게 만들고 싶습니다. 여기서 Middleware 매개변수가 유용하게 쓰입니다!

CheckAge Middleware를 최소 연령 매개변수를 받을 수 있도록 수정해 보겠습니다:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

이제 이 Middleware를 다양한 연령 제한으로 사용할 수 있습니다:

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

좋지 않나요? 우리는 Middleware를 다양한 상황에 다시 사용할 수 있게 만들었습니다!

종료 가능 Middleware

occasionally, 우리는 Middleware가 브라우저에 응답을 보낸 후에 무언가를 하고 싶습니다. 이때 종료 가능 Middleware가 등장합니다!

응답 시간을 로그하는 Middleware를 만들어 보겠습니다:

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Response time: ' . $duration . ' seconds');
}
}

이 Middleware는 요청에 start_time을 추가한 후, 응답이 전송된 후 총 응답 시간을 로그합니다.

종료 가능 Middleware를 사용하려면 app/Http/Kernel.php 파일에 등록해야 합니다:

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

Middleware 메서드

Middleware에서 사용할 주요 메서드를 아래 표에 정리해 보겠습니다:

메서드 설명
handle() 주요 Middleware 로직. 요청을 처리하고 선택적으로 다음 Middleware로 전달합니다.
terminate() 브라우저에 응답이 전송된 후 실행됩니다. 정리나 로깅에 사용됩니다.

결론

그렇습니다, 친구들! 우리는 Laravel Middleware의 땅을 거쳐, Middleware 생성과 등록에서 매개변수 사용과 종료 가능 Middleware에 이르기까지 여행을 했습니다. Middleware는 요청 처리의瑞士军刀 - 다양하고 강력하며, Laravel 도구箱에서 필수적인 도구입니다.

Laravel 여정을 계속하면서 Middleware를 사용하는 창의적인 방법을 무수히 찾을 수 있을 것입니다. Perhaps 당신은 유지보수 모드를 확인하거나 요청을 로그하거나 요청 데이터를 변환하는 Middleware를 만들 수도 있습니다. 가능성은 무한합니다!

계속 코딩하고, 계속 배우고, 가장 중요한 것은 즐거워하자! 다음에 만날 때까지, 행복한 Laravel 개발을 기원합니다!

Credits: Image by storyset