본문 바로가기

Spring/WebFlux

(17)
[Reactive Programming] Flux Spring WebFlux Series - 17 이전 장(링크) 에서는 Mono의 동작방식과 block()에 대해서 간략하게 알아보았다. 이번 장에서는 Flux 에 대해서 자세하게 알아본다. 모든 코드는 깃 허브 (링크) 의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. Flux 스프링 Reactive의 기본 인터페이스는 Mono가 아닌 Flux다. 지난 시간에는 간단하게 String 타입을 반환하는 방밥에 대해서만 알아보았다. 이번 시간에는 조금 복잡한 Object 타입을 반환하는 시간을 가져본다. @Slf4j @RestController public class FluxController { @GetMapping("/event/v1/{id}") private Mono fluxVersion1(@Pa..
[Reactive Programming] Mono Spring WebFlux Series - 16 이전 장(링크) 에서는 WebFlux에 대해서 간략하게 알아보았다. 이번 장에서는 이전 장에서 사용했던 Mono의 동작방식과 block() 에 대해서 자세하게 알아본다. 모든 코드는 깃 허브 (링크) 의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. static factory method Mono 기본 사용법 Mono의 사용법을 알아보기 위해 간단한 컨트롤러를 작성해본다. 완성되어 있는 Hello WebFlux라는 문구를 반환하기 위해 Static Factory Method인 just를 사용하였다. @RestController public class MyController { @GetMapping("/") public Mono hello() { ret..
[Reactive Programming] WebFlux Spring WebFlux Series - 15 이전 장(링크) 에서는 Completable Future에 대해서 알아보았다. 이번 장에서는 드디어 WebFlux에 대해서 알아본다. 모든 코드는 깃 허브 (링크) 의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 기존에 작성한 코드를 살펴보면 비동기로 API를 호출하는 AsyncRestTemplate이 Spring의 버전이 올라가면서 Deprecated처리 된 것을 확인할 수 있다. 기능은 정상적으로 작동하지만 스프링 5.*에서 지원하는 Reactive 스타일이 아니다. 기본적으로 ListenableFuture를 반환하며 따로 callback 메서드를 지정해주어야 하기 때문이다. 또한 AsyncRestTemplate를 대체하는 WebClient..
[Reactive Programming] Completable Future Spring WebFlux Series - 14 이전 장(링크) 에서는 Callback 지옥의 코드를 리펙토링하는 방법에 대해서 알아보았다. 이번 장에서는 CompletableFuture에 대해서 알아본다. 모든 코드는 깃 허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 오늘은 스프링 5.0의 Reactive Streams의 바로 직전 단계이며 자바 8에 추가된 CompletableFuture에 대해서 알아본다. 우리는 지금까지 자바와 스프링의 비동기 기술에 대해서 오래된 기술부터 나름 최신의 기술까지 알아보았다. 이번 장에서는 마지막으로 CompletableFuture를 알아보면서 자바와 스프링의 비동기 기술에 대한 정리를 마무리한다. 이번 장을 이해하기 위해서는 이전에 알아보..
[Reactive Programming] Callback Hell 해결 Spring WebFlux Series - 13 이전 장(링크) 에서는 AsyncRestTemplate과 DeferredResult를 통해서 외부 API를 호출할 때 발생하는 블록킹 문제를 해결하였다. 이번 장에서는 블록킹 문제를 해결하면서 등장한 Callback Hell이라는 문제를 해결해보도록 한다. 모든 코드는 깃 허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 이번 장에서는 이전에 작성한 코드에 새로운 기능을 추가하는 것이 아니라 Callback Hell을 해결하기 위하여 코드를 리펙토링 하는 시간을 가져볼 것이다. @GetMapping("/my-service/async-complex-with-logic/{idx}") public DeferredResult complexA..
[Reactive Programming] Rest Template - 복합 Spring WebFlux Series - 12 이전 장(링크) 에서는 AsyncRestTemplate과 DeferredResult를 통해서 비동기 컨트롤러를 구현하였다. 이번 장에서는 두 기술을 사용하여 여러 외부 통신을 통해서 복잡한 요청구조를 어떻게 처리하는지에 대해서 알아본다. 모든 코드는 깃 허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 복잡한 요청 구조라고 하면 조금 추상적으로 느껴질 수 있다. 이전에 살펴보았던 링크드인의 발표자료를 다시 한 번 살펴본다. Profile frontend를 보면 Profile backend, Search backend, Company backend를 직접 요청하여 조합된 결과를 클라이언트에게 반환하고 있다. 이렇게 한 번에 여러개의 외..
[Reactive Programming] Rest Template - Async Spring WebFlux Series - 11 우리는 이전 장(링크) 에서 링크드인의 발표자료를 보면서 서비스간의 통신으로 인한 블로킹 현상에 대해서 알아보았다. 이번 장 에서는 이러한 블록킹 문제를 해결하기 위한 방법에 대해서 알아본다. 모든 코드는 깃 허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 원격지 서비스 추가 HTTP Client 코드 개선 MvcV2Client 코드는 MvcClient 코드에 CyclicBarrier를 추가하여 스레드 동기화를 구현해두었다. 이번에 추가되는 MyClient는 MvcV2Client의 요청 URL에 index값을 추가하도록 수정하고 리턴값을 출력하도록 수정하였다. MyClient @Slf4j @EnableAsync public class M..
[Reactive Programming] Rest Template - Blocking Spring WebFlux Series - 10 우리는 지금까지 Future, @Async, Modern, Stress Test를 통해서 자바와 스프링의 원시적인 비동기 기술에 대해서 학습하였다. 이번 장에서는 링크드인의 발표자료를 보면서 서비스간에 통신으로 인해 발생하는 블록킹과 JMC 툴, CyclicBarrier를 통한 스레드 동기화에 대해서 알아보도록 한다. 모든 코드는 깃 허브 (링크)의 테스트 코드에 있으므로 필요하다면 참고하도록 한다. 개요 하나는 Callable을 사용하여 서블릿이 HTTP 요청을 받았을 때 뒤에 있는 워커 스레드에게 할당하고 서블릿 스레드는 빠르게 반납되어 처리되어 다음 요청을 처리하는 ???에 대해서 학습하였다. 다른 하나는 DeferredResult라는 결과를 쓸 수 ..