Redis Stream 기초: 메시지 스트리밍과 소비 모델

Redis Stream 소개

Redis 4.0 이상 버전부터 도입된 Stream은 비동기 처리 및 서비스 간 결합도 감소를 위한 강력한 도구입니다. 이는 지속적인 메시지 흐름을 저장하고, 여러 소비자에 의해 안정적으로 처리될 수 있도록 설계되었습니다. 특히 고가용성 시스템에서 이벤트 기반 아키텍처를 구현할 때 유용합니다.

주요 특징

  • 무제한 확장성: 메시지의 크기 제한 없이 지속적으로 추가 가능
  • 데이터 유지 보장: Redis 재시작 후에도 메시지 손실 없이 복원 가능
  • 멀티 컨슈머 그룹 지원: 여러 소비자 그룹이 독립적으로 메시지를 처리하며, 장애 시 복구 용이
  • 중복 처리 방지: 한 번 처리된 메시지는 확인(ack) 후에만 삭제되며, 중복 소비 가능

핵심 명령어 활용

XADD: 메시지 추가

XADD는 스트림에 새 메시지를 삽입합니다. 메시지의 식별자(ID)는 자동 생성 또는 수동 지정이 가능합니다.

XADD orders-stream * product_id 1001 quantity 2 price 29.99 timestamp 1717856000

이 명령은 orders-stream이라는 이름의 스트림에 상품 주문 정보를 기록합니다. *는 자동으로 고유한 ID를 생성하도록 지시합니다.

XRANGE / XREVRANGE: 메시지 조회

특정 범위의 메시지를 순차적 또는 역순으로 가져옵니다.

XRANGE orders-stream 0 + COUNT 5

최근 5개의 메시지를 순서대로 반환합니다. 시작점은 0이며, +는 최신 메시지까지를 의미합니다.

XREAD: 단일 소비자 읽기

스트림에서 새로운 메시지를 읽고, 이후 다시 읽을 수 있도록 포인터 유지.

XREAD COUNT 3 STREAMS orders-stream 0

메시지가 존재하면 최대 3건을 반환하고, 다음 번에는 이전 위치에서 이어서 읽을 수 있습니다.

XREADGROUP: 소비자 그룹 기반 읽기

여러 소비자로 구성된 그룹 내에서 메시지를 분산 처리합니다. 각 소비자는 자신만의 오프셋을 관리합니다.

XREADGROUP GROUP order-processor customer-1 COUNT 2 STREAMS orders-stream >

그룹 order-processor에 속한 소비자 customer-1이 메시지를 처리합니다. >는 마지막 처리한 위치에서 계속 읽음을 의미합니다.

ACK 및 오프셋 관리

메시지 처리 완료 후 XACK를 통해 확인을 표시하여, 해당 메시지를 스트림에서 제거하거나 재처리 대상에서 제외합니다.

XACK order-processor orders-stream 1717856000-0

이 명령은 특정 메시지(1717856000-0)가 정상 처리되었음을 알립니다.

태그: Redis Stream Message Queue event-driven architecture consumer group XADD

6월 5일 19:23에 게시됨