Redis Pub/Sub과 Streams

2025년 03월 16일 by 보험지식창고

    Redis Pub/Sub과 Streams 목차
반응형

1. 개요

Redis는 단순한 데이터 저장소를 넘어, 실시간 데이터 처리 및 메시지 브로커 기능까지 제공합니다. 특히 Pub/Sub (Publish/Subscribe) 모델과 Streams비동기 데이터 처리 및 이벤트 기반 시스템에 강력한 도구가 됩니다.

  • Pub/Sub: 메시지 발행-구독 방식으로, 실시간 알림 및 채팅 시스템에 적합
  • Streams: 메시지를 로그처럼 저장하며, 데이터 스트리밍 및 로그 수집에 유용

이번 글에서는 Pub/Sub과 Streams의 개념, 동작 방식, 활용 사례를 자세히 설명하겠습니다.


2. Redis Pub/Sub (Publish/Subscribe)

2.1. Pub/Sub 개념

Redis의 Pub/Sub (발행/구독) 기능은 한 클라이언트가 메시지를 발행(Publish)하면, 해당 채널(Topic)을 구독(Subscribe)한 클라이언트가 이를 받는 구조입니다.

📌 핵심 특징
비동기 메시징 → 실시간 데이터 전송 가능
구독한 클라이언트에게만 메시지 전달 (메시지 보관 X)
멀티 클라이언트 지원

📌 Pub/Sub 구조

  1. 발행자(Publisher) → 특정 채널에 메시지 발행
  2. 구독자(Subscriber) → 특정 채널을 구독 후 메시지 수신
  3. Redis → 발행된 메시지를 구독자에게 전달

2.2. Pub/Sub 기본 명령어

🔹 구독하기 (Subscriber)

bash
복사편집
SUBSCRIBE news # "news" 채널을 구독

🔹 메시지 발행하기 (Publisher)

bash
복사편집
PUBLISH news "새로운 뉴스가 도착했습니다!"

🔹 여러 채널 구독하기

bash
복사편집
SUBSCRIBE news sports weather

🔹 패턴 기반 구독 (특정 단어 포함 채널 구독)

bash
복사편집
PSUBSCRIBE news:* # "news:"로 시작하는 모든 채널 구독

2.3. Pub/Sub 활용 사례

실시간 채팅 시스템 → 사용자들이 같은 채널에서 메시지를 주고받음
알림 시스템 → 특정 이벤트 발생 시 실시간 푸시 알림
분산 시스템 간 메시지 전달 → 여러 서비스 간 데이터 공유

📌 예제: 실시간 채팅 시스템

bash
복사편집
# 사용자 A가 "chat" 채널을 구독 SUBSCRIBE chat
bash
복사편집
# 사용자 B가 "chat" 채널에 메시지 발행 PUBLISH chat "안녕하세요!"

📌 문제점:
Redis Pub/Sub은 메시지를 저장하지 않기 때문에, 구독 중이 아닐 때 발송된 메시지는 받을 수 없습니다.
→ 이를 해결하려면 Redis Streams 사용


3. Redis Streams (스트림)

3.1. Streams 개념

Redis Streams는 Kafka와 유사한 메시지 큐 시스템으로, 메시지를 로그처럼 저장하면서 이전 메시지도 조회 가능합니다.

📌 Streams vs. Pub/Sub 차이점

비교 항목Redis Pub/SubRedis Streams
메시지 저장 ❌ (저장 안 함) ✅ (메시지 보관)
메시지 소비 방식 실시간 구독자만 수신 이전 메시지도 읽을 수 있음
메시지 그룹 없음 컨슈머 그룹 (Consumer Group) 지원
활용 사례 실시간 알림, 채팅 로그 수집, 비동기 데이터 처리

3.2. Streams 기본 명령어

🔹 메시지 추가

bash
복사편집
XADD mystream * temperature 25 humidity 60

mystream → 스트림 이름
* → 자동 메시지 ID 생성
temperature 25, humidity 60 → 키-값 데이터

🔹 최신 메시지 조회

bash
복사편집
XRANGE mystream - +

🔹 새 메시지만 가져오기

bash
복사편집
XREAD COUNT 2 STREAMS mystream $

✔ COUNT 2 → 2개의 메시지만 가져옴
✔ $ → 현재 이후의 새로운 메시지만 읽음

🔹 소비자 그룹 생성

bash
복사편집
XGROUP CREATE mystream mygroup $

✔ mystream → 스트림 이름
✔ mygroup → 소비자 그룹 이름

🔹 메시지 읽기 (컨슈머 그룹 사용)

bash
복사편집
XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream >

3.3. Streams 활용 사례

실시간 로그 수집 → 애플리케이션 로그를 중앙에서 관리
메시지 큐 → 비동기 데이터 처리
IoT 데이터 저장 → 센서 데이터 실시간 저장

📌 예제: IoT 센서 데이터 저장

bash
복사편집
XADD sensors * temperature 30 humidity 50 XADD sensors * temperature 32 humidity 55

→ 이후 특정 범위의 데이터를 검색 가능

bash
복사편집
XRANGE sensors - +

4. 결론: Redis Pub/Sub과 Streams 비교 및 선택 방법

선택 기준Pub/SubStreams
실시간 데이터 처리
이전 메시지 조회
데이터 저장 여부
컨슈머 그룹 지원
활용 사례 채팅, 실시간 알림 로그 수집, 비동기 작업
  • 즉시 메시지를 전달해야 하는 경우Pub/Sub 사용
  • 메시지를 저장하고 관리해야 하는 경우Streams 사용

🚀 Redis의 강력한 메시징 기능을 활용하여 실시간 데이터를 효율적으로 처리하세요!

반응형

'IT' 카테고리의 다른 글

Redis vs. Kafka: 주요 차이점과 활용 사례  (0) 2025.03.16
Redis  (1) 2025.03.16
React 화살표 함수와 상위 스코프 개념  (1) 2024.12.17
React 함수 선언 방법 2가지  (0) 2024.12.17
React의 State(상태)란?  (0) 2024.12.17