2.3.4 전달하거나 전달하지 않거나
이벤트 이미터는 자바스크립트 언어만큼 오래되었습니다. 하지만 그동안 해당 인터페이스에는 이렇다 할 개선점이 없었습니다. 이 점은 자바스크립트 ES6 명세의 일부였고 작성 당시 많은 브라우저에서 이미 지원되던 Promise
, 이터레이터, 제너레이터와는 대조됩니다. 이것이 바로 RxJS가 중요한 이유의 하나이며 RxJS 덕분에 자바스크립트의 이벤트 시스템이 많이 개선되었습니다.
이벤트 이미터는 일련의 이벤트를 비동기로 파싱하는데, 이로 인해 이터레이터와 매우 유사해지므로 스트림이라 할 수 있습니다. 하지만 데이터를 요청하든 전송하든 클라이언트가 데이터를 소비하는 방식에 차이가 있습니다. RxJS 관련 문서 대부분에서 옵저버블을 푸시 기반(push-based) 컬렉션을 표현하는 객체로 정의하므로 이를 이해하는 것이 매우 중요합니다. 그림 2-12에서는 풀(pull) 메커니즘과 푸시 메커니즘의 주요한 차이점을 강조해서 표시했습니다.
▲ 그림 2-12 소비자의 위치와 데이터의 방향에 주목하라. 풀 기반에서 소비자는 데이터를 요청하지만(이터레이터 작동 방식), 푸시 기반에서는 요청하지 않고 소스에서 소비자로 데이터를 전송한다(옵저버블 작동 방식).