더북(TheBook)

2.3.4 전달하거나 전달하지 않거나

이벤트 이미터는 자바스크립트 언어만큼 오래되었습니다. 하지만 그동안 해당 인터페이스에는 이렇다 할 개선점이 없었습니다. 이 점은 자바스크립트 ES6 명세의 일부였고 작성 당시 많은 브라우저에서 이미 지원되던 Promise, 이터레이터, 제너레이터와는 대조됩니다. 이것이 바로 RxJS가 중요한 이유의 하나이며 RxJS 덕분에 자바스크립트의 이벤트 시스템이 많이 개선되었습니다.

이벤트 이미터는 일련의 이벤트를 비동기로 파싱하는데, 이로 인해 이터레이터와 매우 유사해지므로 스트림이라 할 수 있습니다. 하지만 데이터를 요청하든 전송하든 클라이언트가 데이터를 소비하는 방식에 차이가 있습니다. RxJS 관련 문서 대부분에서 옵저버블을 푸시 기반(push-based) 컬렉션을 표현하는 객체로 정의하므로 이를 이해하는 것이 매우 중요합니다. 그림 2-12에서는 풀(pull) 메커니즘과 푸시 메커니즘의 주요한 차이점을 강조해서 표시했습니다.

▲ 그림 2-12 소비자의 위치와 데이터의 방향에 주목하라. 풀 기반에서 소비자는 데이터를 요청하지만(이터레이터 작동 방식), 푸시 기반에서는 요청하지 않고 소스에서 소비자로 데이터를 전송한다(옵저버블 작동 방식).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.