미들웨어(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);