ReactiveX의 Observer Pattern에 대한 생각 공유
369
작성한 질문수 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은 다르다는 것을 알게 됐고, 다음 그림이 이해하는데에 도움이 됐습니다.

제가 이해한 바로는 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
진성님, 좋은 글 잘 읽었습니다. 저희 수업이 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에 대해서는 기회가 주어진다면 제 경험을 토대로 언젠가 강의를 진행해볼 예정입니다.
아무튼 좋은 글 감사드리구요. 수강생들과 공유하고 싶은 지식이 있다면 언제든지 글 올려주시면 감사드리겠습니다.
Single과 관련해 여쭤보고 싶은 부분이 있습니다!
0
264
2
cold/hot publisher 예제 코드와 관련해 질문 드립니다.
0
363
1
CompletableObserver 클래스의 람다식 표현관련
0
297
1
1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!
0
356
1
데이터 결합 연산자 / merge 관련 질문
0
445
1
DROP 배압 전략에 관한 궁금증
0
300
2
map에서의 TimeUtil.sleep에 관한 궁금점
0
215
1
강의 내용을 정리해서 개인 블로그에 올려도 될까요?
0
562
2
TimeUtil.sleep 관련 질문
0
286
1
배압 전략 중에서 DROP 전략과 관련해서 질문 있습니다.
0
335
1
Error 발생 시에도 계속 처리 방법
0
689
2
선언형 프로그래밍과 명령형 프로그래밍
1
784
2
첫번째 강의 부터 이번강의까지 수강하면서 궁금한점 질문드립니다.
0
325
1
안녕하세요. 질문이 있습니다.
1
354
1
logger 가 없는데 util 폴더도 같이 갖다놔야 하나요?
0
327
1
amb 연산자
0
233
1
질문 드립니다.
0
219
1
concatEager( ) 연산자에 관하여
0
318
1
Reactive Streams의 구성요소들과 RxJava의 구성요소들의 관계?
1
397
2
ObservableSequenceEqualExample.java 예제의 delay( ) 연산자 질문있습니다
0
309
3
defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.
0
264
3
flatMapSingle() 메소드에 대하여
0
620
6
fromFuture() vs fromCallable() 생성 연산자에 대해
0
573
2
함수형 인터페이스 Comparator에 대해
0
397
2





