T_era

6. Redis pub/sub과 streams 본문

이론/백엔드 개념정리

6. Redis pub/sub과 streams

블스뜸 2025. 4. 30. 16:36
  • redis pub sub 기능
    • redis를 활용하여 메시지를 발행하고 구독하는 서비스
    • 특징
      • Redis Pub/Sub 시스템에서 동일한 채널을 여러 구독자가 구독하면, 해당 채널로 발행된 메시지가 모든 구독자에게 발송
      • 한번 발송된 메시지는 저장되지 않음
      • 보편적인 웹서비스는 사용자가 요청하기 전까지 데이터를 갱신해주지 않지만 이 기능은 사용자가 보낸 내용을 구독자에게 바로 갱신해준다
      • 근데 만약 서버가 2대이상이고 사용자가 각자 다른 서버에 연결되어 있을 때 각 서버에 반대 사용자 정보가 존재하지 않게된다 이를 해결하기 위한 기능
        1. 서버1-유저1, 서버2-유저2 일때 각 서버는 redis서버를 구독한 상태가 된다
        2. 유저1이 메시지를 보내면 서버1은 redis에게 유저2한테 전해야할 데이터를 발행한다
        3. redis는 서버2의 유저2정보를 찾아서 데이터를 전송한다
        즉, pub/sub은 전송한 메시지를 구독자에게 전파하는 전파자의 역할을 해준다
    • 실습예시)
      • 터미널1 : SUBSCRIBE test_channel
      • 터미널2 : PUBLISH test_channel "Hello, this is a test message"
    • 활용
      • 기본적으로 채팅과 같은 서비스의 경우 특정 서버에 서비스가 의존적이기에 다수의 서버를 운용하면서 채팅서비스(또는 알림서비스)를 운영할때에 pub/sub 구조 활용가능
      • 메시지를 받는 유저가 없으면 데이터가 유실된다(서버가 다운되면 그대로 사라진다)
  • redis streams (얘쓸바에 kafka씀)
    • pub/sub과 다르게 stream은 메시지가 저장되어 소비자가 나중에라도 읽을 수 있음
    • kafka와 자료구조가 유사
    • 실습예시)
      • XADD test_stream * message "Hello, this is a test message"
        • XADD : Redis Stream에 데이터를 추가할 때 사용
        • test_stream: 스트림 이름
        • *: 메시지의 고유 ID를 Redis가 자동 생성
      • XREAD BLOCK 10000 STREAMS test_stream $
        • BLOCK 10000: 최대 10초(10000ms) 동안 대기
        • $: 현재 마지막 메시지 이후에 오는 새 메시지를 기다림.
      • XRANGE test_stream - +
        • XRANGE 명령어는 Redis Stream에서 메시지를 조회할 때 사용
        • - : 시작 범위(처음부터)
        • +: 끝 범위(끝까지)
    • 활용
      • 이벤트 기반 시스템(비동기 프로그래밍) => kafka가 더좋음
        - 서버가 죽어도 이벤트기반 메시지가 남아있기 때문에 다시 살아난 후에 마저 읽어서 작동해서 이슈가 줄어듬ㅌ 
      • 채팅 및 알림 시스템

stream과 pub/sub의 차이
 - pub/sub은 데이터가 저장되지 않음
 - stream은 데이터가 실시간으로 저장됨

msa 서비스
- 각 기능별 db서버를 따로 두고 필요에 따른 서버에만 요청을 한다
- 서버하나가 작동을 안해도 나머지는 작동을 하기때문에 전체서버는 살아있다
- 동기/비동기를 섞어서 사용한다(동기 : 요청응답이 올 때까지 대기, 비동기 : 요청만 해놓고 다른 작업도 수행 가능)

'이론 > 백엔드 개념정리' 카테고리의 다른 글

Redis, RabbitMQ, Kafka의 차이점  (0) 2025.04.30
7. Redis 서버구성  (0) 2025.04.30
5. Redis hashes관련  (0) 2025.04.30
4. Redis Set과 zSet관련  (0) 2025.04.30
3. Redis List관련  (0) 2025.04.30