Redux Store의 디자인 패턴은? pub/sub과 observer

이동준·2023년 8월 27일
0

리덕스

목록 보기
5/5
post-custom-banner

Publish-Subscribe Pattern

리덕스 스토어 자체의 상태 변화를 감지하기 위한 패턴으로는 발행/구독 패턴(Publish-Subscribe Pattern)을 따른다.

줄여서 펍섭패턴은 어떤 이벤트를 발생시키는 subject 객체와, 그 이벤트에 대한 알림을 받기 위해 관찰자 옵저버 객체가 존재한다. 하지만 옵저버 패턴과 다른 점은 그 사이에 이벤트를 처리하는 브로커가 존재한다는 점이다. 옵저버 패턴의 서브젝트는 자신이 직접 오브젝트를 받아 관리하고 이벤트에 대한 알림을 보내지만, 펍섭 패턴의 서브젝트(퍼블리시)는 이벤트 브로커에게 이벤트를 보내고 이벤트 브로커가 옵저버(서브스크라이버)들에게 알림을 보낸다. 중간의 한 단계의 구조가 더 생긴 것이다.

펍섭 패턴을 사용하면 발행자가 직접적으로 구독자들과 마주치지 않고 이벤트를 처리하기 때문에 서로간의 존재를 모른채 사용되어 상호 의존성을 줄여주는 특징이 있어 의존성을 줄이는 설계에 적용되기도 한다.
옵저버 패턴보다 더 느슨하게 이벤트의 발행 객체와 관찰 객체를 분리할 수 있다는 장점이 있다.
기존에 발행 객체에게 맡겨지던 구독 객체들의 관리 책임을 중간 브로커에게 넘겨주었기 때문이다.
또한 비동기 환경에서 발행 객체는 중간 브로커에게 이벤트만 던져두고 다른 작업을 할 수 있기 때문에, 펍섭 패턴이 자주 활용되기도 한다.

펍섭 패턴 그래서 어따 써?

  • 각 컴포넌트간 통신을 관리하는데 사용한다. 리덕스 스토어가 딱 그런 역할을 하고, 각각 모듈들이 필요한 이벤트를 구독하고, 다른 모듈에서 해당 이벤트를 발행하여 통신 할 수 있도록 한다.

  • 비동기적인 메세지 전달을 위해서 펍섭패턴을 활용한다. 메시지가 발행되면 해당 메시지를 구독한 수신자들이 메시지를 받아 처리한다.

  • 라이브 데이터 스트리밍이나 웹 소켓을 활용하는 실시간 애플리케이션에서 데이터 변화를 효과적으로 처리하는데 사용하기도 한다.

  • 이벤트 중심의 아키텍처에서 컴포넌트나 모듈간의 이벤트 통신을 관리하기 위해 사용된다. 각각의 모듈은 필요한 이벤트를 구독하고 해당 이벤트가 발생할때마다 처리한다.

  • 중재자 패턴(Mediator pattern)은 객체들 사이 복잡한 상호작용을 관리하는 패턴인데, 펍섭 패턴을 활용하여 중재자가 상호작용을 중재하고 이벤트를 전달하는데 사용된다.

펍섭 패턴은 주로 분산 시스템이나 이벤트 기반의 아키텍처에서 다양한 모듈간 통신을 관리하거나 데이터 변화를 효과적으로 전달하기 위해 사용된다.

Observer Pattern

비슷한 패턴을 가진 예시로는 옵저버 패턴이라는 패턴이 있는데,
옵저버 패턴은 행동 패턴 중 하나로 어떤 객체에서 발생하는 이벤트를 해당 객체를 관찰하고 있는 객체에게 알리는 방식으로 동작하는 패턴이다. 알림의 주체가 되는 객체(subject)는 관찰하는 객체인 옵저버들과 일대 다의 관계를 맺을 수 있다.

옵저버 패턴의 장점은 두 객체가 서로 느슨하게 연결된다는 점이 있다.
느슨하게 연결된다는 것은 두 연결된 객체들 사이에 결합도가 낮다는 것을 의미하고, 서로가 서로에 대한 최소한의 정보만을 가지고 소통할 수 있다는 것이다.
객체들 사이의 의존성이 낮고, 느슨하게 연결되어 객체지향 설계 원칙 중 단일 책임 원칙과 개방 폐쇠 원칙을 지킬 수 있도록 도와준다.

옵저버 패턴 그래서 어따 써?

  • 객체의 상태 변화나 이벤트 발생을 다른 객체가 감지하고 처리해야 할 때 사용된다. 예를 들어, 버튼 클릭, 데이터 변경, 외부 리소스 로딩 완료 등의 이벤트를 처리하는 상황에에 유용하게 활용된다.

  • 사용자 인터페이스의 상태 변화를 반영해야 할 때 사용된다. 예를 들어, 데이터 변경에 따라 UI 요소를 업데이트하거나 화면을 다시 렌더링할 때 활용될 수 있다.

  • 다양한 컴포넌트나 모듈 간의 통신을 위해 사용될 때가 있다. 발행자(publisher)가 이벤트를 발행하고, 이를 구독하는 구독자(subscriber)가 해당 이벤트에 대응하는 동작을 수행한다.

  • 분산 시스템에서 이벤트나 데이터의 변화를 효과적으로 관리하고 전파하기 위해 사용된다. 한 컴포넌트의 변경이 다른 컴포넌트들에게 영향을 주어야 할 때 유용하다.

  • 어플리케이션에서 발생하는 커스텀 이벤트를 관리하고 처리할 때 사용된다. 예를 들어, 게임에서 특정 조건이 충족될 때 커스텀 이벤트를 발생시키고 처리하는데 활용될 수 있다.

  • 중재자 패턴에서 중재자(Mediator)가 여러 객체 간의 통신을 관리하고 조정할 때 사용된다. 중재자가 상태 변경을 감지하여 해당 객체들에게 알리고 상호작용을 조정하는데 활용된다.

  • MVC(Model-View-Controller)나 MVVM(Model-View-ViewModel)과 같은 UI 패턴에서 모델(Model)이 변경될 때 뷰(View)에 업데이트를 알리는 데 사용된다.

옵저버 패턴은 객체 간의 느슨한 결합(loose coupling)을 제공하며, 이벤트 중심적인 아키텍처에서 유연성과 확장성을 높이기 위해 사용된다. 이 패턴을 사용하면 한 객체의 변경이 다른 객체에게 영향을 미치지 않고 독립적으로 확장 가능한 시스템을 구축할 수 있다.

post-custom-banner

0개의 댓글