본문으로 건너뛰기

1. Redis Pub/Sub 개요

  • Redis의 Pub/Sub(Publish/Subscribe) 시스템은 메시지 브로커링을 구현한 기능으로, 발행자와 구독자 간의 효율적인 메시지 전달을 지원합니다.
  • 이 시스템의 핵심은 발행자와 구독자가 서로를 알 필요 없이 메시지를 주고받을 수 있다는 점입니다.

1.1 핵심 특징

  • 발행자는 특정 채널에 메시지를 발행
  • 구독자는 관심 있는 채널을 구독하여 메시지 수신
  • 발행자와 구독자 간의 완전한 디커플링
  • 확장성이 뛰어난 네트워크 토폴로지 구성 가능

2. 기본 명령어

2.1 구독 관련 명령어

SUBSCRIBE 명령어

SUBSCRIBE channel1 channel2
  • 하나 이상의 채널을 구독할 수 있습니다. 구독 후에는 해당 채널로 전송되는 모든 메시지를 수신합니다.

UNSUBSCRIBE 명령어

UNSUBSCRIBE channel1
  • 특정 채널의 구독을 취소합니다. 인자 없이 사용하면 모든 채널의 구독이 취소됩니다.

2.2 발행 관련 명령어

PUBLISH 명령어

PUBLISH channel1 "Hello World"
  • 지정된 채널에 메시지를 발행합니다. 해당 채널을 구독 중인 모든 클라이언트가 이 메시지를 수신합니다.

3. 메시지 전달 특성

3.1 At-most-once 전달 방식

  • Redis Pub/Sub는 at-most-once 메시지 전달 방식을 사용합니다.
  • 이는 다음을 의미합니다:
    • 메시지는 최대 한 번만 전달됨
    • 서버가 메시지를 보낸 후에는 재전송되지 않음
    • 네트워크 문제 등으로 메시지가 손실되면 복구 불가능
경고

중요한 메시지의 경우, Redis Streams를 사용하여 더 강력한 전달 보장을 받을 수 있습니다.

3.2 채널 구분하기

  • 여러 환경이나 용도로 채널을 구분해야 할 때는 채널 이름에 접두어를 사용합니다
  • 예:
    • 개발/운영 환경 구분: "dev:notifications", "prod:notifications"
    • 기능별 구분: "order:alerts", "user:updates"

4. 패턴 매칭 구독

4.1 기본 사용법

글로브 스타일 패턴을 사용하여 여러 채널을 한 번에 구독할 수 있습니다:

PSUBSCRIBE news.*

이 명령으로 다음과 같은 모든 채널의 메시지를 수신할 수 있습니다:

  • news.tech
  • news.sports
  • news.weather

4.2 주의사항

정보

하나의 메시지가 여러 패턴과 일치하는 경우, 구독자는 같은 메시지를 여러 번 받을 수 있습니다.

5. 실무 적용 팁

5.1 사용 적합 사례

  • 실시간 알림 시스템
  • 채팅 애플리케이션
  • 실시간 모니터링 시스템
  • 이벤트 기반 아키텍처

5.2 구현 시 고려사항

  • 메시지 손실 허용 여부 검토
  • 패턴 구독 시 중복 수신 고려
  • 클라이언트 라이브러리의 재연결 정책 설정
  • 채널 명명 규칙 수립

6. Redis 7.0의 Sharded Pub/Sub

  • Redis 7.0부터는 클러스터 환경에서 더 효율적인 Pub/Sub을 위한 Sharded Pub/Sub이 도입되었습니다:
    • 채널이 슬롯에 할당되어 관리됨
    • 클러스터 내 제한된 범위로 메시지 전파
    • 수평적 확장성 개선
    • SSUBSCRIBE, SUNSUBSCRIBE, SPUBLISH 명령어 사용

대규모 시스템에서는 Sharded Pub/Sub을 통해 더 나은 성능을 얻을 수 있습니다.