Reactive Programming - 개요

this-is-spear·2023년 3월 18일
0

문서의 내용이 많아 분리해서 관리하고 있습니다. 전체 내용은 링크를 통해서 확인할 수 있습니다.

Reactive Programming 개요

리액터(Reactor)는 반응형 프로그래밍 패러다임의 구현체로, 다음과 같이 요약할 수 있다.

1. Reactive programming은 데이터 흐름을 쉽게 표현할 수 있다.

Reactive programming은 비동기로 동작해 데이터 스트림과 변화를 전달하며 데이터 흐름을 쉽게 표현한다.
Reactive programming 패러다임은 Observer pattern으로 확장된 Object oriented 프로그래밍으로 표현하기 도 한다.

데이터 스트림은 무엇일까?

데이터 스트림은 데이터 요소를 데이터 프로세서에 운반하여 지속적으로 공급하는 무한 컨베이어 벨트라고 표현할 수 있다.
정보를 전송할 때 사용되는 연속적인 흐름을 의미하는데, 데이터 스트림을 이용하면 이벤트나 변화를 실시간으로 처리할 수 있다. 데이터 스트림의 특성은 다음과 같다.

  • 연속성
  • 불완전성
  • 휘발성

2. Reative Streams와 Iterator는 유사하다.

Reactive programming의 동작은 Iterator 간 동작처럼 보여 reactive streams pattern을 익숙한 Iterator design pattern과 비교하는데, 주요 차이점은 Iterator는 pull-based이지만 reactive streams은 push-based이라는 것이다.

Ractive Streams는 Iterable에 의해 흐름은 제어되지만 동작은 개발자에 의해 제어된다. 즉, Iterable에 의해 흐름이 제어되는 데에도 불고하고 명령(imperatively) 프로그래밍 패턴이 시퀀스를 어떤 메서드를 추가할지는 개발자에게 달렸다는 의미이다.

3. Reative Streams와 Iterator는 다르다.

Reactive Streams은 Iterator와 마찬가지로 Publisher-Subscriber 한 쌍으로 동작하지만 내부 동작은 완전하게 다르다.

첫 번째 차이점은 Reactive Streams의 Publisher새로운 값을 생성했을 때 Subscriber에게 알리는데, Reactive Streams에서는 이러한 알리는 관점이 중요하다.

두 번째 차이점은 푸시된 값에 적용되는 연산들은 명령적(imperatively)으로 표현되지 않고 선언적(declaratively)으로 표현된다는 것이다.

선언형과 명령형의 차이

  • 선언형
    • 해야할 작업을 나열하는 방법(ex. SQL)
  • 명령형
    • 해야할 작업을 정의하는 방법 (ex. Java)

4. Reactive Streams는 예외와 완료 처리를 잘 한다.

앞서 확인했던 것처럼 값을 가공하고 전달하는 행위를 정말 잘한다. 또한 Reactive Streams는 오류나 완료 처리도 잘 다룬다. PublisheronNext를 호출하여 새 값을 Subscriber에 전달할 수 있지만 onError를 호출하여 오류를 표시하거나 onComplete를 호출하여 완료를 표시할 수도 있다.

받은 데이터의 끝을 알아야 다음 데이터를 받을 수 있는데, Reactive Streams는 완료 처리를 통해 흐름의 끝을 파악해 다른 작업으로 빠르게 진행할 수 있다.

profile
익숙함을 경계하자

0개의 댓글