본문 바로가기
소프트웨어 개발/소프트웨어 설계 패턴

리액티브 프로그래밍이란?

by 인생은즐겁게 2022. 11. 30.
반응형

1. 리액티브 프로그래밍이란?

리액티브 프로그래밍은 정적 데이터에 대한 실시간 업데이트를 처리하기 위해 비동기 프로그래밍 처리 기법에
의존하는 프로그래밍 패러다임을 말합니다. 리엑티브 프로그래밍에서 필요한 요소는 3가지가 있습니다.
데이터 스트림과 변경을 전파해주는 옵저버블(Observable), 옵저버블이 전파를 보내 수신 받는 옵저버(Observers), 비동기 프로그래밍을 관리하기 위한 스케쥴러 등이 있습니다. 


- 옵저버블(Observable) :

 => 옵저버블은 기본적으로 데이터를 주기적으로 또는 구성에 따라 데이터흐름과 변경을 전파 합니다.

옵저버(Observers) :

 =>  옵저버는 데이터를 수신하기 위해서는 옵저버블에 등록을 합니다.  Rx(ReactiveX )에서는 subscribe 메소드를 통하여 옵저버 개체를 등록을 합니다.
  
- 스케쥴러 :  

 => 스케쥴러는 옵저버블과 관찰자에게 실행해야 하는 스레드를 알려주는 구성 요소중 하나입니다. 비동기 프로그래밍을 원활하게 관리하기 위해서 동시성 관리를 처리하고 있습니다.

 

※ ReactiveX는 리액티브 프로그래밍을 하기 위한 일종의 라이브러리입니다. 현재 프론트계열, 크로스플랫폼 계열, 백앤드 계열의  프로그래밍 언어를 지원하고 있습니다. ( https://reactivex.io/ )

 

2. ReactiveX을 활용한 리액티브 프로그래밍 

 

- Subscribe : 

 => 이 연산자는 옵저버를 옵저버블에 연결하는 연산자입니다. 옵저버가 옵저버블이 전파하는 항목을  관찰하거나 옵저버블에서 오류 또는 완료된 알림을 받으려면 먼저 이 연산자를 사용하여 옵저버블에 등록해야 합니다.

 

- onNext :

 => 옵저버블이 데이터를 내보낼 때마다 이 메소드를 호출합니다.

 

- onError :

 => 비동기 프로그래밍을 좀 더 탄력적으로 운영하기 위해서는 데이터 생성에 실패 했거나 오류가 발생 했을때 대처 하는 메소드입니다.

 

- onCompleted :

 => onNext에서 오류가 발생하지 않을 경우 이 메소드를 마지막으로 호출 합니다.

 

자세한 사항을 알고 싶으시면 아래 링크를 참고 바랍니다.

https://reactivex.io/documentation/observable.html

 

 

3. 콜드 옵저버블 개념과 핫 옵저버블 개념

 

데이터가 옵저버블 자체 내부에 의해 생성이 되면 콜드 옵저버블(Cold Observable)이라 부르며, 데이터가 외부에 의해서 발생되면 핫 옵저버블(Hot Observable)이라고 합니다.

 

콜드 옵저버블이 내부에 의해 생성된다는 의미는 데이터베이스나 웹 요청 url에서 읽는 방식을 말하며, 핫 옵저버블의 외부에서 발생된다는 의미는 이벤트 행위에 발생되는 방식을 말합니다. 그리고 핫 옵저버블은 여러 옵저버 간에 데이터를 공유할 수 있습니다. 이러한 동작을 멀티캐스팅이라고 합니다. 이벤트 발생 방식이기 때문에 옵저버블에 옵저버가 등록이 전혀 없어도 데이터는 생성됩니다. 하지만 등록되어 있는 옵저버가 없기 때문에 데이터는 손실이 됩니다.

 

[콜드 옵저버블]

[핫 옵저버블]

 

4. 사용 사례

리액티브 프로그래밍은 크로스플랫폼 앱, 웹프론트, 서버사이드 백앤드 등 여러 분야에서 활용할 수 있습니다.

배치 프로그램 작동시 응용 프로그램의 변경 사항을 전달을 받고 배치 프로그램에서 이를 반영하여 활용할 수도 있고,

모바일 어플리케이션이나 데스크탑 애플리케션에서도 반응적인 ui를 구성하기 위해서 활용할 수 있습니다.

좀 더 자세히 공부를 원하시면 아래 링크를 참고 바랍니다.

 

 

https://en.wikipedia.org/wiki/Reactor_pattern

https://github.com/conal/talk-2015-essence-and-origins-of-frp

https://reactivex.io/documentation/observable.html

반응형

댓글