PHP Laravel 없이 PSR-15 미들웨어 구현하기
페이지 정보

영삼이
본문
✅ Laravel 없이 PSR-15 미들웨어 구현하기
PSR-15는 HTTP 요청/응답 처리 흐름에서 **미들웨어(Middleware)**를 표준화한 인터페이스입니다. PHP에서 PSR-15를 직접 구현하면, Laravel이나 Symfony 없이도 체계적인 요청 흐름 제어가 가능합니다. 이 글에서는 PSR-15 미들웨어를 직접 구현하는 과정을 소개합니다.
🧩 PSR-15 핵심 인터페이스
[code=php]
namespace Psr\Http\Server;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
interface MiddlewareInterface {
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface;
}
interface RequestHandlerInterface {
public function handle(ServerRequestInterface $request): ResponseInterface;
}
[/code]
📦 필요한 패키지 설치
composer require psr/http-message nyholm/psr7
-
psr/http-message
: PSR-7 요청/응답 인터페이스 -
nyholm/psr7
: 가볍고 빠른 PSR-7 구현체
🧱 기본 미들웨어 구현
[code=php]
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
class AuthMiddleware implements MiddlewareInterface {
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface {
if (!$request->hasHeader('Authorization')) {
return new \Nyholm\Psr7\Response(401, [], 'Unauthorized');
}
return $handler->handle($request);
}
}
[/code]
🔁 미들웨어 체인 구성
[code=php]
class MiddlewareStack implements RequestHandlerInterface {
private array $middlewares;
private $controller;
public function __construct(array $middlewares, callable $controller) {
$this->middlewares = $middlewares;
$this->controller = $controller;
}
public function handle(ServerRequestInterface $request): ResponseInterface {
if (empty($this->middlewares)) {
return call_user_func($this->controller, $request);
}
$middleware = array_shift($this->middlewares);
return $middleware->process($request, $this);
}
}
[/code]
🚀 사용 예시
[code=php]
use Nyholm\Psr7\ServerRequest;
$middlewares = [
new AuthMiddleware(),
new LoggingMiddleware(),
];
$controller = function ($request) {
return new \Nyholm\Psr7\Response(200, [], 'Hello, world');
};
$stack = new MiddlewareStack($middlewares, $controller);
$request = ServerRequest::fromGlobals();
$response = $stack->handle($request);
echo $response->getBody();
[/code]
✅ 장점
-
미들웨어 체인을 구성해 요청 흐름 제어 가능
-
요청 전후 가로채기 로직 작성에 최적화
-
프레임워크 없이도 PSR 표준에 맞춘 구조화 가능
⚠️ 주의사항
-
PSR-7/15 구조는 불변성(Immutable)이 전제 → 객체 수정 대신 복사
-
에러/예외 미들웨어도 반드시 넣어야 안정적인 구조 완성
-
체인 실행 흐름을 눈으로 파악할 수 있도록 구성 중요
🧠 요약
-
PSR-15는 요청을 체인 형태로 가공하는 구조
-
미들웨어를 직접 구현하면 프레임워크 없는 경량 서버도 확장성 확보
-
실전 프로젝트에도 충분히 적용 가능
- 이전글PHP에서 커스텀 DI 컨테이너 만들기 25.03.28
- 다음글PHP에서 JWT 토큰 직접 구현하기 (라이브러리 없이) 25.03.28
댓글목록
등록된 댓글이 없습니다.