일반적인 서비스

  • 객체는 다른 객체를 직접 호출하고 데이터를 받는다. == 동기
  • 경계가 무너지고 구성요소의 독립적인 실행이 보장되지 않으며 복원력, 유연성 모두 위협을 받게 됨
  • Reactive manifesto를 적용한다면?

동기 stream

  • callee는 caller에게 응답이 아닌 stream을 제공한다.
  • callee는 각각의 값을 stream을 통해서 전달한다.
  • caller는 해당 stream을 collect하여 처리한다.

stream을 이용한 흐름

  • 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
    • caller는 collect를 통해서 값을 조회해야 한다.
      • caller와 callee를 동기적으로 동작
  • 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
    • stream이 메시지 큐의 역할을 하지만, 부하를 관리할 수 없다

비동기 future

  • callee는 caller에게 응답이 아닌 future를 제공
  • callee는 각각의 값을 future를 통해서 전달한다.
  • caller는 해당 future를 chaining 하여 이를 처리한다.

future를 이용한 흐름

  • 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
    • caller와 callee는 비동기적으로 동작한다.
  • 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
    • future는 메시지 큐의 역할을 할 수 없고, 부하를 관리할 수 없고, 배압도 적용할 수 없다.

Reactive streams

  • callee는 caller에게 응답이 아닌 publisher를 제공
  • callee는 각각의 값을 publisher를 통해서 전달한다.
  • caller는 해당 publisher를 subscribe하거나 다른 caller에게 전달한다.
  • caller는 subscriber를 등록하여 back-pressure를 조절하여 처리 가능한 만큼 전달 받는다.

Reactive streams을 이용한 흐름

  • 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
    • callee는 publisher를 반환하고 caller를 subscriber를 등록한다. 이 과정에서 caller와 callee는 비동기적으로 동작한다.
  • 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
    • publisher는 메시지 큐를 생성해서 부하를 관리하고 흐름을 제어한다. back-pressure를 조절할 수 있는 수단을 제공한다.

Reactive programming

  • 비동기 데이터 stream을 사용하는 패러다임
  • 모든 것이 이벤트로 구성되고 이벤트를 통해 전파되어야 한다.
    • event-driven 해야 한다.
    • 데이터의 전달, 에러, 완료 까지 모두 이벤트로 취급
  • Reactive manifesto의 Responsive,Resilient, Elastic, Message Driven 까지 모두 해당

'웹프로그래밍 > WebFlux' 카테고리의 다른 글

Reactive Streams 구현 라이브러리  (0) 2023.07.24
Reactive manifesto  (0) 2023.07.05
CompletionStage 인터페이스  (0) 2023.07.03
Future 인터페이스  (0) 2023.06.13
blocking과 non-blocking의 차이(I/O 관점)  (0) 2023.06.12

+ Recent posts