피드로 돌아가기
Dev.toBackend
원문 읽기
AsyncLocalStorage 기반 Request Context 전파로 함수 시그니처 오염 제거
Stop Passing req Everywhere — Express Middleware for Request Context Propagation
AI 요약
Context
분산 추적을 위한 correlation ID 전달을 위해 서비스 계층 전반에 Request 객체를 파라미터로 전달하는 안티 패턴 발생. 이로 인해 비즈니스 로직이 Express 내부 구현에 강하게 결합되고 테스트 코드의 Mocking 비용이 증가하는 한계 노출.
Technical Solution
- Node.js v16+ 표준 API인 AsyncLocalStorage를 활용하여 비동기 호출 체인 전반에 유효한 격리된 저장소 구축
- Middleware 계층에서 Request 헤더의 correlation ID 및 메타데이터를 추출하여 Store에 바인딩하는 구조 설계
onContext훅을 통한 인증 미들웨어의 사용자 정보(userId, tenantId) 동적 주입 및 컨텍스트 확장 구현- 전역 Context 접근 함수(
getContext)를 제공하여 서비스 레이어의 함수 시그니처에서 Request 의존성 완전히 제거 - Logger 래퍼 구현을 통해 비즈니스 로직 수정 없이 모든 로그 라인에 correlation ID 자동 포함 구조 확립
runWithContext유틸리티를 통해 단위 테스트 시 Request Mocking 없이 필요한 컨텍스트만 주입하는 테스트 전략 채택
실천 포인트
1. 서비스 레이어 함수에 `req` 객체가 단순 정보 추출 목적으로 전달되고 있는지 검토
2. Node.js 16 버전 이상 사용 시 `AsyncLocalStorage`를 통한 Ambient Context 도입 고려
3. 로깅 프레임워크와 컨텍스트 저장소를 결합하여 Trace ID 자동 주입 파이프라인 구축
4. TypeScript 인터페이스 확장을 통해 타입 안전성이 보장된 커스텀 컨텍스트 정의