POLLING은 서버나 시스템이 새 데이터가 있는지 주기적으로 계속 요청해서 확인하는 방식이다.
예시
매 1초마다 LPOP coupon_queue
1초마다 줄에 데이터가 있는지 확인한다.
BLOCKING은 "데이터가 없으면 잠깐 멈추고 기다렸다가 생기면 바로 응답하는 방식"이다.
구분 | POLLING | BLOCKING |
---|---|---|
동작 방식 | 주기적으로 새 데이터 확인 | 데이터가 생길 때까지 대기 |
리소스 사용 | 반복 요청으로 리소스 소모 큼 | 리소스 효율적 사용 |
반응 속도 | 요청 주기에 따라 다름 | 데이터 생성 즉시 반응 |
BRPOP(Blocking Right POP)은 Redis에서 큐(List)의 오른쪽 끝에서 아이템을 꺼내는데 없으면 일정 시간 기다렸다가 꺼내는 명령어이다.
BRPOP key timeout
key
: 데이터를 꺼낼 리스트timeout
: 대기할 시간 (초 단위, 0이면 무한대기)예시
BRPOP coupon_queue 5
coupon_queue에 아이템이 없으면 5초 동안 기다렸다가 생기면 꺼낸다.
BLPOP(Blocking Left POP)은 Redis에서 큐(List)의 왼쪽 끝에서 아이템을 꺼내는데 없으면 일정 시간 기다렸다가 꺼내는 명령어이다.
BLPOP key timeout
예시
BLPOP coupon_queue 5
coupon_queue에 아이템이 없으면 5초 동안 기다렸다가 생기면 꺼낸다.
구분 | BLPOP | BRPOP |
---|---|---|
꺼내는 방향 | 왼쪽 (Front) | 오른쪽 (Back) |
특징 | FIFO(선입선출) 방식에 적합 | 생산자-소비자 모델에 적합 |
예시 | 선착순 처리 | 작업 분배, 작업 결과 수집 |
둘 다 Blocking 방식이지만 꺼내는 방향만 다르다.
예시
RPUSH coupon_queue "userId:100"
BLPOP coupon_queue 0
RPUSH로 사용자 ID를 줄에 넣고 BLPOP으로 워커가 바로 꺼내어 발급 처리한다.
Blocking POP(BLPOP/BRPOP)을 활용하면 POLLING 없이도 효율적인 대기가 가능하다는 걸 알게 되었다. 특히 선착순 쿠폰 발급처럼 "빠르고 정확한 응답" 이 필요한 서비스에서
Blocking 큐 기반 처리는 정말 효과적인 패턴이라는 걸 체감했다.
POLLING 방식은 간단하지만 서버 리소스가 불필요하게 낭비될 수 있고 대규모 트래픽이 걸리는 시스템에서는 적합하지 않다는 것도 이번 경험을 통해 확실히 이해할 수 있었다. 앞으로 실시간성이 필요한 서비스에서는 Blocking 처리를 먼저 고려해야겠다.