포스트

리액티브 프로그래밍

리액티브 프로그래밍

Spring WebFlux 를 학습 하기 전 리액티브 프로그래밍 에 리액티브 시스템을 학습이 필요 해 보인다.


🤔 Reactive System 이란?

리엑티브 시스템이란 ‘reactive’ 의 사전적 의미에 ‘반응을 하는’ 이라는 뜻 으로 어떤 이벤트나 상황이 발생했을 때, 반응을 해서 적절하게 행동 하는 것을 의미 한다.

간단하게 Reactive System 이란? 반응을 잘하는 시스템 이다.

그렇다면 ? 반응을 잘한다는 것은 클라이언트의 요청에 반응을 잘해 즉각적인 응답을 주고 , 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화 한다.


1. 리액티브 시스템의 특징

image.png

리엑티브 시스템의의 설계 원칙의 그림 으로 명확하게 설명이 가능하다.

  • Means (방법)
    • Means 는 리액티브 시스템에서 주요 통신 수단으로 무엇을 사용할 것인지를 표현 , 그림에 나와 있는 비동기 메세지 기반의 통신을 통해서 구성요소들 간을 보장합니다.
    • 구성 요소들 간 느슨한 결합 , 격리성, 위치 투명성 을 보장
  • Form (형태)
    • 메세지 기반 통신을 통해서 어떠한 형태를 지니는 시스템으로 형성 되는지 나타낸다.
    • ⭐ 비동기 메세지 통신 기반하에 탄력성과 유연성을 가지는 시스템 이어야 함을 나타낸다.
      • 탄력성 이란, 시스템의 작업량이 변화하더라도 일정한 응답을 유지하는 것을 의미. 즉, 시스템으로 유입되는 입력이 많든 적든 간에 시스템에서 요구하는 응답성을 일정하게 유지해야한다.
      • 유연성 이란 시스템에 장애가 발생하더라도 응답성을 유지하는 것을 의미, 유연성이 없다면 장애 발생 시 시스템이 응답하지 못하는 심각한 문제에 직면하기 때문에 이를 방지하기 위한 원칙 중 하나 이다.
  • Value(값)
    • 비동기 메세지 가반 통신을 바탕으로 한 유연성과 예측 가능한 규모 확장 알고리즘을 통해 시스템의 처리량을 자동으로 확장하고 축소화 하는 탄력성을 확보함으로써 즉각적으로 응답 가능한 시스템을 구축 할 수 있음을 의미한다.
    • ⭐리액티브 시스템의 핵심 가치를 보여 준다고 볼 수 있다.

리액티브 시스템의 설계

  • 비동기 메시지 기반 통신으로 동작해야한다.
  • 탄력적이고 유연성을 지녀야 한다.
  • 높은 응답성을 지녀야 한다.
  • 유지보수와 확장이 용이해야 한다.

리액티브 프로그래밍

리엑티브 프로그래밍은 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델 이다. 리액티브 시스템은 비동기 메세지 통신을 기반으로 한다. 라고 설명 된 것 처럼 리액티브 시스템에서의 비동기 메세지 통신은 Blocking I/O 방식이 아닌 Non-Bloacking I/O 방식이다.

  • 리액티브 프로그래밍의 특징
    • declarative programming
      • 선언형 프로그래밍 방식을 사용한다.
    • data streams 와 the propagaition of change
      • 데이터 흐름, 지속적으로 데이터가 발생 할 때 마다 전달 한다.
      • 데이터가 발생 할 때마다 이것을 변화하는 이벤트로 보고, 이 이벤트를 발생시키면서 데이터를 계속적으로 전달 하는 것을 의미한다.

리액티브 프로그래밍 코드 구성

리액티브 프로그래밍 코드는 크게 Publisher , Subscriber , Data Source, Operator 등 으로 구성 된다.

  1. Publisher : 발행인,발행자 데이터를 제공해 주는 역할을 한다.
  2. Subscriber : Publisher 가 데이터를 제공 한다면 제공한 데이터를 전달 받아 주는 주체 이다. 발행자의 반대 의미로 구독자라고 불린다.
  3. Data Source : Data Source 는 Publisher의 입력으로 들어오는 데이터를 의미
  4. Operator : Publisher 로 전달된 데이터가 순수하게 아무런 처리를 거치지 않고 그대로 전달 되는 경우는 거의 없다. 이때 가공처리가 이루어 지는데 그걸 담당 하는 것이 Operator 이다.

느낀점.

예전에 경험했던 비동기 메시지 처리나 채팅 기반 시스템 구현이 자연스럽게 떠올랐다. Pub/Sub 개념이 생각나며 연결해보니 정리되는 느낌이 들었다. 그런데 아직 개념적으로만 이해한 부분이 많아서 직접 코드를 작성해봐야 진짜 감이 잡힐 것 같았다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.