리액티브 시스템과 리액티브 프로그래밍

김남주·2023년 10월 9일
post-thumbnail

Chapter 01 리액티브 시스템과 리액티브 프로그래밍

1.1. 리액티브 시스템(Reactive System)이란? 

리액티브 시스템은 반응형 시스템이라고도 불립니다.

즉, 다시말해서 클라이언트의 요청에 즉각적으로 응답합으로써 지연 시간을 최소화 한다고 볼 수 있습니다.

1.2. 리액티브 선언문으로 리액티브 시스템 이해하기 

리액티브 선언문 설계원칙
리액티브 선언문 설계원칙

리액티브 선언문은 크게 수평으로 2개의 점선과 수직으로 세 개의 점선으로 구성되어 있습니다.

  • Means

    • 주요 통신 수단으로 무엇을 사용할 것인지 표현한 것
    • 그림에 나와 있는 비동기 메시지 기반의 통신을 통해서 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성을 보장합니다.
  • Form

    • 메시지 기반 통신을 통해서 구성요소들이 어떻게 통신할 것인지 표현한 것
      • 탄력성
        • 시스템의 작업량이 변화하더라고 일정한 응답시간을 유지할 수 있는 것을 의미합니다.
      • 회복성
        • 회복성은 시스템에 장애가 발생하더라도 시스템이 계속해서 정상적으로 동작할 수 있는 것을 의미합니다.
  • Value

    • 비동기 메시지 기반 통신을 바탕으로 한 회복성과 예측 가능한 규모 확장 알고리즘을 통해 시스템의 처리량을 자동으로 확장하고 축소

1.3. 리액티브 프로그래밍(Reactive Programming)이란?

리액티브 프로그래밍은 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델입니다.

리액티브 시스템에서의 비동기 메시지 통신방식은 Non-Blocking I/O를 사용합니다.

Non-Blocking I/O는 동기화된 I/O와는 달리 I/O 작업이 완료되지 않더라도 다른 작업을 수행할 수 있는 방식입니다.

결론적으로 리액티브 프로그래밍은 비동기 메시지 기반 통신을 통해서 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델입니다.

1.4. 리액티브 프로그래밍의 특징

in computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.

1.4.1 declarative programming

declarative programming은 선언형 프로그래밍이라는 의미입니다.

즉, 실행할 동작을 구체적으로 구체적으로 명시하지 않고 이러이러한 동작을 하겠다는 목표만 선언하는 프로그래밍 방식입니다.

1.4.2 data streams와 the propagation of change

data streams는 데이터의 흐름, 즉 데이터가 지속적으로 발생한다는 것을 의미합니다.

the propagation of change는 변화의 전파라는 의미입니다.

즉, 데이터의 흐름이 지속적으로 발생하고 데이터의 흐름이 지속적으로 발생하면서 데이터의 변화가 전파된다는 것을 의미합니다.

1.5. 코드로 보는 명령형 프로그래밍 vs 선언형 프로그래밍

1.5.1 명령형 프로그래밍

public class ImperativeProgramming {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            sum += i;
        }
        System.out.println(sum);
    }
}

1.5.2 선언형 프로그래밍

public class DeclarativeProgramming {
    public static void main(String[] args) {
        int sum = IntStream.range(0, 10).sum();
        System.out.println(sum);
    }
}

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

우리가 리액티브 프로그래밍 코드는 크게 Publisher, Subscriber, Data Source, Operator로 구성됩니다.

1.6.1 Publisher

Publisher는 데이터를 발행하는 역할을 합니다.

1.6.2 Subscriber

Subscriber는 데이터를 구독하는 역할을 합니다.

데이터를 소비하는 관점에서 소비자라고도 합니다.

1.6.3 Data Source

Data Source는 데이터를 발행하는 원천적인 역할을 합니다.

Data Source를 리액티브 프로그래밍에서는 Date Stream 라고도 합니다.

1.6.4 Operator

Operator는 데이터를 가공하는 역할을 합니다.

리액티브 프로그래밍은 Operator로 데이터 필터링, 데이터 변환, 데이터 집계 등 다양한 데이터 가공을 할 수 있습니다.

정리

리액티브 시스템의 설계

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

리액티브 프로그래밍의 특징

  • 리액티브 프로그래밍은 선언형 프로그래밍 방식이다.
    그렇게 때문에 실행할 동작을 구체적으로 명시하지 않고 목표만 선언한다.
  • 데이터 소스의 변경이 있을 때마다 데이터를 전파한다.
  • 리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍의 코드 형태의 파라미터를 가진다.

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

  • Publisher는 입력으로 들어오는 데이터를 Subscriber에게 제공하는 역할을 한다.
  • Subscriber는 Publisher가 발행하는 데이터를 사용하는 역할을 한다.
  • Data Source는 Publisher의 입력으로 전달되는 데이터를 의미한다.
  • Operator는 Publisher가 발행하는 데이터를 가공하는 역할을 한다.
profile
T자형 개발자를 꿈꾸는 학생 개발자입니다

0개의 댓글