인프런 커뮤니티 질문&답변

황진성님의 프로필 이미지
황진성

작성한 질문수

Kevin의 알기 쉬운 RxJava 1부

ReactiveX의 Observer Pattern에 대한 생각 공유

작성

·

307

4

ReactiveX → Observer Pattern?

reactivex.io 홈페이지에 보면 다음과 같은 말이 있습니다.

"ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming."

여기서 Observer Pattern이라는 말을 보고 이런 저런 생각이 들었는데요.
왜 여기서 Publish-Subscribe Pattern이 아니라 Observer Pattern일까? 강의에서 분명 Publish / Subscribe 를 썼던 것 같은데..
그리고 Apache Kafka와 뭔가 비슷한 것이 있는 것 같은데, 어떤 점이 다를까. 이런 저런 생각을 했습니다.

Observer Pattern vs Publish-Subscribe Pattern

그 결과, Observer Pattern과 Publish-Subscribe Pattern은 다르다는 것을 알게 됐고, 다음 그림이 이해하는데에 도움이 됐습니다.

Image for post

제가 이해한 바로는 Reative Streams interface는 Observer Pattern을 바탕으로 만들어진 것이고, Apache Kafka 와 같은 메세지 큐들은 Publish-Subscreibe Pattern을 바탕으로 만들어진 것이라고 이해를 했습니다.

가장 큰 차이점은 Observer Pattern은 Subject(Observable)와 Observer(Subscriber)가 서로 알아야한 다는 것이고 (Coupled),
Publish-Subscreibe Pattern은 Publisher(Producer), Subscriber(Consumer) 는 서로 알 필요가 없고, 메세지 인터페이스만 알면 된다는 것이죠 (Decoupled).

따라서 Observer Pattern은 Subject가 직접 Event 발생을 Observer들에게 알려줘야합니다. 반면에 Publish-Subscribe Pattern은 Publisher는 이벤트를 Event Channel에 통지하기만 하면 되고, Subscriber는 Event Channel로부터 메세지를 가져와서 처리만하면 된다는 것입니다. 즉, Publisher-Subscriber는 서로의 존재에 대해서 모르고 자신의 역할만 수행하면 되는 것이지요.

Reactive Streams 인터페이스를 왜 Publish-Subscreibe Pattern이 아니라, Observer Pattern을 바탕으로 만들었는 지는 제 이해도가 부족해서 아직 온전히 이해할 수는 없지만 충분히 많은 공부가 되었습니다.

To Kevin

이 주제는 Kevin님이 계획하신 수업 내용의 방향성과 다소 차이가 있는 것 같지만, 저와 같은 고민을 할 다른 수강생들을 위해서 공유합니다.

한번 생각해볼만한 주제인 것 같아서 공유드립니다! (강의로 찍어달라는 말씀은 아닙니다. 단지 공유하고 싶어서..ㅎ)

Reference

- https://medium.com/@thanhprofession/architecture-overview-observer-pattern-vs-publish-subscribe-pattern-772e7dd9db83

- https://softwareengineering.stackexchange.com/a/286921

답변 1

4

Kevin님의 프로필 이미지
Kevin
지식공유자

진성님, 좋은 글 잘 읽었습니다. 저희 수업이 Kafka에 대한 강의는 아니기때문에 Kafka에 대해서 자세히 얘기하기는 어렵지만 진성님처럼 여러가지 기술을 비교해가면서 의문과 궁금증을 가지는 모습이 참 보기 좋네요. ^^

말씀하신대로 Pub-Sub 모델에서는 Publisher(Producer)와 Subscriber(Consumer)가 서로를 알지 못하죠. Producer와 Consumer는 Broker라는 Kafka 노드를 바라보고 있고, Broker에 존재하는 Topic을 통해서 메시지를 송신하고, 수신을 합니다. Broker라는 용어는 저희가 현실 세계에서도 종종 접할 수 있는 용어이죠? 브로커라고 주로 안좋은 사건 사고 뉴스에 한번씩 등장하기도 하구요. ^^;  이해 당사자 중간에서 당사자간의 어떠한 일을 중간에서 처리해주는 그런 역할을 하는데 Kafka에서의 Broker도 이와 같은 맥락이라는 생각이 드네요.

아무튼 저는 Observer Pattern은 디자인 패턴 중에 하나라는 좁은 의미로 이해하고, Pub-Sub 모델은 메시지를 주고 받는 시스템에서 활용하는 데이터 통신 모델이라는 넓은 의미로 머릿속에 개념을 잡고 있습니다.

위에서 언급한 두 가지 기술은 아니지만 다양한 데이터의 수집과 가공 처리를 종합적으로 다룰 수 있는 Apache NiFi라는 오픈 소스도 있는데요. Apache NiFi에 대해서는 기회가 주어진다면 제 경험을 토대로 언젠가 강의를 진행해볼 예정입니다.

아무튼 좋은 글 감사드리구요. 수강생들과 공유하고 싶은 지식이 있다면 언제든지 글 올려주시면 감사드리겠습니다.

황진성님의 프로필 이미지
황진성

작성한 질문수

질문하기