WebClient3 코루틴 withTimeoutOrNull과 Webclient 에 대해서 목적기존에 webClient를 이용해서 외부에 호출하는 메서드 A가 있었다. 이 메서드 A는 webClient에 timeout 1000ms를 걸어서 사용 중이었다. 그러다가 메서드 A의 로직을 그대로 사용하면서, timeout만 300ms로 줄이고 싶은 요구가 생겼다. 기존에 메서드 A를 다른 여러 코드에서 사용 중이었기 때문에 A 내부의 webClient의 timeout을 줄이는 건 위험도가 높아 보였다이를 해결하기 위해 새로운 코드를 작성할 때 메서드 A를 가져다 쓰고 그 상위에 withTimeoutNull이라는 함수를 사용했다 fun getData(): String? = runBlocking { withTimeoutOrNull(300) { delayWebClient.get() .. 2025. 4. 6. Spring MVC & WebClient 에서 MDC 로깅하기 2 목적저번 글에 이어지는 글이다. 저번 글에서 스레드가 변경돼도 MDC를 유지하기 위해서 MDC를 스트림 콘텍스트에 저장해 두고, 로깅하기 직전에 스트림 콘텍스트에서 MDC를 꺼내와서 현재의 스레드 로컬에 주입해 주는 방법을 사용했다하지만 위 방법을 로깅하기 직전에 매번 스트림 콘텍스트에서 MDC를 꺼내와서 현재의 스레드 로컬에 주입해야 하는 불편함이 있다. 이번 글에서는 이 문제를 해결해 보도록 하겠다 아래는 문제 해결을 위한 기본 코드이다. 아래 코드에서는 'Third' 로깅하기 직전 상위 스트림에서 스트림 콘텍스트에서 MDC를 꺼내와 스레드 로컬에 주입하는 작업을 빠트렸기 때문에 'Third' 로깅의 MDC 값이 null 인걸 확인할 수 있다object ReactorMdc { const val.. 2025. 3. 22. Spring MVC & WebClient 에서 MDC 로깅하기 1 목적spring MVC & WebClient 를 조합해서 사용할 때 MDC 를 잘 로깅하기 위한 방법을 알아본다MDC 를 잘 로깅한다란 하나의 요청을 처리할 때 스레드가 변경되도 MDC 의 컨텍스트를 유지함을 말한다WebClient 를 사용하면 A 라는 하나의 요청을 처리할 때도 thread-1, thread-2 와 같이 2개 이상의 스레드가 사용될 수 있으며, 요청 처리중 스레드가 변경되도 MDC 컨텍스트를 유지해야 전체 요청의 흐름을 파악할 수 있다 아래는 문제 해결을 위한 기본 코드이다@Serviceclass WebClientContextService( private val webClient: WebClient,) { private val logger = LoggerFactory.getL.. 2025. 2. 9. 이전 1 다음