[1] Pub/Sub Pattern 요약
Pub/Sub (Publish/Subscribe)는 비동기 메시징 방식으로, 발행자(Publisher)가 메시지를 주제(Topic)에 게시하고, 구독자(Subscriber)가 해당 주제를 구독하여 메시지를 받는 방식이다. 이 패턴은 서버리스 및 마이크로서비스 아키텍처에서 자주 사용됩니다. 주요 개념은 다음과 같다
- 메시지: 주고받는 독립적인 통신 단위.
- 발행자(Publisher): 메시지를 보내는 주체.
- 구독자(Subscriber): 메시지를 받는 주체.
- 주제(Topic): 특정 주제에 대한 메시지를 포함하는 채널.
Pub/Sub의 핵심은 발행자와 구독자가 서로의 존재를 모를 수 있다는 점입니다. 즉, 발행자는 구독자가 누구인지 알 필요 없고, 구독자는 발행자가 누구인지 알 필요 없다.
[2] Pub/Sub vs. Observer Pattern
- Observer Pattern: "하나의 객체(subject)가 여러 개의 의존 객체(observers)를 관리"하는 일대다 관계.
- Pub/Sub Pattern: "여러 발행자(publishers)가 여러 구독자(subscribers)에게 메시지를 전달"하는 다대다 관계.
[3] Pub/Sub의 장점
- 효율성: 구독자는 새로운 메시지를 실시간으로 받으므로, 폴링(polling)이 필요 없음.
- 확장성: 발행자와 구독자가 분리되어 독립적으로 운영되므로 시스템을 쉽게 확장할 수 있음.
- 단순성: 개별 애플리케이션 간의 연결 없이 주제에 연결되어 메시지를 주고받을 수 있어 시스템 복잡도가 감소함.
[4] Redis에서의 Pub/Sub
Redis는 PUBLISH 명령으로 메시지를 특정 채널에 발행하고, SUBSCRIBE 명령으로 특정 채널을 구독한다. 그러나 Java에서는 Redis와의 통합이 어려울 수 있기 때문에 Redisson과 같은 라이브러리를 사용한다. Redisson은 RTopic 인터페이스를 제공하여 Pub/Sub 패턴을 쉽게 구현할 수 있다.
Redisson 예시:
RTopic topic = redisson.getTopic("anyTopic");
topic.addListener(SomeObject.class, new MessageListener<SomeObject>() {
@Override
public void onMessage(String channel, SomeObject message) {
// 메시지 처리
}
});
// 다른 스레드에서 메시지 발행
topic.publish(new SomeObject());
Redisson은 비동기, 반응형, RxJava2 인터페이스를 지원하여 다양한 프로그래밍 모델에 맞춰 사용할 수 있다. 또한, Redis 장애 발생 시 자동으로 재구독을 지원하여 높은 가용성을 제공한다.
'redis' 카테고리의 다른 글
Redis 자료구조 + Spring Data Redis 설정(with.transaction) (0) | 2025.01.03 |
---|