개발자가 되고 싶은 사람

[RxJava2 #3] Reactor와 Mono, Flux이해하기

|

Reactor

  • Reactor는 Pivotal의 오픈소스 프로젝트로, JVM 위에서 동작하는 논블럭킹 애플리케이션을 만들기 위한 리액티브 라이브러리.
  • Reactor는 RxJava2와 함께 Reactive Stream의 구현체이기도 하고, Spring Framework 5부터 리액티브 프로그래밍을 위해 지원되는 라이브러리
  • Reactive Stream은 요소를 방출하거나 오류로 인해 정상적으로 완료되는 기본 rx 연산자를 사용합니다.
  • Reactor는 최소 Java8에서 동작하며 Java8의 피쳐를 잘 지원한다는 점이 있다.

Mono와 Flux

  • Reactor를 사용해 일련의 스트림을 코드로 작성하다 보면 보통 여러 스트림을 하나의 결과를 모아줄 때 Mono를 쓰고, 각각의 Mono를 합쳐서 여러 개의 값을 처리하는 Flux로 표현할 수도 있습니다.
  • 자세한 사항은 document에서 참고 가능
  • Flux와 Mono를 직접 생성하기보다는 다른 라이브러리가 제공하는 Flux와 Mono를 사용할 때가 많다. 예를 들어 스프링 5 버전에 추가된 WebClient 클래스를 사용할 때에는 WebClient가 생성하는 Mono를 이용해서 데이터를 처리한다.

1. Flux

  • Flux는 0-N개인 여러 개의 결과를 처리하는 객체
  • flux는 iterable한 데이터들을 mono로 바꿔서 나누고 합침으로 해서 subscriber에게 전달합니다. 즉 mono가 뭉치면 flux 라고 생각.
  • 여러 element를 처리

2. Mono

  • Mono는 0-1개의 결과만을 처리하기 위한 Reactor의 객체

3. just

  • just() 메서드는 이미 존재하는 값을 사용해서 Flux/Mono를 생성할 때 사용된다.
  • Mono<String> just = Mono.just("foo"); 의 경우는 just의 리턴타입이 mono이다.

Reference

  1. 사용하면서 알게 된 Reactor, 예제 코드로 살펴보기
  2. 리액티브 스트림즈, Flux, Mono

Comments