Spring Webflux

Reactive Programming

Wanderer Kim 2022. 8. 15. 20:45
반응형

Spring Webflux를 사용하기 위해 공부하면서 reactive programming란 용어를 많이 접하게 되었고, Webflux에 대한 설명들이 reactive programming에 대한 지식 기반위에서 설명되어 있어서 reactive programming에 대해서 정리해 보았습니다.

 

Reactive Programming?

Reactive Programming의 정의에 대해서 위키피디아는 아래와 같이 정의하고 있다.

In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. With this paradigm, it's possible to express static (e.g., arrays) or dynamic (e.g., event emitters) data streams with ease.

즉, Reactive Programming이란 데이터 스트림과 상태 변경의 전파에 중심을 둔 선언형 프로그래밍 패러다임입니다. Reactive Programming에서는 Imperative Programming과는 다르게 데이터 변경에 따른 이벤트가 흐름을 주도하게 됩니다.

 

Reactive Programming의 요소들

Reactive Programming은 아래 세가지 요소들로 구성되어 있습니다.

RX = OBSERVABLE + OBSERVER + SCHEDULER
  • OBSERVABLE : 데이터를 제공해주는 역할을 하는 요소입니다.
  • OBSERVER : OBSERVABLE을 구독면서 발생되는 데이터 스트림들을 consume하는 역할을 하는 요소입니다.
  • SCHEDULER : asynchronous / non-blocking 구조에서 observable과 observer에게 어느 thread에서 실행되어야 하는지 말해주는 역할을 하는 요소입니다. 

 

Reactive Menifesto

Reactive Menifesto(리액티브 선언문)은 리액티브의 원리를 정의해놓은 문서입니다.

  1. 응답성(Responsive) : 시스템은 즉각 응답해야하며, 이로인해 일관성 있는 서비스 품질을 제공해야 합니다.
  2. 탄력성(Resilient) : 시스템은 장애가 있어도 응답성을 유지해야 합니다. 하나의 컴포넌트에 장애가 발생하더라도 전체 시스템에 영향이 없어야 합니다.
  3. 유연성(Elastic) : 시스템은 다양한 워크로드에서도 응답성을 유지해야 합니다. 입력값이나 작업량이 변하더라도 유연하게 응답성을 유지해야하며, 다양한 HW/SW에서도 효율적인 코스트로 유연성을 확보해야 합니다.
  4. 메시지 기반(Message Driven) : 리엑티브 시스템은 컴포넌트간에 경게를 확실하게 유지하기 위해 비동기식 메시지 전달에 의존합니다.
728x90