- 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 구조
- 발행자(Publisher) → 특정 채널에 메시지 발행
- 구독자(Subscriber) → 특정 채널을 구독 후 메시지 수신
- Redis → 발행된 메시지를 구독자에게 전달
2.2. Pub/Sub 기본 명령어
🔹 구독하기 (Subscriber)
🔹 메시지 발행하기 (Publisher)
🔹 여러 채널 구독하기
🔹 패턴 기반 구독 (특정 단어 포함 채널 구독)
2.3. Pub/Sub 활용 사례
✔ 실시간 채팅 시스템 → 사용자들이 같은 채널에서 메시지를 주고받음
✔ 알림 시스템 → 특정 이벤트 발생 시 실시간 푸시 알림
✔ 분산 시스템 간 메시지 전달 → 여러 서비스 간 데이터 공유
📌 예제: 실시간 채팅 시스템
📌 문제점:
Redis Pub/Sub은 메시지를 저장하지 않기 때문에, 구독 중이 아닐 때 발송된 메시지는 받을 수 없습니다.
→ 이를 해결하려면 Redis Streams 사용
3. Redis Streams (스트림)
3.1. Streams 개념
Redis Streams는 Kafka와 유사한 메시지 큐 시스템으로, 메시지를 로그처럼 저장하면서 이전 메시지도 조회 가능합니다.
📌 Streams vs. Pub/Sub 차이점
메시지 저장 | ❌ (저장 안 함) | ✅ (메시지 보관) |
메시지 소비 방식 | 실시간 구독자만 수신 | 이전 메시지도 읽을 수 있음 |
메시지 그룹 | 없음 | 컨슈머 그룹 (Consumer Group) 지원 |
활용 사례 | 실시간 알림, 채팅 | 로그 수집, 비동기 데이터 처리 |
3.2. Streams 기본 명령어
🔹 메시지 추가
✔ mystream → 스트림 이름
✔ * → 자동 메시지 ID 생성
✔ temperature 25, humidity 60 → 키-값 데이터
🔹 최신 메시지 조회
🔹 새 메시지만 가져오기
✔ COUNT 2 → 2개의 메시지만 가져옴
✔ $ → 현재 이후의 새로운 메시지만 읽음
🔹 소비자 그룹 생성
✔ mystream → 스트림 이름
✔ mygroup → 소비자 그룹 이름
🔹 메시지 읽기 (컨슈머 그룹 사용)
3.3. Streams 활용 사례
✔ 실시간 로그 수집 → 애플리케이션 로그를 중앙에서 관리
✔ 메시지 큐 → 비동기 데이터 처리
✔ IoT 데이터 저장 → 센서 데이터 실시간 저장
📌 예제: IoT 센서 데이터 저장
→ 이후 특정 범위의 데이터를 검색 가능
4. 결론: Redis Pub/Sub과 Streams 비교 및 선택 방법
실시간 데이터 처리 | ✅ | ✅ |
이전 메시지 조회 | ❌ | ✅ |
데이터 저장 여부 | ❌ | ✅ |
컨슈머 그룹 지원 | ❌ | ✅ |
활용 사례 | 채팅, 실시간 알림 | 로그 수집, 비동기 작업 |
- 즉시 메시지를 전달해야 하는 경우 → 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 |