
백엔드
재고의 변동을 시계열 데이터로?!
두줄요약
Redis Stream으로 재고 변동 이력을 시계열 데이터로 쌓아 조회 비효율을 줄인 사례를 소개했습니다. 날짜 단위 키와 범위 분할 조회로 순서 보장과 성능을 함께 고려했습니다.
문제 상황
- 모든 매장·상품의 재고를 주기적으로 색인하는 과정에서 1,000만 SKU 이상의 대량 조회가 반복됨
- Redis Hash 구조는 최신 재고만 보관해 전체 데이터를 매번 훑어야 하는 비효율 발생
- 주기적 대량 조회로 Redis CPU와 API Latency 급증
원인 분석
- 재고 변동 이력이 없어서 시점별 재고 추적이 어려움
- 전체 데이터를 한 번에 조회하는 방식이 Redis 단일 스레드 특성과 맞물려 부담 증가
- 조회 범위가 크면 XRANGE의 처리량이 커져 성능 저하 위험
해결 방법
- 판매·입고·반품·폐기 등 재고 변동 이벤트를 Redis Stream에 누적 기록
- Stream Key를 날짜 단위로 분리하고 TTL을 부여해 당일 데이터 중심으로 관리
- XRANGE를 시간 구간별로 나누어 조회하고, Reactive 방식으로 병렬 처리
성능/운영 포인트
- Redis Stream의 append-only 시계열 특성으로 처리 순서와 범위 조회를 동시에 확보
- 조회 범위를 너무 넓히지 않고, 시스템별 적절한 시간 분할 간격을 탐색
- 분포도를 분석해 조회 횟수와 단일 명령어 부하 사이의 균형 조정
