❓Redis란? Redis는 Remote Dictionary Server의 약자로 Key-Value 기반의 인메모리 데이터 저장소이다. 일반적인 데이터베이스는 하드디스크나 SSD 등 물리적인 저장장치에 데이터를 저장하지만 Redis는 데이터를 메모리에 저장하여 디스크
이번에 Redis 기반 쿠폰 발급 시스템을 구현하면서, 동시에 수많은 사용자가 쿠폰을 요청하는 상황에서 동시성 이슈를 해결하기 위한 방법을 고민하게 되었다. 단순히 Redis의 INCR, SET, EXISTS 명령어를 순차적으로 호출하면 중간에 끼어드는 요청 때문에 비
단순한 Lua 검증만으로는 발급 순서가 꼬이는 문제가 있었기 때문에, 큐를 함께 사용해 정확한 순서 보장이 가능하도록 개선했다.기존에는 Redis Lua 스크립트 하나로 쿠폰 발급을 처리하고 있었다.Controller → CouponIssueService.issueCo
⚠️ 기존 문제 이전까지는 Redisson 분산 락 + Lua 기반의 처리 구조를 사용했지만 발급 요청을 큐에 등록하기 전에 Lua 검증이 병렬로 수행되다 보니 Redis 상태(count 증가)와 Kafka 이벤트 전송/DB 저장 사이의 타이밍 이슈가 생겨 순서대로 큐
BRPOP(Blocking Right POP)은 Redis에서 큐(List)의 오른쪽 끝에서 아이템을 꺼내는데 없으면 일정 시간 기다렸다가 꺼내는 명령어이다.key : 데이터를 꺼낼 리스트timeout : 대기할 시간 (초 단위, 0이면 무한대기)예시coupon_que