>백엔드 개발 >PHP 튜토리얼 >Laravel 미들웨어 이해: Laravel #의 새로운 접근 방식에 대한 심층 분석

Laravel 미들웨어 이해: Laravel #의 새로운 접근 방식에 대한 심층 분석

WBOY
WBOY원래의
2024-09-10 18:30:101249검색

Understanding Laravel Middleware: A Deep Dive into Laravel #s New Approach

Laravel의 미들웨어 소개

미들웨어는 현대 웹 개발에 필수적인 개념이며, 인기 있는 PHP 프레임워크인 Laravel은 이를 광범위하게 사용하여 HTTP 요청을 처리합니다. 간단한 API를 구축하든 대규모 웹 애플리케이션을 구축하든 Laravel의 미들웨어를 이해하는 것이 더 깔끔하고 관리하기 쉽고 효율적인 코드를 작성하는 데 중요합니다.

이 글에서는 Laravel 미들웨어에 대해 자세히 알아보고 이것이 무엇인지, 왜 사용해야 하는지, 효과적으로 사용하는 방법을 설명하겠습니다. 또한 HTTP 커널을 제거하는 등 큰 변화가 일어난 Laravel 11의 미들웨어 구조도 살펴보겠습니다. Laravel에서 사용자 정의 미들웨어를 생성하고 사용하는 방법을 살펴보는 것으로 마무리하겠습니다.

목차

  1. 미들웨어란 무엇인가요?
  2. 미들웨어를 사용하는 이유
  3. Laravel의 미들웨어 종류
  4. 미들웨어의 장점
  5. Laravel 11의 미들웨어 구조
  6. 맞춤형 미들웨어 생성 및 사용 방법
  7. 미들웨어 활용 실제 사례
  8. Laravel의 미들웨어 모범 사례
  9. 결론

1. 미들웨어란 무엇입니까?

미들웨어는 기본적으로 수신 HTTP 요청과 애플리케이션 사이에 위치하는 필터 또는 레이어입니다. 들어오는 요청을 가로채고 요청을 다음 계층으로 전달하기 전에 인증, 로깅, 요청 수정 등 다양한 작업을 수행할 수 있습니다. 처리 후 미들웨어는 요청이 애플리케이션으로 진행되도록 허용하거나, 응답을 수정하거나, 요청을 완전히 거부할 수 있습니다.

간단히 말하면 미들웨어는 애플리케이션의 보안 게이트 또는 경비원과 같습니다. 애플리케이션에 대한 모든 요청은 미들웨어를 통과해야 하며 요청 유형에 따라 다양한 동작을 정의할 수 있습니다.

2. 미들웨어를 사용하는 이유는 무엇입니까?

미들웨어는 애플리케이션에 들어오는 HTTP 요청을 필터링하거나 수정하기 위한 편리한 메커니즘을 제공합니다. Laravel 애플리케이션에서 미들웨어가 사용되는 몇 가지 일반적인 이유는 다음과 같습니다.

인증 및 권한 부여: 미들웨어는 인증된 사용자 또는 특정 권한이 있는 사용자만 특정 경로에 액세스하도록 보장할 수 있습니다.
유지 관리 모드: 미들웨어는 애플리케이션이 유지 관리 모드에 있는지 확인하고 들어오는 모든 요청에 ​​대해 유지 관리 메시지를 반환할 수 있습니다.
로깅 및 모니터링: 미들웨어는 모든 요청을 기록하거나 성능을 모니터링하여 개발자가 애플리케이션 성능을 추적하는 데 도움을 줍니다.
CORS(Cross-Origin Resource Sharing): 미들웨어는 CORS 헤더를 처리하여 외부 원본의 요청을 허용하거나 거부할 수 있습니다.
요청 수정: 요청 데이터가 컨트롤러에 도달하기 전에 입력 문자열을 자르거나 입력을 삭제하는 등 요청 데이터를 수정할 수 있습니다.
미들웨어를 사용하면 애플리케이션 로직을 깔끔하게 유지하고 보안, 로깅 또는 요청 수정과 같은 교차 문제로부터 분리할 수 있습니다.

3. Laravel의 미들웨어 유형

Laravel에서 미들웨어는 일반적으로 세 가지 유형으로 분류할 수 있습니다.

글로벌 미들웨어
전역 미들웨어는 애플리케이션에 들어오는 모든 HTTP 요청에 적용됩니다. 한 번 정의되면 모든 경로에 자동으로 적용됩니다. 예를 들어 애플리케이션에 대한 모든 요청에 ​​대해 로깅을 활성화할 수 있습니다.

경로별 미들웨어
이 유형의 미들웨어는 특정 경로 또는 경로 그룹에만 적용됩니다. 이를 개별 경로 또는 유사한 동작을 공유하는 경로 그룹에 연결할 수 있습니다. 예를 들어, 로그인한 사용자가 필요한 경로에만 인증 미들웨어를 적용할 수 있습니다.

미들웨어 그룹
미들웨어 그룹을 사용하면 그룹으로 함께 적용할 수 있는 여러 미들웨어를 정의할 수 있습니다. Laravel은 웹 및 API 그룹과 같은 일부 기본 미들웨어 그룹과 함께 제공됩니다. 이러한 그룹은 모든 웹 또는 API 요청에 각각 적용해야 하는 미들웨어를 번들로 묶습니다.

4. 미들웨어의 장점

미들웨어는 Laravel 개발자에게 다음과 같은 여러 가지 이점을 제공합니다.

1. 우려사항 분리
미들웨어는 기본 애플리케이션 흐름에서 특정 논리를 분리하여 문제를 분리하는 데 도움이 됩니다. 이렇게 하면 애플리케이션의 책임이 별개의 계층으로 나누어지므로 애플리케이션을 더 쉽게 유지하고 확장할 수 있습니다.

2. 재사용성
일단 정의되면 미들웨어는 여러 경로와 애플리케이션에서 재사용될 수 있습니다. 이렇게 하면 미들웨어 로직을 한 번만 작성하고 필요할 때마다 적용할 수 있습니다.

3. 보안
미들웨어를 사용하면 애플리케이션의 진입점에서 인증 및 권한 부여와 같은 보안 관련 논리를 구현하여 승인되지 않은 요청이 핵심 논리에 도달하지 않도록 할 수 있습니다.

4. 맞춤화
Laravel 미들웨어는 유연하고 사용자 정의가 가능합니다. 클라이언트에 반환되기 전에 요청을 수정하거나, 특정 조건에 따라 사용자를 리디렉션하거나, 응답을 조작하는 미들웨어를 생성할 수 있습니다.

5. 중앙 집중식 오류 처리
미들웨어를 사용하면 오류와 예외를 중앙 집중식으로 관리할 수 있습니다. 예외 또는 유효성 검사 오류를 포착하고 애플리케이션 전체에서 균일하게 처리할 수 있습니다.

5. Laravel 11의 미들웨어 구조

Laravel 11에서는 특히 미들웨어 처리 방식에서 몇 가지 중요한 구조적 변화가 있었습니다. Laravel 11 이전에는 모든 미들웨어 구성이 Http 커널 파일(app/Http/Kernel.php)에서 처리되었습니다. 그러나 Laravel 11은 더욱 깔끔하고 모듈화된 접근 방식을 도입했습니다.

Http 커널 제거
Laravel 11에서는 Http 커널이 제거되었으며 이제 bootstrap/app.php 파일에 미들웨어가 구성되었습니다. 이는 기존 HTTP 커널 구조에 익숙한 개발자에게는 중요한 패러다임 변화처럼 느껴질 수 있지만 미들웨어를 등록하고 관리하는 보다 간편하고 유연한 방법을 제공합니다.

Laravel 11의 기본 bootstrap/app.php 파일은 다음과 같습니다.

<?php
return Application::configure()
    ->withProviders()
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        // api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        // channels: __DIR__.'/../routes/channels.php',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
?>```



**Middleware Management**
In Laravel 11, middleware is now handled through the withMiddleware() method, which accepts a callable function. Inside this callable, you can register, modify, or remove middleware.

## 6. How to Create and Use Custom Middleware in Laravel
Creating custom middleware in Laravel allows you to extend the default behavior of your application. Here’s how to create and use custom middleware in Laravel:

Step 1: Create the Middleware
You can create middleware using the Artisan command:


php artisan make:middleware CheckAge
This command will create a new middleware class in the app/Http/Middleware directory. The newly created CheckAge.php file will look something like this:




```php
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

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

        return $next($request);
    }
}?>```



In this example, the CheckAge middleware checks the user's age and redirects them if they are under 18. If the user passes the condition, the request continues to the next layer.

**Step 2: Register the Middleware**
Since Laravel 11 no longer uses the Http Kernel, you will need to register your middleware in the bootstrap/app.php file. Here’s how you can register your custom middleware:




```php return Application::configure()
    ->withProviders()
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias('check.age', \App\Http\Middleware\CheckAge::class);
    })
    ->create();```



Now, your middleware alias check.age is available for use in your routes.

Step 3: Apply the Middleware to Routes
Once the middleware is registered, you can apply it to routes or route groups:




```php
<?php

Route::get('/dashboard', function () {
    // Only accessible if age > 18
})->middleware('check.age');?>```



## 7. Practical Examples of Using Middleware
Middleware can be used for a variety of tasks in Laravel. Let’s look at a few practical use cases.

**Example 1: Logging Requests**
You can create middleware to log incoming requests to a file or a logging service. This can help you monitor the behavior of your application.



```php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;

class LogRequest
{
    public function handle(Request $request, Closure $next)
    {
        Log::info('Request URL: ' . $request->url());

        return $next($request);
    }
}?>```



**Example 2: Checking User Roles**
You can use middleware to restrict access based on user roles. For example, only allow access to certain routes if the user has an admin role.



```php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckRole
{
    public function handle($request, Closure $next)
    {
        if (Auth::user() && Auth::user()->role != 'admin') {
            return redirect('/home');
        }

        return $next($request);
    }
}?>```



## 8. Best Practices for Middleware in Laravel
Here are some best practices to follow when working with middleware in Laravel:

**1. Keep Middleware Focused**
Middleware should be responsible for a single task. If you find that your middleware is doing too much, consider splitting it into smaller, more focused middleware.

**2. Use Route-Specific Middleware**
Use route-specific middleware when possible. Applying middleware globally can lead to performance overhead and unnecessary checks on routes that don’t need them.

**3. Avoid Complex Logic**
Middleware should be kept simple. Complex logic or business rules should be handled in the controller








위 내용은 Laravel 미들웨어 이해: Laravel #의 새로운 접근 방식에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:CakePHP 빠른 가이드다음 기사:CakePHP 빠른 가이드