발행-구독 모델은 비동기 메시징 패러다임입니다.
재밌는 점은 해당 모델의 역사를 읽어보니 실제로 "뉴스"부 시스템이 시발점이었다. 발행과 구독을 비유한 것이 아니라 실제 그 의미로 개발된 것입니다.
발행-구독 모델에서 발신자의 메시지는 특정한 수신자가 정해져 있지 않습니다. 대신 발행된 메시지는 정해진 범주에 따라, 각 범주에 대한 구독을 신청한 수신자에게 전달됩니다. 수신자는 발행자에 대한 지식이 없어도 원하는 메시지만을 수신할 수 있습니다. 🎯
필자는 개인적으로 침착맨 예시로 해당 개념을 이해했습니다. 침착맨은 나를 몰라도 됩니다. 정확히 말하면 나는 침착맨을 모릅니다! 그저 유튜브를 통해 간접적으로 알고 있는 것이죠. 즉, 서로의 존재를 알 필요가 없습니다. 그래서 중간에 유튜브 플랫폼만 알고 있으면 됩니다. 침착맨과 나는 느슨한 결합을 할 수 있는 것입니다. 🤝

옵서버 패턴(observer pattern)은 객체(subject)의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들(observers)의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴입니다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용됩니다. 발행/구독 모델로 알려져 있기도 합니다.
Observer Pattern과 유사하지만, Observer Pattern의 경우에는 observer와 subject가 직접적인 관계를 갖고 있는 것에 반해, pub-sub 패턴의 경우 publisher와 subscriber가 서로를 전혀 몰라도 상관 없다는 차이가 있습니다. 정리하자면 브로커 또는 메시지 브로커 또는 이벤트 버스라고 불리는 제3요소가 있냐 없냐 차이가 있습니다. 🌉

메시지 큐를 사용하지 않을 경우, 대규모 데이터 처리 및 메시지 전송을 수동으로 구현해야 하므로 복잡도가 증가하며, 구현에도 많은 시간이 소요됩니다. 애플리케이션 간의 통신 또한 동기적으로 이루어지므로 한 애플리케이션이 다른 애플리케이션의 응답을 기다릴 때 애플리케이션의 응답 시간이 증가합니다. 이런 애플리케이션 간의 직접적인 통신은 애플리케이션 간 결합도를 증가시키므로, 변경과 확장도 어렵습니다.