개요

Redis는 인메모리 데이터 구조 저장소로 캐싱, 세션 관리, 실시간 분석 등에 널리 사용됩니다. Redis 8.0은 2025년에 출시되며, 이전에 별도 모듈이었던 Redis Stack의 기능들(Search, JSON, Time Series, Probabilistic)이 코어에 통합되었습니다. 이 글에서는 Redis 8.0의 새로운 기능과 실시간 데이터 처리 패턴을 살펴봅니다.

핵심 개념

Redis Search 통합: 기존에 RediSearch 모듈로 제공되던 전문 검색과 벡터 검색이 Redis 코어에 통합되었습니다. FT.SEARCH, FT.AGGREGATE 명령어로 별도 검색 엔진 없이 Redis 안에서 복합 쿼리가 가능합니다.

Redis JSON 통합: JSON 데이터를 네이티브하게 저장하고 JSONPath로 부분 조회/수정이 가능합니다. 기존 Hash보다 유연한 데이터 모델링이 가능합니다.

Redis Streams 개선: 이벤트 소싱과 메시지 큐 패턴에 적합한 Streams가 더욱 개선되었습니다. Consumer Group 관리가 간편해지고, 자동 트리밍 성능이 향상되었습니다.

라이선스 변경: Redis 8.0부터 다시 오픈소스(AGPLv3 + SSPLv1 듀얼)로 전환되어 커뮤니티 생태계가 활성화되고 있습니다.

실전 예제

Redis 8.0의 통합 검색과 실시간 처리 패턴입니다.

# JSON 문서 저장
JSON.SET product:1001 $ '{
  "name": "무선 키보드",
  "price": 89000,
  "category": "전자기기",
  "tags": ["키보드", "무선", "블루투스"],
  "stock": 150
}'

# 검색 인덱스 생성 (JSON 필드 기반)
FT.CREATE idx:products
  ON JSON PREFIX 1 product:
  SCHEMA
    $.name AS name TEXT WEIGHT 5.0
    $.price AS price NUMERIC SORTABLE
    $.category AS category TAG
    $.tags[*] AS tags TAG
    $.stock AS stock NUMERIC

# 복합 검색: 전자기기 카테고리에서 가격 5만원 이상
FT.SEARCH idx:products
  "@category:{전자기기} @price:[50000 +inf]"
  SORTBY price ASC
  LIMIT 0 10

Node.js에서 Redis Streams를 활용한 이벤트 처리 패턴입니다.

import { createClient } from 'redis';

const redis = createClient({ url: 'redis://localhost:6379' });
await redis.connect();

// 이벤트 발행
await redis.xAdd('orders:stream', '*', {
  orderId: '12345',
  userId: 'user_001',
  amount: '89000',
  status: 'created'
});

// Consumer Group 생성
await redis.xGroupCreate('orders:stream', 'payment-service', '0', {
  MKSTREAM: true
});

// Consumer에서 이벤트 소비
const messages = await redis.xReadGroup(
  'payment-service',
  'consumer-1',
  { key: 'orders:stream', id: '>' },
  { COUNT: 10, BLOCK: 5000 }
);

for (const msg of messages?.[0]?.messages || []) {
  console.log('주문 처리:', msg.message);
  await redis.xAck('orders:stream', 'payment-service', msg.id);
}

활용 팁

  • 캐시 패턴: Cache-Aside 패턴보다 Write-Through 패턴이 데이터 일관성을 보장합니다. Redis JSON과 함께 사용하면 부분 업데이트도 가능합니다.
  • Rate Limiting: Redis의 INCR과 EXPIRE를 조합한 Sliding Window Rate Limiter는 API 서버의 필수 패턴입니다.
  • 세션 관리: Redis JSON을 활용하면 세션 데이터의 특정 필드만 업데이트할 수 있어, 전체 세션을 직렬화/역직렬화하는 오버헤드를 줄일 수 있습니다.
  • Pub/Sub vs Streams: 단순 이벤트 브로드캐스트는 Pub/Sub, 이벤트 영속성과 재처리가 필요하면 Streams를 사용하세요.
  • 메모리 관리: maxmemory-policy를 allkeys-lfu로 설정하면 접근 빈도 기반으로 가장 효율적인 메모리 관리가 가능합니다.

마무리

Redis 8.0은 단순 캐시를 넘어 실시간 데이터 플랫폼으로 진화하고 있습니다. Search, JSON, Streams의 코어 통합으로 별도 인프라 없이도 복합적인 실시간 데이터 처리가 가능해졌습니다. 마이크로서비스 아키텍처에서 Redis의 역할이 더욱 확대될 것으로 기대됩니다.