MDCFilter

MDC 필터. 요청 컨텍스트를 MDC에 설정.

클래스 정의

@Component
@Order(1)
class MDCFilter : OncePerRequestFilter()

메서드

doFilterInternal()

override fun doFilterInternal(
    request: HttpServletRequest,
    response: HttpServletResponse,
    filterChain: FilterChain
)

동작:

  1. ContentCachingRequestWrapper로 래핑
  2. MDCHolder.putAll()로 컨텍스트 설정
  3. filterChain 실행
  4. finally에서 MDCHolder.clear() 호출

shouldNotFilterAsyncDispatch()

override fun shouldNotFilterAsyncDispatch(): Boolean = false

비동기 디스패치에서도 필터 적용.

MDC 설정 항목

항목헤더설명
SalesChannelx-triple-sales-channel판매 채널
SalesFunnelx-triple-sales-funnel판매 퍼널
DatadogTraceIddd.trace_idDatadog 트레이스 ID
DatadogSpanIddd.span_idDatadog 스팬 ID

실행 순서

Request
    │
    └─► MDCFilter (Order 1)
            │
            └─► LoggingFilter (Order 2)
                    │
                    └─► Controller

특징

  • @Order(1): 가장 먼저 실행
  • OncePerRequestFilter: 요청당 한 번만 실행
  • try-finally: MDC 정리 보장
  • 비동기 지원: async dispatch에서도 동작