MDCFilter
MDC 필터. 요청 컨텍스트를 MDC에 설정.
클래스 정의
@Component
@Order(1)
class MDCFilter : OncePerRequestFilter()메서드
doFilterInternal()
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain
)동작:
- ContentCachingRequestWrapper로 래핑
- MDCHolder.putAll()로 컨텍스트 설정
- filterChain 실행
- finally에서 MDCHolder.clear() 호출
shouldNotFilterAsyncDispatch()
override fun shouldNotFilterAsyncDispatch(): Boolean = false비동기 디스패치에서도 필터 적용.
MDC 설정 항목
| 항목 | 헤더 | 설명 |
|---|---|---|
| SalesChannel | x-triple-sales-channel | 판매 채널 |
| SalesFunnel | x-triple-sales-funnel | 판매 퍼널 |
| DatadogTraceId | dd.trace_id | Datadog 트레이스 ID |
| DatadogSpanId | dd.span_id | Datadog 스팬 ID |
실행 순서
Request
│
└─► MDCFilter (Order 1)
│
└─► LoggingFilter (Order 2)
│
└─► Controller
특징
- @Order(1): 가장 먼저 실행
- OncePerRequestFilter: 요청당 한 번만 실행
- try-finally: MDC 정리 보장
- 비동기 지원: async dispatch에서도 동작