미들웨어 아키텍처 패턴: 함수형 프로그래밍 기반 웹 처리 체인
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 웹 개발자 (Rust 기반 미들웨어 설계에 관심 있는 개발자)
- 중간 이상 수준의 프로그래밍 경험을 가진 개발자
- 반복적 코드 처리를 개선하고자 하는 개발 팀
핵심 요약
- 함수형 프로그래밍 설계 원칙을 기반으로 한 비동기 미들웨어 체인 구조
hyperlane::*
프레임워크의Context
객체를 통해 중간 상태 공유 및 요청/응답 처리 흐름 제어- 미들웨어 실행 순서 명확화: 요청 미들웨어 → 라우트 핸들러 → 응답 미들웨어
섹션별 세부 요약
1. 미들웨어 아키텍처 개요
hyperlane
프레임워크의 미들웨어 체인은 Unix 파이프라인 개념과 유사auth_middleware
,logging_middleware
등 독립된 비동기 함수로 구성Context
객체를 통해 요청 헤더, 사용자 정보, 처리 시간 등 공유 상태 관리
2. 주요 미들웨어 구현 예시
- 인증 미들웨어 (
auth_middleware
)
- authorization
헤더 검증
- UserInfo
구조체를 Context
에 저장 (예: ctx.set_metadata("user_info", user_info).await
)
- 로그 미들웨어 (
logging_middleware
)
- 요청 시간, 메서드, 클라이언트 IP, User-Agent 기록
- chrono
라이브러리 사용하여 시간 포맷팅 (chrono::Utc::now().format("%Y-%m-%d %H:%M:%S")
)
- 레이트 제한 미들웨어 (
rate_limit_middleware
)
- tokio::sync::RwLock
사용
- 1분당 100 요청 제한 (60초 간격으로 카운트 리셋)
3. 요청/응답 처리 흐름
- 요청 미들웨어 순서 (등록 순서 기반):
request_preprocessing
→ 2.auth_middleware
→ 3.rate_limit_middleware
cors_middleware
→ 5.business_logic_middleware
- 응답 미들웨어 순서:
response_postprocessing
→ 2.error_handling_middleware
→ 3.logging_middleware
Context
객체를 통해 메타데이터 (예:request_start
시간) 전달
4. 라우트 핸들러 예시
- 사용자 프로필 라우트 (
user_profile
)
- user_info
메타데이터로 사용자 정보 추출
- UserProfile
구조체를 JSON으로 직렬화 (serde_json::to_string
)
- 관리자 대시보드 라우트 (
admin_dashboard
)
- user_info.roles
로 역할 검증 ("admin"
포함 여부 체크)
- DashboardData
구조체를 응답으로 반환
5. 에러 처리 미들웨어
- 400 이상 상태 코드에 대한 에러 로깅 및 헤더 추가
- X-Error-Code
헤더에 상태 코드 기록
- X-Processing-Time
헤더에 처리 시간 기록 (duration.as_millis()
)
결론
hyperlane
프레임워크의 미들웨어 체인은 코드 중복 최소화와 처리 흐름 명확화를 통해 웹 개발 생산성 향상Context
객체를 활용한 상태 공유 및 모듈화된 미들웨어 설계가 핵심- 레이트 제한, 인증, 로깅 등 공통 기능을 모듈화하여 유지보수성 향상