Reactive Programming Paradigm (4/14)

세젤게으름뱅이·2025년 5월 1일

Spring Webflux

목록 보기
11/16

일반적인 프로그래밍 패러다임

일반적인 서비스

  • 일반적인 서비스에서 구성 요소 or 객체는 다른 객체를 직접 호출하고 데이터를 받음.
    • 이 과정에서 서로 직접 의존하기 때문에, 경계가 무너지고 구성 요소간 독립적인 실행이 보장되지 않음
  • 복원력, 유연성 모두 위협
  • 여기에 reactive manifesto를 적용한다면?

동기 stream

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

stream을 이용한 흐름

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

비동기 future

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

stream을 이용한 흐름

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

Reactive Stream

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

stream을 이용한 흐름

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

결론

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

0개의 댓글