Queues
무엇인가
커피숍을 떠올려 보라: 카운터에서 주문하고 자리를 떠나면, 바리스타가 주문표를 하나씩 처리한다. 큐()란 바로 그 주문표의 줄이다. Cloudflare Queues는 이 발상 위에 세워진, Workers를 위한 관리형 메시지 큐다. 한 Worker가 큐에 메시지를 밀어 넣고(생산자, 주문을 받는 점원과 같다), 다른 Worker가 그 메시지들의 배치(batch)와 함께 호출되어 처리한다(소비자, 바리스타와 같다). 이를 통해 느리거나 불안정한 작업을 그 작업을 촉발한 요청으로부터 떼어낼 수 있다 — 요청은 빠르게 받아들이고, 작업은 백그라운드에서 한다.
강점
- 생산자와 소비자를 분리해 트래픽 급증을 평탄하게 한다.
- 자동 배칭, 재시도, 그리고 데드레터 큐(dead-letter queue, 계속 실패하는 메시지를 모아두는 보관 영역)로 아무것도 조용히 사라지지 않는다.
- 순수 Workers 통합 — 생산자와 소비자 모두 바인딩을 가진 Worker다.
- 운영할 인프라가 없으며, 트래픽에 따라 확장된다.
- 최소 1회 전달(at-least-once)을 보장하여 메시지가 조용히 사라지지 않는다.
트레이드오프
- 최소 1회 전달이므로 소비자는 멱등(, 같은 메시지를 두 번 처리해도 해를 끼치지 않고 안전함)해야 한다(중복을 처리해야 한다).
- 즉각적인 동기 응답에는 적합하지 않다 — 작업은 비동기로 일어난다.
- 순서는 최선 노력(best-effort)이며 엄격한 전역 순서가 아니다.
- 처리량과 메시지 크기에 한도가 있어 이를 고려해 설계해야 한다.
언제 쓰나
백그라운드 작업에 Queues를 써라: 이메일 발송, 업로드 처리, 느린 서드파티 (애플리케이션 프로그래밍 인터페이스, 다른 서비스와 소통하는 데 쓰는 엔드포인트) 호출, 웹훅 팬아웃, 쓰기 버퍼링 — 사용자를 기다리게 하고 싶지 않은 모든 것.
바이브 코딩 적합성
Queues는 에이전트가 브로커를 세우지 않고 백그라운드 처리를 추가하는 깔끔한 방법이다. 소비자를 멱등하게(메시지 키를 사용해) 만들고, 실패가 보이도록 데드레터 큐를 설정하도록 요청하라. 아래 설정은 하나의 Worker를 큐의 생산자이자 소비자로 연결한다.
# wrangler.toml
[[queues.producers]]
queue = "jobs"
binding = "JOBS"
[[queues.consumers]]
queue = "jobs"
max_batch_size = 10
dead_letter_queue = "jobs-dlq"
npx wrangler queues create jobs
npx wrangler deploy