2022. 2. 11. 13:02ㆍJavascript
RxJS에서의 개념중 Cold observable / Hot observable을 알아보고자 한다.
일반적으로 옵저버블(Observable)은 구독(Subscribe) 하기 전 까지 동작하지 않는다.
이러한 방식을 Cold observable이라고 한다.
구독을 하지 않아도 동작하는 방식을 Hot observable이라고 한다.
RxJS의 Observable은 기본적으로 Cold observable의 특성을 지니고 있다.
이 두개의 개념에 대해 살펴보자.
Cold observable
구독되기 이전에는 데이터 스트림을 방출(emit) 하지 않으며, Cold observable을 옵저버가 구독하게 되면 처음부터 동작하기 시작한다.
옵저버블을 구독하는 옵저버는 하나 이상일 수 있다.
Cold observable을 구독하는 옵저버들은 구독하는 시점과 상관 없이 Cold observable이 방출하는 데이터 스트림을 처음부터 빠짐없이 모두 받을 수 있다.
(Cold observable은 구독하게 될 경우 처음부터 동작하기 때문이다.)
이것은 Cold observable을 구독하는 모든 옵저버는 자신만을 위해 독립적으로 실행하는 옵저버블을 갖게 되는 것이다.
이러한 특징을 유니캐스트(Unicast) 라고 한다.
사용하는 방법은 일반적으로 RxJS에서 옵저버블을 만들어 구독해주면 된다.
Hot observable
Cold observable과 반대로, 구독하지 않아도 이미 옵저버블은 동작을 하고 있는 것이다.
즉, 바로 데이터 스트림을 방출한다는 것이다.
따라서 동작하고 일정 시간이 지난 뒤 구독을 진행해 데이터를 가져오고 싶어도, 데이터를 처음부터 가져올 수는 없다.
Hot observable은 구독 시점부터 방출되는 데이터를 받는 것을 기본으로 한다.
RxJS의 옵저버블은 기본적으로 Cold observable 특성을 갖고 있는데, 이를 Hot observable로 만들기 위해서는 Publish, Share, Subject 를 이용하면 된다.
이중에 가장 많이 사용되는 오퍼레이터는 Subject 이다.
Subject는 옵저버블이면서, 옵저버인 특징을 갖고 있다.
따라서 옵저버블을 구독할 수도 있으며 옵저버처럼 next, complete 메소드를 호출할 수도 있다.
next 메소드를 호출할 수 있으니, Subject를 사용하면 데이터를 방출할 수도 있다.
이것은 Cold observable의 유니캐스트한 특성과는 달리 Hot observable을 구독하고 있는 모든 옵저버에게 부수 효과(side-effect)가 있다는 의미이다.
이러한 특징을 멀티캐스트(Multicast) 라고 한다.
'Javascript' 카테고리의 다른 글
[Javascript] RxJS (0) | 2022.01.16 |
---|---|
[Javascript] Webpack 왜 사용할까? (0) | 2022.01.12 |
[Javascript] Generator Function? yield? next? (0) | 2021.12.22 |
[Javascript] Build System (0) | 2021.12.12 |
[Javascript] 비동기 처리 방법 (0) | 2021.12.12 |