minstudio

미들웨어(Middleware)의 이해

미들웨어는 목적지(라우트)에 도달하기 전이나 후에 거쳐야 하는 '검문소' 같은 역할을 합니다. 주로 로그인 여부를 확인하거나, 모든 응답을 JSON 형식으로 바꿔주는 등 공통적으로 처리해야 할 작업에 사용됩니다.

🧅 미들웨어 양파 모델 (Onion Model)

검문소 1: 로깅 미들웨어
검문소 2: 인증 미들웨어
Core
애플리케이션
(목적지)
➡️ Request
⬅️ Response

요청(Request)은 바깥쪽에서부터 안쪽으로 껍질을 뚫고 들어가며 검사를 받고,
응답(Response)은 다시 안쪽에서 바깥쪽으로 빠져나옵니다.

// 커스텀 미들웨어 만들기 (검문소)
$authMiddleware = function (Request $request, $handler) {
    // 1. 요청이 목적지에 도착하기 전 (Before)
    $token = $request->getHeaderLine('Authorization');
    
    if ($token !== 'secret-key') {
        // 검문 실패! 목적지에 안 보내고 바로 돌려보냄
        $response = new \Slim\Psr7\Response();
        $response->getBody()->write("로그인이 필요합니다.");
        return $response->withStatus(401);
    }

    // 2. 검문 통과! 다음 단계(목적지)로 이동
    $response = $handler->handle($request);

    // 3. 목적지에서 일을 끝내고 돌아오는 길 (After)
    // 응답에 헤더를 추가해서 돌려줌
    return $response->withHeader('X-Auth-Checked', 'true');
};

// 미들웨어 장착하기 (특정 라우트에만 적용)
$app->get('/dashboard', function ($request, $response) {
    $response->getBody()->write("비밀 대시보드에 오신 것을 환영합니다.");
    return $response;
})->add($authMiddleware);
미들웨어(Middleware)의 이해 | Minstudio