피드로 돌아가기
Dev.toBackend
원문 읽기
PAGI 기반 비동기 Middleware 설계로 ASGI 수준의 확장성 확보
Perl PAGI Middleware
AI 요약
Context
기존 PSGI의 상태 변이 방식과 Starlette의 BaseHTTPMiddleware가 가진 오버헤드 문제를 분석함. 특히 Starlette의 call_next 방식은 별도 Task 생성 및 메모리 스트림 사용으로 인해 스트리밍 응답과 컨텍스트 전파 시 성능 저하 및 오류를 유발하는 한계가 있음.
Technical Solution
- wrap($app) 패턴을 통한 raw ASGI 인터페이스($scope, $receive, $send) 직접 제어로 추상화 비용 제거
- modify_scope 함수를 통한 Scope 얕은 복사(Shallow Copy) 방식으로 상위 계층으로의 상태 유출을 차단한 불변성 기반 컨텍스트 주입 구현
- $send 함수를 래핑하여 응답 이벤트를 가로채는 방식으로 Response Body를 수정하거나 상태 코드를 추적하는 관찰자 패턴 적용
- 내부 앱 호출 전후에 비동기 로직을 배치하여 Logger, Authenticator 등 공통 횡단 관심사(Cross-cutting Concerns) 처리
- HTTP 외 WebSocket 및 Lifespan 트래픽을 필터링 없이 그대로 전달하는 투명한 대리자(Transparent Proxy) 구조 설계
실천 포인트
- 미들웨어 설계 시 과도한 추상화(예: call_next)보다 Low-level 인터페이스를 기반으로 설계하여 런타임 오버헤드 최소화 여부 검토 - 전역 상태 변이 대신 요청별 Scope 복제본을 하위 레이어로 전달하여 Side-effect 없는 컨텍스트 전파 구조 적용 - 응답 값 반환 방식이 아닌 이벤트 스트림 래핑 방식을 통해 대용량 스트리밍 응답 처리의 안정성 확보