반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 소프트웨어공학
- springboot
- 머신러닝
- 빅데이터
- 데이터과학
- 컴퓨터과학
- 버전관리
- 데이터베이스
- 인공지능
- 네트워크보안
- 자료구조
- 보안
- 딥러닝
- 프로그래밍언어
- 클라우드컴퓨팅
- 네트워크
- 알고리즘
- 파이썬
- 컴퓨터비전
- 디자인패턴
- I'm Sorry
- 데이터분석
- 웹개발
- 자바스크립트
- 데이터구조
- 컴퓨터공학
- 소프트웨어
- 프로그래밍
- Yes
- 사이버보안
Archives
- Today
- Total
스택큐힙리스트
Redis Streams vs Pub/Sub: 저장형 알림 설계, 무엇을 써야 할까? 본문
반응형
1. 문제 정의
마이크로서비스가 늘어나면서 알림 메시지를 “한 번만, 정확히” 보내는 일이 점점 까다로워졌습니다. 실시간성이 중요하지만, 장애 · 스케일아웃 상황에서도 메시지 유실 없이 다시 처리할 수 있어야 하죠. Redis에는 두 가지 선택지가 있습니다.
2. Redis Pub/Sub ― “속도 우선”
- 휘발성(Volatile): 구독자가 없으면 메시지는 즉시 사라집니다. 실시간 채팅·라이브 지표처럼 “지금 안 보면 무의미”한 트래픽에 적합합니다.
- 팬아웃 구조: 하나의 publish 로 모든 인스턴스가 동시에 수신 → 코드가 단순, 지연 < 1 ms.
- 주요 최신 기능: Redis 7.2 ‘Sharded Pub/Sub’로 클러스터 확장 시 레이턴시와 CPU 부하가 줄었습니다.
- 단점: 장애 복구나 재전송이 필요하면 애플리케이션이 별도 DB · 로그로 상태를 저장해야 합니다.
3. Redis Streams ― “저장형 메시지”
- 로그 기반 저장: 메시지가 스트림에 append–only 형태로 남아 장애 후 재처리·리플레이가 가능합니다.
- Consumer Group: 각 메시지는 구독자 그룹 내에서 딱 한 번만 전달되고, ACK 전까지 ‘Pending’ 큐에 머뭅니다.
- Back-pressure 처리: 읽지 못한 메시지가 쌓여도 손실 없이 순서대로 처리.
- 코드 복잡도: XREADGROUP, PEL(대기 목록) 관리, 재전송 로직이 필요해 Pub/Sub보다 난도가 높습니다.
4. 선택 가이드
- “한 번만 전송” + “장애 복구” → Streams
- “즉시 소비” + “지연 최소화” → Pub/Sub
- 혼합 설계: 실시간 Push 는 Pub/Sub, 중요 이벤트 로그는 Streams 로 이중화하는 하이브리드가 실무에서 많이 쓰입니다.
5. 설계 팁
- 채널/스트림 네이밍: user:{id} 같이 개인 단위로 쪼개면 보안·필터링이 쉬워집니다.
- ACK 전략: Streams는 ACK 누락 시 XPENDING + XCLAIM 으로 자동 재배정 로직을 구현해 주세요.
- 모니터링: Pub/Sub은 INFO pubsub, Streams는 XINFO CONSUMERS 로 지표를 수집해 Grafana 대시보드에 올리면 병목을 빠르게 찾을 수 있습니다.
6. 결론
- Pub/Sub: “실시간, 유실 허용” → 가장 빠르고 단순한 알림 채널
- Streams: “저장·재처리 중요” → Durable Queue 역할까지 담당
업무 특성과 장애 허용 범위를 먼저 정의하고, 필요하면 두 기술을 조합해 ‘속도와 안정성’을 모두 챙기세요.
반응형
'개발' 카테고리의 다른 글
Spring Boot 실시간 채팅 서버 만들기 — WebSocket + STOMP, 하트비트까지 완전 정복 (1) | 2025.07.23 |
---|---|
SSE vs WebSocket, 언제 써야 빛을 볼까? (3) | 2025.07.22 |
Redis Pub/Sub로 5초 만에 터지는 알림, 멀티 인스턴스에서도 놓치지 않는 비결 (0) | 2025.07.22 |
setState vs Provider, 무엇이 다를까? (0) | 2025.07.22 |
“구독 · 알림 · 자동 반응” — Observer 패턴 한눈에 이해하기 (1) | 2025.07.22 |
Comments