SlideShare a Scribd company logo
1 of 10
Download to read offline
Publisher-Subscriber Pattern
charsyam@naver.com
메타포:
신문 구독
싞문 메타포
• 구독자에게만 신문을 배달한다.
• 구독과 해지가 자유롭다.(실제 신문은 해지가 어렵다 -_-)
• 여러 개의 신문을 구독할 수 있다.
• 조선일보에서 한겨레 신문을 구독 할 수 도 있다.
Alias
• Observer
• Dependents
Force 1 : 하나 이상의 Component에 통보
Component
Component
OBJECT
NOTIFY
Force 2 : Interface 로 만 통싞
Component A
OBJECT
Component B Component C
Observer Interface
Loosely Couple
Solution
• 하나의 컴포넌트만 게시자
• 변경사항에 종속된 모든 컴포넌트는 그 게시자의 구독자에 해당
– 구독자는 observer
Publisher
SubscriberSubscriberSubscriberSubscriberSubscriberREGISTER
NOTIFY
제공 수준
• 각기 다른 클래스들이 게시자나 구독자의 역할을 할 수 있도록
– 추상 기본 클래스 도입
• 게시자는 내부 상태에 어떤 변화가 일어났을 때, 구독자에게 통지를 보낼
지 결정할 수 있다.
• 한 객체가 여러 게시자들의 구독자가 될 수 있다.
• 한 객체가 게시자이자 동시에 구독자의 역할을 모두 수행할 수 있다.
• 구독과 통지를 각기 다른 이벤트 유형으로 구분할 수 있다.
• 게시자는 구독자들에게 통지를 보낼 때 데이터 변경사항 중 일부만 선택
해 보낼 수 있다.
Push Model VS Pull Model
Push Model Pull Model
특징 모든 관련 정보를 NOTIFY 시
에 함께 전달
이벤트 변경만 통보.
실 데이터는 다시 가져와야 한다.
장점 Subscriber 들이 모든 정보가
필요할 때 유용
Subscriber 들이 일부 정보만 필요
할 경우
정보 변경시에 유연성이 높음
단점 전달하는 데이터 형식이 고정
되므로, 유연성 부족
메시지 전달 비용이 비싸짐
Variant
• GateKeeper
• Producer - Consumer
• Event Channel
– Publisher – Subscriber 의 Decouple
– Publisher 에서 바라보면 Subscriber 역할
– Subscriber 에서 바라보면 Publisher 역할

More Related Content

Viewers also liked

[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
MinGeun Park
 

Viewers also liked (19)

Observer pattern dragor
Observer pattern dragorObserver pattern dragor
Observer pattern dragor
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기비전공자의 자바스크립트 도전기
비전공자의 자바스크립트 도전기
 
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareAplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴
 
Publish-Subscribe Middlewares
Publish-Subscribe MiddlewaresPublish-Subscribe Middlewares
Publish-Subscribe Middlewares
 
Padrões de Projeto - Observer
Padrões de Projeto - ObserverPadrões de Projeto - Observer
Padrões de Projeto - Observer
 
퍼블리셔, 디자인을 퍼블리싱하다
퍼블리셔, 디자인을 퍼블리싱하다퍼블리셔, 디자인을 퍼블리싱하다
퍼블리셔, 디자인을 퍼블리싱하다
 
Learn design pattern-1
Learn design pattern-1Learn design pattern-1
Learn design pattern-1
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto Observer
 
4. publish / subscribe
4. publish / subscribe4. publish / subscribe
4. publish / subscribe
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
Publish & Subscribe to events using an Event Aggregator
Publish & Subscribe to events using an Event AggregatorPublish & Subscribe to events using an Event Aggregator
Publish & Subscribe to events using an Event Aggregator
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 

More from DaeMyung Kang

More from DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
 
Redis
RedisRedis
Redis
 
Ansible
AnsibleAnsible
Ansible
 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
 
Redis acl
Redis aclRedis acl
Redis acl
 
Coffee store
Coffee storeCoffee store
Coffee store
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Number system
Number systemNumber system
Number system
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 

Publisher subscriber pattern

  • 3. 싞문 메타포 • 구독자에게만 신문을 배달한다. • 구독과 해지가 자유롭다.(실제 신문은 해지가 어렵다 -_-) • 여러 개의 신문을 구독할 수 있다. • 조선일보에서 한겨레 신문을 구독 할 수 도 있다.
  • 5. Force 1 : 하나 이상의 Component에 통보 Component Component OBJECT NOTIFY
  • 6. Force 2 : Interface 로 만 통싞 Component A OBJECT Component B Component C Observer Interface Loosely Couple
  • 7. Solution • 하나의 컴포넌트만 게시자 • 변경사항에 종속된 모든 컴포넌트는 그 게시자의 구독자에 해당 – 구독자는 observer Publisher SubscriberSubscriberSubscriberSubscriberSubscriberREGISTER NOTIFY
  • 8. 제공 수준 • 각기 다른 클래스들이 게시자나 구독자의 역할을 할 수 있도록 – 추상 기본 클래스 도입 • 게시자는 내부 상태에 어떤 변화가 일어났을 때, 구독자에게 통지를 보낼 지 결정할 수 있다. • 한 객체가 여러 게시자들의 구독자가 될 수 있다. • 한 객체가 게시자이자 동시에 구독자의 역할을 모두 수행할 수 있다. • 구독과 통지를 각기 다른 이벤트 유형으로 구분할 수 있다. • 게시자는 구독자들에게 통지를 보낼 때 데이터 변경사항 중 일부만 선택 해 보낼 수 있다.
  • 9. Push Model VS Pull Model Push Model Pull Model 특징 모든 관련 정보를 NOTIFY 시 에 함께 전달 이벤트 변경만 통보. 실 데이터는 다시 가져와야 한다. 장점 Subscriber 들이 모든 정보가 필요할 때 유용 Subscriber 들이 일부 정보만 필요 할 경우 정보 변경시에 유연성이 높음 단점 전달하는 데이터 형식이 고정 되므로, 유연성 부족 메시지 전달 비용이 비싸짐
  • 10. Variant • GateKeeper • Producer - Consumer • Event Channel – Publisher – Subscriber 의 Decouple – Publisher 에서 바라보면 Subscriber 역할 – Subscriber 에서 바라보면 Publisher 역할