파비의 매일매일 공부기록

파이썬 동시성 프로그래밍 - #10 리액트 프로그래밍 본문

Study/Python

파이썬 동시성 프로그래밍 - #10 리액트 프로그래밍

fabichoi 2021. 8. 17. 23:30

이번장은 리액트 프로그래밍에 대한 내용인데, 리액트 프로그래밍은 순수하게 데이터 중심이다.

새로운 데이터를 받을 때마다 이벤트로 간주한다. 어찌 보면 이벤트 기반 프로그래밍의 한 갈래라고 볼 수 있다.

 

리액트 프로그래밍의 기본 : 기존의 관습적인 스타일에서 벗어나 이벤트 흐름으로서의 데이터 표현에 집중할 수 있게 함. 프로그램은 이러한 연속적 데이터 흐름을 받고 이벤트를 취한다. 이는 시스템 흐름을 간단하고 빠르게 해 기존의 아키텍처 및 스타일에 비해 다루기 쉽고 유지 관리에도 좋다. 시스템 상의 다양한 함수를 이벤트에 넣는 복잡한 부분을 제거하고 데이터 검색 및 실시간 처리 작업을 효과적으로 가능하게 한다. 그러므로 통계 데이터 및 센서 데이터를 사용하는 데이터 사이언티스트에게 각광받고 있으며 분석과 활용에 많은 도움을 준다.

- 진정한 리액트 프로그래밍  : 비보존형 트랜잭션이 중요. 프로그램 실행에 영향을 주는 내부 문제점을 줄여줌. 

 

ReactiveX(RX) : 2010년 넷플릭스가 RxJava를 사용하면서 커지고 널리 알려짐.

- RxJS, RxPY, RxSwift와 같이 다양항 프로그래밍 언어에 맞춘 리액트 버전이 존재.

- RxPY는 관찰 가능 컬렉션과 LINQ 스타일 쿼리 오퍼레이터를 사용하는 비동기 및 이벤트 기반 프로그래밍 구성 라이브러리다. 관찰자 및 관찰 가능 속성을 다루는 앱을 작성할 경우 활용됨.

- 관찰 가능 속성 : 현재 등록된 모든 관찰자에게 이벤트 전달. 관찰자가 풀 메커니즘과 반대로 새로운 이벤트 구독자를 알고자 푸시 메커니즘을 활용한다. 책에 관찰자 생성에 대한 예제 및 설명이 소개된다.

- 람다 함수 : 비동기 함수를 생성하게 해주는 함수. 모든 클래스가 불필요한 상황에서 활용 가능.

- 오퍼레이터와 연결 : 오퍼레이터는 이미션과 구독자 사이에서 동작. 구독자로부터 흡수된 포맷으로 출력된 원 데이터를 변환. RxPY는 130개의 오퍼레이터를 바탕으로 새로운 관찰 가능 속성을 얻고, 이러한 오퍼레이터를 연결해 강력하게 만들 수 있음. Obserable에서 연산하는 대부분의 오퍼레이터는 구독되는 Observable을 반환하게 된다. 이는 바람직한 상황을 구성하고자 여러 오퍼레이터를 연결하기 때문이다.

- 다양한 오퍼레이터 : 관찰 가능 속성 생성하기/변환하기/필터링 하기/에러 다루기에 대한 설명이 소개된다.

 = 생성하기 : Create, Form, Interval

 = 변환하기 : Buffer, FlatMap, Map

 = 필터링 하기 : Distinct, Take, ElementAt

 = 에러 다루기 : Catch, Retry

- 핫 및 콜드 관찰 가능 속성 : 핫 속성은 구독자와 관계없이 알림을 발행. 콜드 속성은 구독자가 내부에서 응답할 경우 내보냄.

- 이벤트 내보내기 : 일반적인 이벤트 및 데이터 모두와 작업하는 복합 관찰 가능 객체 생성 가능.

- 멀티캐스팅 : 여러 구독자가 하나의 관찰 가능 객체를 구독하는 경우에 필요. 모든 구독자가 받는 이벤트와 관련해 차이가 생길 수 있음. 하지만 멀티캐스팅을 사용하면 효과적으로 이러한 차이를 없애고 구독자의 개수와 상관없이 정상적으로 이벤트를 받을 수 있음.

- 관찰 가능 속성 연결하기 : 다른 시간에 데이터를 전송하는 2개의 관찰 가능 속성이 필요할 수 있음. 이런 상황에서 해당 관찰 가능 속성을 연결해 효과적으로 하나의 관찰 가능 속성으로 하여 구독자가 순차적으로 구독할 수 있게 함. switch(), zip()에 대한 예제를 소개한다.

- 동시성 : subscribe_on(), observe_on() 두 오퍼레이터를 바탕으로 지원하고 있다. 두 오퍼레이터 모두 재사용 가능한 작업자 스레드 풀을 생성하고자 ThreadPoolScheduler 스케줄러를 제공한다.

 

PyFunctional : 리액트 프로그램과 비슷한 개념을 따름. 함수형 및 리액트 프로그래밍은 에러나 추가적인 상황을 저장할 필요 없는 순수한 함수를 활용하는 경향이 있음. 프로그램에서 일어나는 부분과 상관없이 동일한 결과를 반환하는 함수를 정의. 데이터 흐름은 대부분 비슷하나 다뤄지는 데이터가 다를 수 있음. RxPY는 시스템에서 다뤄지는 데이터 및 이후의 이벤트에 초점이 있으나 PyFunctional은 함수형 프로그래밍 개념을 사용해 데이터의 변환을 주로 사용한다.

- 스트림 : 조작 및 활용하고자 하는 데이터를 읽어 들임

- 변환 : 스트림 된 데이터를 변환할 수 있음

- 액션 : 변환된 시리즈를 구체적인 값으로 계산

- 필터링 리스트 : 스트림은 원하는 결과 형태로 변환하는 데 사용 가능.

- SQLite3 읽기 및 쓰기 : 읽고 쓰는 간단한 예제를 소개. 쿼리를 통해 데이터베이스를 다룰 수 있다.

- 압축된 파일 : gzip, lzma/xz, bz2 같은 압축 파일을 쉽게 다룰 수 있음. 자동으로 파일이 압축됐는지 확인하고 일반적인 파일과 동일하게 작업 가능. 압축 데이터 작업에는 연산이 필요하기에 프로그램 속도에 영향을 미침. (저자는 경험상 그리 크지 않다고 함)

- 병렬 실행 : seq를 psqe로 변경이 필요하며 map/select, filter/filter_not/where, flat_map 등이 병렬 실행을 지원하는 오퍼레이터인지 참고해야 한다.

 

리액트라고 해서 흔히 듣는 React인 줄 알았는데, 조금 다른 부분이었다.

(구글링을 해보니 React에 RxJS를 붙여서 쓸 수 있긴 하다.)

 

프로그래밍이 좀 더 쉬워지는 걸까.

사람이 생각하는 데로 로직을 짜는데 도움이 되는(혹은 실제 현상을 그대로 모델링하는데 도움이 되는) 기술들인 것 같다.

반응형
Comments