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

Posted by HULIA(휴리아)
2019. 8. 24. 22:46 뒷이야기들/스터디히스토리강의

코틀린 리액티브 프로그래밍 책(2019)에서 참고

 

 

리액티브 프로그래밍은 데이터 스트림과 변경 사항 전파를 중심으로 하는 비동기 프로그래밍 패러다임

간단히 말하면, 데이터와 데이터 스트림에 영향을 미치는 모든 변경사항을 관련된 모든 당사자들, 예를 들면 최종 사용자나 컴포넌트, 하위 구성요소, 또는 어떻게든 연결돼 있는 다른 프로그램 등에게 전파하는 프로그램을 리액티브 프로그램이라고 한다

 

예를 들어 엑셀에서 한셀에 식이 있고 다른셀에는 식에서 쓰는 값이 있을때 값을 바꾸면 식의 결과도 자동으로 바뀌는데 이것을 리액티브라고 한다

 

함수형 리액티브 프로그래밍을 적용해야 하는 이유

1)콜백 지옥의 제거

콜백은 미리 정의된 이벤트가 발생할 때 호출되는 메서드다. 인터페이스를 콜백메서드와 함께 전달하는 매커니즘을 콜백 매커니즘이라고 부른다.

2)오류 처리를 위한 표준 매커니즘

3)간결해진 스레드 사용

스레드를 코틀린에서 자바에 비해 더 쉽게 사용할 수 있지만, 여전히 복잡하다. 리액티브 프로그래밍을 통하면 한층 더 쉽게 사용할 수 있다

4)간단한 비동기 연산

스레드와 비동기 작업은 서로 연관돼 있다. 스레드 사용이 쉬워질수록 비동기 연산도 쉬워진다.

5)전체를 위한 하나, 모든 작업에 대해 동일한 API

리액티브 프로그래밍, 특히 RxKotlin은 간단하고 직관적인 API를 제공하는데 네트워크 호출, 데이터베이스 접근, 계산 또는 UI 연산 등 어느 곳에서나 어떤 것을 대상으로든 사용할 수 있다

6)함수형 접근

리액티브 프로그래밍을 사용하면 함수형 접근 방법을 취해서 가독성이 좋은 선언적 코드를 작성할 수 있다

7)유지 보수 가능하고 테스트 가능한 코드

가장 중요한 점으로 리액티브 프로그래밍을 올바르게 수행하면 프로그램의 유지보수와 테스트가 한층 더 쉬워진다

 

리액티브 선언(http://www.reactivemanifesto.org)은 네가지 리액티브 원리를 정의해 놓은 문서

 

The Reactive Manifesto

Responsive: The system responds in a timely manner if at all possible. Responsiveness is the cornerstone of usability and utility, but more than that, responsiveness means that problems may be detected quickly and dealt with effectively. Responsive systems

www.reactivemanifesto.org

리액티브 선언의 4원칙

1)응답성(Responsive)

시스템은 증각 응답해야 한다. 응답성 있는 시스템은 신속하고 일관성 있는 응답시간을 유지해 일관된 서비스 푸짐을 제공한다

2)탄력성(Resilent)

시스템에 장애가 발생하더라도 응답성을 유지해야 한다. 탄력성은 복제(replication), 봉쇄(containement), 격리(isolation), 위임(delegation)에 의해서 이루어진다. 장애는 각 컴포넌트 내부로 억제돼 각 컴포넌트들을 서로 격리시키는데, 그래서 하나의 컴포넌트에 장애가 발생하더라도 전체 시스템에 영향을 끼치지 못하게 된다

3)유연성(Elastic)

리액티브 시스템은 작업량이 변하더라도 그 변화에 대응하고 응답성을 유지해야 한다

리액티브 시스템은 상용 하드웨어 및 소프트웨어 플랫폼에서 효율적인 비용으로 유연성을 확보한다

4)메시지 기반(Message Driven)

탄력성의 원칙을 지키려면 리액티브 시스템은 비동기적인 메시지 전달에 의존해 컴포넌트들 간의 경계를 형성해야 한다

 

리액티브 스트림 표준 사양

http://www.reactive-streams.org 

 

http://www.reactive-streams.org

Reactive Streams Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols. JDK9 java

www.reactive-streams.org

 

코틀린을 위한 리액티브 프레임워크

리액티브 프로그램을 작성하려면 라이브러리 또는 특정 프로그래밍 언어가 필요하다. 코틀린은 자바, 안드로이드와 완벽하게 상호 운용되며 멀티 플랫폼 애플리케이션을 위한 강력하고 유연한 프로그래밍 언어이기 때문에 코틀린을 리액티브 언어라고 볼 수는 없다(애초에 리액티브 언어라고 하는 프로그래밍 언어를 들어본 적이 없다)

 

그러나 도움이 되는 라이브러리가 있다

-RxKotlin

-Reactor-Kotilin

-Redux-Kotlin

-FunKTionale

-RxJava와 그외의 자바 리액티브 프레임워크도 코틀린과 함께 사용할 수도 있다(코틀린은 자바와 100% 상호 운용 가능하기 때문)

 

 

'뒷이야기들 > 스터디히스토리강의' 카테고리의 다른 글

암호화관련 조사  (0) 2021.01.26
코틀린이란  (0) 2019.08.24
마크다운 정의 장단점 사용법 정리  (0) 2019.04.28
react native 리액트 네이티브 스터디  (0) 2018.04.15
데브옵스(DEVOPS)란  (0) 2018.04.03