WebClient 생성 방법 및 여러개의 WebClient 쉽게 생성하기
2022. 10. 2. 15:53
Server/Spring Boot
Spring Boot Webflux에서는 다른 서버와 http 통신을 하기 위해 WebClient를 기본으로 제공하고 특별한 사유가 없다면 WebClient를 사용한다. 대부분 도메인마다 WebClient를 하나 만들어두고 사용하기 때문에 MSA로 이루어진 환경에서는 여러 endpoint 호출을 위해 여러 개의 WebClient를 생성하게 된다. 여러 WebClient를 사용하다 보면 필연적으로 중복 코드가 발생될 확률이 높으며 새로운 WebClient를 추가할 때마다 간단하지만 귀찮은 작업이 동반될 수 있다. 따라서 이 글에서는 WebClient를 생성하는 방법과 config 기반으로 여러개의 WebClient를 자동으로 생성해주는 방식에 대해 공유하고자 한다. WebClientProperties 클래..
Spring Webflux + Coroutine에서 Context 관리하기 (downstream으로 context 변경 전파하기) - 2편
2022. 9. 18. 22:07
Server/Spring Boot
바로 이전 1편에서의 내용을 이어서 진행해보면 suspend fun 안에서는 아래의 방법으로 Reactor Context에 직접 접근하는 것이 가능하다. 이는 context 정보를 사용하기 위해 MDC를 거칠 필요가 없다는 것이다. currentCoroutineContext()[ReactorContext]?.context 위에서 우리가 context-map이라는 key를 이용해 Map 객체를 context에 넣었던 것을 기억한다면, context-map 객체에 접근하기 위해 아래와 같이 활용할 수 있겠다는 생각이 들 수 있을 것이다. suspend fun getContextMap(): MutableMap? = currentCoroutineContext()[ReactorContext] ?.context ?..
Spring Webflux + Coroutine에서 Context 관리하기 (downstream으로 context 변경 전파하기) - 1편
2022. 9. 18. 22:06
Server/Spring Boot
Spring Webflux를 통해 개발하다 보면loggingId, 헤더를 통해 들어온 값 등 여러 context 값을 관리하기 위해 MDC를 사용한다. 많은 블로그에서 Spring Webflux에서 어떻게 MDC를 이용할 수 있는지에 대해 잘 설명하고 있다. 따라서 이 글에서는 MDC를 이용하는 방법에 대해 다시 한번 설명하고, 어떤 문제 점이 있는지, coroutine에서는 어떻게 더 활용할 수 있는지에 대해 작성해보고자 한다. MDC 및 Context를 어떻게 사용하는지에 대해 생각해보면 Tracing ID를 context에 저장해서 log tracing이 가능하게 한다. (불변성 데이터를 context에 넣고 사용) 한 Request 안에서 호출되는 모든 함수에서 인자를 통해 값을 넘길 필요 없이 ..