[서버/웹] Reactive(반응형) 프로그래밍이란 무엇일까?

프로그래밍/서버2020. 12. 11. 11:29

Reactive 프로그래밍은 함수형 프로그래밍와 더불어 요즘 아주 핫한 것 같습니다.

 

우리가 사용하는 언어를 패러다임에 의해 분류하면 대략 아래와 같습니다. 아래에 표기하지 않은 다른 방식도 있겠지만 간단하게 아래만 보겠습니다.

 

명령형(Impterative) ┌ 절차형

│                          └ 객체지향형

└선언형(Declarative) ┌ 함수형

                            └ Reactive

 

과거에는 절차형 프로그래밍이 유행했습니다. 우리가 생각할 수 있는 가장 간단한 프로그래밍 방식입니다. 단순히 한 줄 한 줄 실행되는 c언어를 생각하면 될 것 같습니다.

 

그러다가 객체지향이 인기를 끌면서 한동안은 Java와 같은 객체지향 프로그래밍이 대세였습니다. 장단점이 있겠지만 객체지향 프로그래밍은 말 그대로.. 객체 개념을 이용해서 표현을 하는데 상속, 다형성, 오버라이딩 등.. 여러 관련 무기를 사용할 수 있습니다.

 

그리고 최근은 함수형 프로그래밍과 Reactive 프로그래밍이 대세가 된 것 같습니다. 함수형 프로그래밍에 대해서는 아래의 글에서 간단하게 이야기했습니다.

 

함수형 프로그래밍에 대해[링크]

 

그렇다면 Reactive 프로그래밍이란 무엇일까요?

사전에서 Reactive의 뜻을 찾아보면 '반응을 하는' 이라는 뜻을 가지고 있습니다. 한글로 번역하면 반응을 하는 프로그래밍 정도 되겠네요.

 

Reactive 프로그래밍과 반대되는 절차형 프로그래밍과 비교해서 보겠습니다. 

int x=3;
int y=4;
int z=x+y; //z == 7

위와 같은 상황에서.. 위의 코드가 실행된 이후 x나 y의 값이 바뀌어도 z의 값은 변경되지 않습니다. 

 

이와 달리 Reactive 프로그래밍 방식은 엑셀을 예로 들 수 있습니다.

위와 같이 간단하게 작성된 값이 있을 때 x의 값이 바뀌면 어떻게 될까요?

바로 자동으로 반응을 해서 z의 값이 바뀝니다. 말 그대로 Reactive 프로그래밍이죠.

Reactive 프로그래밍은 관찰 가능한 Component를 만들고, 이것의 변화를 감지(listen, observe)하여 변화가 일어날 때마다 처리(consume)할 수 있게 합니다.

 

이를 간단하게 Reactive 프로그래밍(RX Java)로 표현하면 아래와 같이 표현할 수 있습니다.

int y=4;
Observable.just(3, 30)
    .subscribe(x -> System.out.println("z = " + (x+y)));

Reactive 프로그래밍에선 데이터의 변화를 데이터의 흐름(Stream)으로 생각하고 처리합니다. 저는 간단하게 x값의 변화를 Stream처럼 생각하고 3, 30의 값 변화를 가지도록 줬습니다. 이 값이 변할 떄마다 subscribe에 등록한 것이 호출됩니다. 람다식을 사용하여 좀 더 간결하게 표현이 되는데 값이 바뀔 때마다 x+y 결과를 간단하게 로그로 보여주게 만들었습니다.

 

그렇다면 RxJava나 RxAndroid를 왜 사용하는 것일까요?

영어긴 하지만.. 아래의 포스팅에 잘 정리되어 있습니다. ㅎㅎ

한 번 보시길 추천드립니다.

 

medium.com/@lpereira/why-should-we-use-rxjava-on-android-c9066087c56c#:~:text=Jan%2013%2C%202016%C2%B74%20min,write%20clean%20and%20simpler%20code.

 

Why should we use RxJava on Android

Reactive Extensions (Rx) are a set of interfaces and methods which provide a way to developers solve problems rapidly, simply to maintain…

medium.com

 

와.. 공식 홈페이지의 튜토리얼도 좋으니 참고하세요.

 

www.vogella.com/tutorials/RxJava/article.html

 

Using RxJava 2 - Tutorial

When working with observables doing async calls on every subscription on an observable is often not necessary. It likely happens that observables are passed around in the application, without the need to do an such an expensive call all the time a subscrip

www.vogella.com

 

아래의 글도 좋아요!

taes-k.github.io/2019/05/21/about-spring-reactive/

 

Spring5 리액티브 (Web flux)

1.5 Spring5 Reactive 이번챕터에서 다룰 Spring Reactive는 제가 실무에서는 다루어보지 못한 기술입니다. 하지만 Spring5가 나오면서 가장 열정적으로 소개하고있는 기술이기에 정리를 해보려고 합니다. S

taes-k.github.io

아래에 발췌 내용이 있으나 전체 내용을 보시길 권장드립니다.

Reactive 프로그래밍의 목적
그렇다면 리액티브 프로그래밍은 어떤 목적에서 생겨났을까요? 서버에서의 리액티브 프로그래밍의 탄생은 리소스의 효율적 사용을 위함에 있었습니다. 리액트 이전에는 멀티쓰레드로써 병렬처리를 했지만, 쓰레드의 확장만으로는 CPU와 메모리의 제한이 있기에 비동기와 논블로킹의 새로운 프로그래밍 모델이 제안되었습니다.

논블로킹은 일반적인 쓰레드를 통한 비동기 작업과는 다르게, 쓰레드를 점유하지 않고 작업을 수행하여 하나의 쓰레드 내에서 동시에 많은 작업을 수행 할 수 있습니다. 이와 같이 작업을 하는데 있어서 너무 많은 트래픽이 몰릴경우 문제가 발생 하거나 성능이 제대로 나오지 않을수 있기에 Back-pressure (배압, 역압)을 통해 요청의 갯수를 제한하여 ‘고가용성’을 보장해 줍니다.
  
좋은 성능을 보인다기 보다는 ‘고가용성’의 단어를 쓴 이유는 non-blocking을 통해 애플리케이션의 실행속도의 퍼포먼스가 좋아진다는 아니기 때문입니다. 오히려 속도적인 성능은 더 나빠질 수도 있습니다. 다만, 작은 고정된 수의 스레드와 적은 메모리로 최대한의 효율을 내면서 확장 할수 있다는 의미입니다.

 

*콜백과 reactive 차이

stackoverflow.com/questions/25098066/what-is-callback-hell-and-how-and-why-does-rx-solve-it

 

What is "callback hell" and how and why does RX solve it?

Can someone give a clear definition together with a simple example that explains what is a "callback hell" for someone who does not know JavaScript and node.js ? When (in what kind of settings) do...

stackoverflow.com

 

참고

www.raywenderlich.com/2071847-reactive-programming-with-rxandroid-in-kotlin-an-introduction

 

Reactive Programming with RxAndroid in Kotlin: An Introduction

Learn about how Reactive programming is a whole new paradigm using RxJava and RxAndroid in Android with Kotlin.

www.raywenderlich.com

12bme.tistory.com/571?category=682904

 

[RxJava] RxJava 프로그래밍(2) - 리액티브 연산자

ReactiveX는 다양한 연산자 함수가 존재한다. 이 연산자들은 버전이 높아지면서 계속 늘어나고 있다. RxJava의 필수 연산자들의 개념을 알면 나머지는 필수 연산자에서 파생된 연산자이므로 이해할

12bme.tistory.com

github.com/ReactiveX/RxJava/wiki/Creating-Observables

 

ReactiveX/RxJava

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. - ReactiveX/RxJava

github.com

 

작성자

Posted by 드리머즈

관련 글

댓글 영역