1. 리액티브 시스템과 리액티브 프로그래밍
1. 리액티브 시스템이란?
리액티브 시스템은 리액티브한 원리와 원칙을 적용하여 개발된 소프트웨어 시스템을 의미합니다.
쉽게 말하면 어떤 이벤트나 상황이 발생했을 때, 그에 따라 적절하게 반응을 잘 하는 시스템을 말합니다.
2. 리액티브 선언문으로 리액티브 시스템 이해하기
리액티브 선언문 : https://www.reactivemanifesto.org/ko
2.1 Means(방법)
리액티브 시스템에서 주요 통신 수단으로 무엇을 사용할 것인지 표현한 것입니다. 그림에 나와 있는 비동기 메세지 기반 통신을 통해서 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성을 보장하빈다.
2.2 Form(형성)
메세지 기반 통신을 통애서 어떠한 형태를 지니는 시스템으로 형성되는지를 나타냅니다. 그림에서는 리액티브 시스템이 비동기 메세지 통신 기반 하에 Elastic(탄력성)과 Resilient(회복성)을 가지는 시스템이어야 함을 보여줍니다.
2.2.1 Elastic(탄력성)
시스템의 작업량이 변화하더라도 일정한 응답을 유지하는 것을 의미합니다. 즉 시스템으로 유입되는 입력이 많든 적든 간에 시스템에서 요구하는 응답성을 일정하게 유지하는 것을 말합니다.
이렇게 일정한 응답성을 유지하기 위해서 입력을 처리하기 위한 시스템 자원을 그때 그때 적절하게 추가하거나 감소시켜서 작업량의 변화에 대응하는 것이라고 이해하면 됩니다.
2.2.2 Resilient(회복성)
시스템에 장애가 발생하더라도 응답성을 유지하는 것을 의미합니다. 회복성이 없다면 장애 발생 시 시스템이 응답하지 못하는 심각한 문제에 직면하기 때문에 이를 방지하기 위해서 회복성은 리액티브 시스템의 중요한 설계 원칙이라고 볼 수 있습니다.
이러한 회복성을 확보하기 위해서 리액티브 시스템의 구성요소들은 비동기 메세지 기반 통신을 통해 느슨한 결합과 격리성을 보장한다고 했습니다. 다르게 표현하자면, 시스템의 구성요소들이 독립적으로 분리되기 때문에 장애가 발생하더라도 전체 시스템은 여전히 응답 가능하고 장애가 발생한 부분만 복구하면 된다는 의미입니다.
2.3 Value(가치)
비동기 메세지 기반 통신을 바탕으로 한 회복성과 예측 가능한 규모 확장 알고리즘을 통해 시스템의 처리량을 자동으로 확장하고 축소하는 탄력성을 확보함으로써 즉각적으로 응답 가능한 시스템을 구축할 수 있음을 의미합니다.
3. 리액티브 프로그래밍이란?
리액티브 시스템을 구축하는데 필요한 프로그래밍 모델 즉, 리액티브 시스템 설계 원칙에 잘 부합하는 비동기 Non-Blocking 통신을 위한 프로그래밍 모델을 말합니다.
4. 리액티브 프로그래밍의 특징
리액티브 프로그래밍 위키 : https://en.wikipedia.org/wiki/Reactive_programming
4.1 선언형 프로그래밍
리액티브 프로그래밍은 선언형 프로그래밍 방식을 사용하며, 실행할 동작을 구체적으로 명시하지 않고 목표만 선언하여 프로그래밍 하는 방식을 말합니다.
4.2 Data stream 과 The propagation of change
Data stream 이라는 것은 데이터 흐름, 즉 데이터가 지속적으로 발생한다는 의미 이고, The propagation of change는 지속적으로 데이터가 발생할 때마다 이것을 변화하는 이벤트로 보고, 이 이벤트를 발생시키면서 데이터를 계속적으로 전달하는것을 의미합니다.
5. 리액티브 프로그래밍 코드 구성
5.1 Publisher
입력으로 들어오는 데이터를 제공하는 역할을 하며, 발행인, 발행자 정도로 해석할 수 있습니다.
5.2 Subscriber
Publisher로 부터 전달받은 데이터를 사용하는 역할을 하며, 구독자 혹은 소비자로 불립니다.
5.3 Data Source
Data Source는 Publisher의 입력으로 들어오는 데이터를 대표하는 용어 입니다.
5.4 Operator
Publisher와 Subscriber 사이에서 적절한 가공 처리가 이루어지는데, 이 가공처리를 담당하는것이 Operator 입니다.
요약
리액티브 시스템의 설계
- 비동기 메세지 기반 통신으로 동작해야 한다
- 탄력적이고 회복성을 지녀야 한다.
- 높은 응답성을 지녀야 한다.
- 유지보수와 확장성이 용이해야 한다.
리액티브 프로그래밍의 특징
- 리액티브 프로그래밍은 선언형 프로그래밍 방식이다. 그렇기 때문에 실행할 동작을 구체적으로 명시하지 않고 목표만 선언한다.
- 데이터 소스의 변경이 있을 때마다 데이터를 전파한다.
- 리액티브 프로그래밍 코드는 코드의 간결함과 가독성에 유리한 메서드 체인의 형태로 표현된다.
- 리액티브 프로그래밍 코드에서 파라미터를 가지는 메서드는 함수형 프로그래밍 방식의 코드 형태의 파라미터를 가진다.
리액티브 프로그래밍 코드의 구성요소
- Publisher 는 입력으로 들어오는 데이터를 Subscriber에 제공하는 역할을 한다.
- Subscriber는 Publisher로부터 전달받은 데이터를 사용하는 역할을 한다.
- Datga Source는 Publisher의 입력으로 전달되는 데이터를 의미한다.
- Operator는 Publisher와 Subscriber 중간에서 데이터를 가고하는 역할을 한다.