Files
llm-wiki/raw/official-docs/spring-framework-observability-context-propagating-task-decorator.md

7.1 KiB

title, source_type, url, archive_url, related_branches, related_projects, tags, created
title source_type url archive_url related_branches related_projects tags created
Spring Framework Observability — ContextPropagatingTaskDecorator 공식 참조 official-doc https://docs.spring.io/spring-framework/reference/integration/observability.html
feature-background-job-async-contract
ca-skeleton
official-doc
ca-skeleton
observability
spring-framework
micrometer
2026-06-11

Spring Framework Observability — ContextPropagatingTaskDecorator 공식 참조

Layer: raw/official-docs/ — Spring Framework 공식 레퍼런스 문서의 원문 발췌·출처 기록. 검증된 요약은 /ingestwiki/concepts/source-summary-template 형식으로 별도 작성.

Parent / 활용 branch

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-background-job-async-contract D5/D6 — TaskDecorator(ContextPropagatingTaskDecorator)를 setTaskDecorator() 로 등록하는 것이 Spring 공식 권고 패턴이며 Observation context + MDC 가 그 경로로 worker thread 에 전파됨 (span_id explicit MDC copy 불필요 근거)

출처 / Source

왜 저장했는지 / Why archived

feature-background-job-async-contract 의 D5/D6 결정(TaskDecorator 1개로 MDC + Observation context 전파)이 UNSUPPORTED_DECISION 으로 표시된 상태를 해소하기 위해 보관. Spring 공식 문서가 ContextPropagatingTaskDecorator + setTaskDecorator() 패턴을 async context propagation 의 공식 메커니즘으로 기술하며 MDC 전파와 io.micrometer:context-propagation 의존성을 명시한다.

핵심 인용 / Key quotes (verbatim, 4개)

[§Global Event Multicaster Configuration / Key Requirements] "The io.micrometer:context-propagation library must be present on the classpath"

[§Global Event Multicaster Configuration / Key Requirements] "Use setTaskDecorator() to apply the ContextPropagatingTaskDecorator"

[§Per-Listener Async Configuration / code comment line 88] "// this logging statement will contain the expected MDC entries from the propagated context"

[§Key Takeaways] "MDC entries from propagated context are available in logging statements"

Claims Extracted / 추출된 주장

이 자료가 직접 말하는 것만 claim 으로 분리한다.

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
SF-OBS-C1 ContextPropagatingTaskDecoratorsetTaskDecorator() 로 TaskExecutor 에 등록하는 것이 Spring 이 권고하는 async context propagation 패턴이다 [§Key Requirements] "Use setTaskDecorator() to apply the ContextPropagatingTaskDecorator" official-vendor-doc Spring Framework + Micrometer Context Propagation 를 사용하는 모든 @Async / event listener async 실행 컨텍스트 이 패턴이 ThreadPoolTaskExecutor(ca-tmpl 사용 클래스) 에서도 동일하게 동작한다는 것은 이 페이지에서 직접 증명하지 않음 — 페이지 예시는 SimpleAsyncTaskExecutor 사용
SF-OBS-C2 async task 실행 시 logging 문 안에서 propagated context 의 MDC 항목이 자동으로 포함된다 [§code comment] "// this logging statement will contain the expected MDC entries from the propagated context"; [§Benefits] "MDC entries from propagated context are available in logging statements" official-vendor-doc ContextPropagatingTaskDecorator 가 설정된 executor 를 통해 실행되는 async task MDC 에 복사되는 구체적인 키 목록(request_id, trace_id 등)을 이 페이지가 직접 명시하지 않음
SF-OBS-C3 io.micrometer:context-propagation 라이브러리가 classpath 에 존재해야 context propagation 이 동작한다 [§Key Requirements] "The io.micrometer:context-propagation library must be present on the classpath" official-vendor-doc Spring Framework observability context propagation 전반 어느 Spring Boot 버전부터 auto-configured 되는지 이 페이지가 명시하지 않음
SF-OBS-C4 ContextPropagatingTaskDecorator 는 thread boundary 를 가로질러 observability context 를 전파하는 메커니즘이다 [§Key Takeaways] "ContextPropagatingTaskDecorator is the mechanism for propagating observability context across thread boundaries" official-vendor-doc Micrometer Observation context + MDC propagation across threads span_id 의 explicit MDC copy 가 불필요하다는 것을 이 페이지가 직접 언급하지는 않음 — span_id 는 Observation context 에서 자동 파생된다는 주장은 Micrometer 문서에서 추가 확인 필요

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • SF-OBS-C1: Spring 공식 권고 패턴이 setTaskDecorator(new ContextPropagatingTaskDecorator())
    • SF-OBS-C2: 이 패턴으로 async task 내 logging 에서 MDC entries 가 자동 포함됨
    • SF-OBS-C3: io.micrometer:context-propagation 의 classpath 의존성이 필수임
    • SF-OBS-C4: ContextPropagatingTaskDecorator 가 thread boundary 를 가로지르는 observability context propagation 의 공식 메커니즘임
  • 이 자료가 증명하지 않는 것:
    • 예시 코드가 SimpleAsyncTaskExecutor 를 사용하므로 ThreadPoolTaskExecutor 에서의 동일 동작을 이 페이지만으로 보장할 수 없음 (실제로는 동일 인터페이스이나 별도 검증 권고)
    • span_id 의 explicit MDC copy 가 불필요하다는 직접 선언 없음 — Micrometer 문서에서 Observation → MDC span_id 자동 전파 별도 확인 필요
    • 전파되는 MDC 키 목록(request_id / trace_id / correlation_id / tenant_id)을 이 페이지가 열거하지 않음
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • ca-tmpl 의 ThreadPoolTaskExecutor bean 에서 setTaskDecorator(new ContextPropagatingTaskDecorator()) 호출 후 contract test 로 실제 MDC 전파 검증
    • io.micrometer:context-propagation 가 ca-tmpl 의 spring-boot 버전에서 자동 포함되는지 또는 명시적 의존성 추가 필요 여부

메모 / Notes

  • 이 페이지는 @EventListener + @Async 패턴에 초점을 맞추나, setTaskDecorator() API 는 TaskExecutorConfigurer / ThreadPoolTaskExecutor 에도 동일하게 적용 가능함 (인터페이스 레벨 — 추론, 미검증)
  • SF-OBS-C4 는 D5 의 "TaskDecorator 1개로 Observation context 전파" 를 뒷받침하나 D6 의 "span_id MDC explicit copy 불필요" 주장은 Micrometer 공식 문서 추가 인용 필요
  • 추가로 봐야 할 동일 출처 관련 페이지: https://docs.micrometer.io/context-propagation/reference/ (context-propagation 라이브러리 레퍼런스)
  • 같은 주제 다른 official-doc / company-tech-blog: (미작성 — Micrometer context-propagation 공식 레퍼런스 추가 권고)
  • 이 자료를 인용한 wiki 요약: (생성 시 추가)