데브허브 | DEVHUB | [10분 테코톡] 레오의 MDC
- MDC는 로깅 프레임워크에서 스레드별 컨텍스트 정보를 관리하고 로그에 자동으로 포함시키는 강력한 도구입니다. 🛠️
- 기존 방식은 IP와 같은 부가 정보를 모든 로깅 코드에 직접 추가해야 하여 유지보수성을 저해하는 문제가 있었습니다. 📉
- MDC를 활용하면 스프링 인터셉터에서
MDC.put()으로 정보를 저장하고 로그백 설정으로 패턴에 포함시켜, 코드 변경 없이 필요한 정보를 로그에 자동으로 추가할 수 있습니다. 🪄
- MDC는
ThreadLocal을 기반으로 스레드별 독립적인 저장 공간을 제공하여 스레드 안정성을 보장하며, LoggingEvent와 MDCConverter를 통해 로그에 출력됩니다. 🧠
- 스레드풀 환경에서는 스레드 재사용 시 이전 요청의 MDC 정보가 남아 의도치 않은 로그가 발생할 수 있으므로 주의해야 합니다. ⚠️
- 이 문제를 해결하기 위해 작업 완료 후
MDC.clear()를 호출하여 정보를 초기화해야 하며, ThreadPoolExecutor의 afterExecute() 메서드를 오버라이드하는 방법이 효과적입니다. 🧹
TaskDecorator, 서블릿 필터, 스프링 인터셉터 등 다양한 방법으로 MDC 정보를 명시적으로 비울 수 있습니다. 💡
- 비동기 처리 시 MDC 전파 문제도 발생할 수 있으며, 'MDC 복사' 또는 'TaskDecorator' 키워드로 추가 학습이 가능합니다. 🔗