[Web] 리액티브 프로그래밍(Reactive Programming)이란?

728x90

절차 지향적 프로그래밍, 객체 지향형 프로그래밍, 함수형 프로그래밍 등 다양한 프로그래밍 기법중 하나이다.

기존의 명령형 프로그램 방식(Pull)

  • 컴퓨터 하드웨어를 대상으로 프로그래머가 작성한 코드가 정해진 절차에 따라 순서대로 실행

리액티브 프로그래밍(Push)

  • 데이터의 흐름을 미리 정의, 데이터의 값이 변경되었을 때, 관련 함수나 수식 업데이트 됨
즉, 프로그래머가 기존의 명령형 프로그래밍 방식과 같이 어떤 기능을 직접적으로 실행하는 것이 아닌 프로그램 속 시스템에 특정 이벤트 발생하면, 이를 효율적으로 처리하는 것이라고 할 수 있다. 이를 옵저버 패턴이라고 한다. 

다시말해, 리액티브 프로그래밍은 데이터 흐름과 변화의 전달에 관한 프로그래밍 패러다임이다. 리액티브 프로그래밍은 주변환경과 끊임없이 상호 작용하며 프로그램이 주도 하는 것이 아닌, 환경이 변화되면 이벤트를 받아 동작하는 과정이다.


Java에서의 리액티브 프로그래밍

RxJava를 사용한다면 객체지향 프로그래밍과 리액티브 프로그래밍을 동시에 포함하여 개발할 수 있다는 장점이 있습니다.

일반적으로 콜백이나 옵저버 패턴을 넘어서 진정한 RxJava 기반의 리액티브 프로그래밍을 수행하려면

함수형 프로그래밍 패러다임을 추가해야 합니다.

 

그 이유는 콜백이나 옵서버 패턴과 같은 경우 단일 스레드 환경에서 사용 시 문제가 되지 않지만 멀티 스레드 환경에서는 데드락과 동기화 등 문제들이 발생 합니다. 그러나 함수형 프로그래밍은 이런 부수효과가 없습니다.

 

함수형 프로그래밍은 위와 같은 부수 효과를 없애기 위해 순수 함수를 지향하고 있습니다. 따라서 단일 스레드 뿐만 아닌 멀티 스레드 환경에서도 안전하기에 자바 언어로 리엑티브 프로그래밍을 하기 위해서는 함수형 프로그래밍의 지원이 빠져서는 절대 안 됩니다.

RxJava가 등장하게 된 배경

RxJava는 2013년 2월 넷플릭스에서 처음으로 소개되었습니다. 그 당시 넷플릭스는 REST 기반의 서비스 API 호출 횟수와 서비스의 전반적인 성능을 개선하기 위해 RxJava를 만들었으며 아래와 같은 핵심적인 이유 3가지를 발표하며 RxJava를 출시했습니다.

 

더보기

1. 동시성을 적극적으로 끌어안을 필요가 있다. 

2. 자바 Future를 조합하기 어렵다는 점을 해결해야 한다.

3. 콜백 방식의 문제점을 개선해야 한다.

728x90

댓글

Designed by JB FACTORY