그냥 블로그

[디자인 패턴] Publisher - Subscriber vs Observer 패턴 본문

CS/디자인패턴

[디자인 패턴] Publisher - Subscriber vs Observer 패턴

코딩하는 공대생 2024. 7. 25. 13:31
반응형

 

  • 데드락 ( 교착 상태 ) 해결 방법 기억 안나서 공부! 
  • 이벤트 리스너, 이벤트 루프, JS 단일 스레드 (JS 및 NODE의 동작 과정)

 

발행-구독(Publisheer-Subscriber) 중재자 패턴 (Mediator Pattern)

 

발행-구독(영어 : Publish-Subscribe) 디자인 패턴은 소프트웨어 아키텍처 패턴의 하나로, 메시지 발행 컴포넌트(발행자)와 메시지 수신 컴포넌트(구독자) 사이 결합도를 낮추기 위해 사용된다.  비동기 메시징 패러다임
-> 바로 연결된게 아니기 때문에 ~~

 

이 패턴의 핵심은 발행자가 메시지를 누구에게 구독자는 어떤 발행자로부터 메시지를 받는지 알 필요가 없다는 데 있다. 즉, 발행자와 구독자 사이에 직접적인 연결 고리가 없어, 시스템의 유연성과 확장성을 향상시킨다. 

 

=> Publisher는 중재자에게 정보를 전달하고, 중재자는 Subscriber 정보를 보고 적합하면 보내주는 방식이다. 

 

  • pub이 sub의 선언 위치나 존재를 알 필요가 없다. 
  • sub 역시 pub의 선언 위치나 존재를 알 필요가 없다. 
    • 중재자랑만 잘 연결되어 있으면 되는 것 ㅇㅇ

 

메시지 큐

대용량 데이터 처리를 위한 배치 작업이나 채팅 서비스 비동기 데이터 처리등에 이용

프로세스나 프로그램 인스턴스*가 데이터 상호 교환 시 사용하는 통신 방법

 

*인스턴스 : 일반적인 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트 

객체 ( 오브젝트 ) 의 인스턴스는 데이터베이스나 SGA, 백그라운드 프로세스 프로세스 등 광범위한 컴퓨터 시스템 자원의 접근에 할당된 물리 메모리의 일부를 가르킨다.
응용 프로그램 (application) 을 메모리에 띄운 것 => 하나의 프로세스라고 보인다. 

객체 지향 프로그래밍(OOP)에서 인스턴스(instance)는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다. 여기서 클래스는 속성과 행위로 구성된 일종의 설계도 
=> 내가 아는 인스턴스 

계산 문제를 '입력과 출력이 명확히 기술된 것'으로 수학적으로 정의할 때, 계산 문제의 입력이 될 수 있는 것은 무한히 많이 존재하고 그것들 하나하나를 해당 계산 문제의 인스턴스라고 부른다.
=> OOP에서는 객체, 운영체제 관점에서는 프로세스인듯.

 

*메시지 지향 미들웨어(MOM)를 구현한 시스템을 의미한다. 

*MOM : 비동기 메시지를 사용하는 응용 프로그램 간 데이터 송수신. 

 

  • 비동기 : 큐에 넣어서 나중에 처리 가능
  • 비동조 : 앱과 분리 가능
  • 탄력성 : 일부 실패가 전체에 영향 X
  • 과잉 : 실패할 경우 재실행 가능
  • 보증 : 작업 처리 확인 가능
  • 확장성 : 다수 프로세스들이 큐에 메시지 보내기 가능

 

  • '큐' 이기 때문에 사용자가 많아지거나 데이터 요청이 많아지면 응답이 늦어짐. 
  • 과도한 트래픽이 몰리면 대기 시간 지연으로 서비스 망가질수도...

 

어디서 씀? 메시지 큐는 왜 나옴 ? 

메시지 큐는 하나의 큐를 갖고 listen하는 구독자들한테 나눠주기 때문에 a구독자가 가져가면 b 구독자는 받아볼 수 없지만, pub-sub은 boradcasting의 형태를 갖는ㄷㅅ?

딱 단체문자 개인문자

 

=> 이거 Publisher들이 문자를 보내면, 서버에 쌓이는건 메시지큐에 메인 스레드가 쌓고, 문자를 어디로 보낼지는 스레드를 이용해서 병렬로 처리해서 되게 빠르게 되는 것 같음. 

자료는 아쉽게도 없고... 지피티랑 티키타카하면서 정리했다... 아닐수도 ㅋ;;;

 

https://cloud.google.com/solutions/event-driven-architecture-pubsub?hl=ko

 

 

 

PUB-SUB 패턴 사용처

  • 스트림 처리 및 데이터 통합 
  • 모니터링, 알람, 로깅
  • 인증 및 IAM (? )
  • API
  • 트리거, 알림, 웹훅 : 웹훅에 대한 HHTP POST 요청으로 푸시 기반 메시지 전송 제공. 
  • 조정
  • Integration Connectors(미리보기) 

 

 

 

옵저버 패턴 (Observer Pattern)

 

 

 

 

인스턴스 / 프로세스 / 쓰레드 ??? 🙄

인스턴스 일반적으로 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트를 가르킨다. 객체 ( 오브젝트 ) 의 인스턴스는 데이터베이스나 SGA, 백그라운드 프로세스 프로세스 등 광범위한

soobindeveloper8.tistory.com

https://gobae.tistory.com/122

 

발행-구독 패턴(Publisher-Subscriber Pattern)이란?

이전 글 옵저버 패턴(Observer Pattern)이란? 옵저버 패턴 옵저버 패턴은, 옵저버들의 목록을 객체(관찰하려는 대상)에 등록하여 객체가 상태 변화가 있을 때 마다 메서드 등을 통해 객체가 직접 목록

gobae.tistory.com

 

 

Pub/Sub: 안정성 소개  |  Pub/Sub Documentation  |  Google Cloud

의견 보내기 Pub/Sub: 안정성 소개 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에서는 Pub/Sub 안정성 기능을 이해하고 전체적으로 파악할 수 있습

cloud.google.com

https://jh-yoon.tistory.com/14

 

Pub-Sub vs. Message Queues

1. 개요 본 포스트에서는 "메시지 큐"와 "Pub/Sub"을 살펴보겠습니다. 이들은 2개 이상의 서비스가 서로 통신하기 위해 분산된 시스템에서 사용되는 일반적인 패턴입니다. 2. 메시지 큐 메시지 큐는

jh-yoon.tistory.com