리액티브 시스템(Reactive System)이란?
✅ 리액티브 시스템
반응을 잘하는 시스템.
-> 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화.
리액티브 선언문으로 리액티브 시스템 이해하기
✅ 리액티브 선언문
리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징.
✅ 리액티브 설계 원칙
MEANS(수단)
리액티브 시스템은 비동기 메시지 기반의 통신(Message Driven)을 통해 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성을 보장한다.
FORM(형성)
리액티브 시스템은 다음과 같은 형태를 지닌다.
탄력성(Elastic): 시스템의 작업량이 변화하더라도 일정한 응답을 유지하는 것.
회복성(Resilient): 시스템에 장애가 발생하더라도 응답성을 유지하는 것.
VALUE(가치)
리액티브 시스템의 핵심 가치는 즉각적으로 응답 가능한 시스템(Responsive)을 구축하는 것.
-> 리액티브 시스템은 설계 원칙에 따라, 빠른 응답성을 바탕으로 유지보수와 확장이 용이한 시스템을 구축하는 데 활용할 수 있다.
리액티브 프로그래밍(Reactive Programming)이란?
✅ 리액티브 프로그래밍의 특징
In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.
- by wikipedia -
declarative programming
✅ 선언형 프로그래밍
우리가 흔히 사용하는 방식은 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍 방식이다.
선언형 프로그래밍 방식은 실행할 동작을 구체적으로 명시하지 않고, 이러이러한 동작을 하겠다는 목표만 선언한다.
data streams와 the propagation of change
✅ data stream
데이터 흐름, 데이터가 지속적으로 발생한다는 의미.
✅ the propagation of change
데이터가 발생할 때마다 이벤트를 발생시키면서 데이터를 계속적으로 전달하는 것을 의미.
코드로 보는 명령형 프로그래밍 vs 선언형 프로그래밍
명령형 프로그래밍
public class Example1_1 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = 0;
for(int number : numbers){
if(number > 6 && (number % 2 != 0)){
sum += number;
}
}
System.out.println("합계: " + sum);
}
}
어떤 작업을 처리하기 위해 실행할 동작을 코드에 구체적으로 명시한다.
선언형 프로그래밍
public class Example1_2 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 3, 21, 10, 8, 11);
int sum = numbers.stream()
.filter(number -> number > 6 && (number % 2 != 0))
.mapToInt(number -> number)
.sum();
System.out.println("합계: " + sum);
}
}
동작을 구체적으로 명시하지 않고 목표만 선언한다.
메서드 체인을 형성해서 한 문장으로 된 코드로 구성한다. (함수형 프로그래밍으로 구성된다)
리액티브 프로그래밍 코드 구성
✅ Publisher
입력으로 들어오는 데이터를 제공한다.
✅ Subscriber
Publisher로부터 전달받은 데이터를 사용한다.
✅ Data Source
Publisher 입력으로 들어오는 데이터. (Data Stream이라고도 표현한다)
✅ Operator
Publisher와 Subscriber 사이의 적절한 가공 처리를 담당한다. (데이터 필터링, 데이터 변환 등)
참고자료
https://www.reactivemanifesto.org
https://www.reactivemanifesto.org/ko/glossary
https://en.wikipedia.org/wiki/Reactive_programming
'book > 스프링으로 시작하는 리액티브 프로그래밍' 카테고리의 다른 글
[리액티브 프로그래밍] 마블 다이어그램(Marble Diagram) (0) | 2024.03.11 |
---|---|
[리액티브 프로그래밍] Reactor 개요 (0) | 2024.03.11 |
[리액티브 프로그래밍] 리액티브 프로그래밍을 위한 사전 지식 (0) | 2024.03.03 |
[리액티브 프로그래밍] Blocking I/O와 Non-Blocking I/O (2) | 2024.02.26 |
[리액티브 프로그래밍] 리액티브 스트림즈(Reactive Streams) (0) | 2024.02.19 |