나프다 컨퍼런스 후기, MS는 왜 Rx를 만들었을까
MS는 왜 Rx를 만들었을까 feat. RxJS - 네이버, 김훈
참으로 뒤늦게 올리는 컨퍼런스 후기이다. 강의 내용은 여기서 제공되고 있다. 발표는 궁극적으로는 Rx에 대한 소개이며, 이해를 돕고자 Rx가 만들어진 배경을 초반에 설명하고 있음.
Rx란
- Reactive Extensions의 약자
- Observable Sequence와 LINQ-style query 연산자를 사용
- 비동기와 이벤트 기반 프로그램을 조작하는 라이브러리
Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators.
Rx의 역사
- Rx의 정의를 보고 “이게 뭔지는 알겠는데 그래서 뭐?”라는 생각이 들었다고 함
- Rx가 만들어진 배경을 조사하여 Rx의 개념을 좀 더 명확히 하고자 함
- 결국 핵심은 비동기 프로그래밍
- Rx를 만든 에릭 마이어의 말을 통해 이를 유추
Of all the work I’ve done in my career so far, this is the most exciting. […] I know it’s a bold statement, but I really believe that the problem of asynchronous programming events has been solved.
- RxJS가 만들어진 것은 2010년 3월 17일
- 이 때까지는 콜백 지옥을 극복할 만한 마땅한 기술이 없었다고 한다
- Promises/A+가 처음 나온 게 2012년 12월 6일
=> 2016년에 와서야 Reactive를 접하고서 “이게 왜 그렇게까지 주목받는 걸까?”라고 생각하던 사람의 입장으로서 Rx의 탄생 배경이 이해가 됨
아래 내용은 참고.
어떤 개념을 정말로 이해하려면 그 개념이 최초로 언급된 당시의 전후 맥락을 재구성해 볼 필요가 있다. 이렇게 해야 개념의 정수가 그 모든 중간자를 거치고도 살아남았음을 확인할 수 있다.
- 프로그래머의 길, 멘토에게 묻다
Rx가 문제를 해결하는 방식
Rx의 탄생 배경이 비동기 프로그래밍이라고 했는데, 이제부터는 Rx가 어떻게 비동기 프로그래밍을 해결하는지 살펴봄
Reactive Programming
Reactive Programming은 말 그대로 반응하는 프로그래밍
pull vs push
- 반응한다는 것의 의미는 pull-scenario와 push-scenario의 차이로 설명 가능
- pull-scenario
- 프로그램이 외부 환경에 명령하여 원하는 결과를 획득
- 이 경우 프로그램이 직접 제어의 흐름을 통제
- push-scenario
- 환경이 프로그램 안으로 요청을 밀어넣음
- 외부에서 자극이 오면 그때 반응함
- pull-scenario
- Reactive Programming은 push-scenario
- 직접 외부에 필요한 것을 요청하는 대신, 외부로부터의 입력에 지속적이고 즉각적으로 반응함
Iterable vs Observable
event | Iterable (pull) | Observable (push) |
---|---|---|
retrieve data | T next() | onNext(T) |
discover error | throws Exception | onError(Exception) |
complete | !hasNext() | onCompleted() |
*표 출처: reactivex.io
- 우리가 익숙한 Iterable은 pull-scenario
- Reactive는 Observable을 통해 push-scenario를 달성함
- Observable은 Iterable가 제공하는 모든 기능을 지원함
- 데이터가 흐르는 방향이 다를 뿐!
LINQ
Reactive Programming이 데이터에 접근하는 방법(외부의 자극에 반응)이라고 한다면, LINQ는 데이터를 처리하는 방법에 관한 것
- Language Intergrated Query의 약자
- 데이터를 질의하는 코드를 SQL 쿼리처럼 표현할 수 있도록 해주는 연산자
- 코드를 보면 바로 이해됨
// 2가지 문법 스타일을 지원한다.
// 1. Query syntax:
IEnumerable<int> numQuery1 =
from num in numbers
where num % 2 == 0
orderby num
select num;
// 2. Method syntax:
IEnumerable<int> numQuery2 = numbers
.Where(num => num % 2 == 0)
.OrderBy(n => n);
*출처: MSDN LINQ
“Your Mouse is a Database”
에릭 마이어는 “Your Mouse is a Database”라고 했음
=> 비동기 처리를 데이터베이스에 질의 하듯 접근하는 것이 개인적으로 인상적이어서 짧게나마 기록함
참고한 링크
© 2020 codehumane ― Powered by Jekyll and Textlog theme