Redis(REmote DIctionary Server)
: 인메모리 기반의 Key-Value 저장소로, 빠른 데이터 처리와 다양한 자료구조 지원을 특징으로 하는 비관계형 데이터베이스(NoSQL)이다.
In-memory 저장소
→ 모든 데이터를 메모리에 저장하여 디스크 기반 DB보다 빠른 성능 제공
Key-Value 구조
→ 문자열뿐 아니라 리스트, 해시, 셋, 정렬된 셋 등 다양한 자료구조 지원
Persistence(지속성) 지원
→ RDB 스냅샷, AOF(Append Only File) 방식으로 디스크 저장 가능
Pub/Sub 시스템
→ 메시지 브로커처럼 채널 기반 메시징 기능 제공
Atomic 연산
→ Redis 명령어는 기본적으로 원자적으로 실행되어 데이터 정합성 보장
웹 애플리케이션 세션 저장소
캐시 서버
Queue
Pub/Sub 이벤트 브로커
Redis Queue는 Redis의 List 자료 구조를 이용하여 구현한 작업 큐 시스템이다.
| 구성 요소 | 설명 |
|---|---|
| Producer (생산자) | 작업을 생성해서 큐에 넣는 쪽. 보통 웹 서버나 API 요청 처리기 |
| Queue (큐 자체) | Redis의 List, Stream, Sorted Set 등을 사용하여 작업을 저장 |
| Consumer (소비자) | 큐에서 작업을 꺼내 처리하는 백엔드 프로세스 (worker) |
| Redis 서버 | 중간 저장소로, 작업을 안전하게 저장하고 관리함 |
| Job | 큐에 들어가는 단위 작업 데이터. JSON 객체 등으로 표현됨 |

bull은 Redis를 기반으로 한 작업 큐(queue) 처리 라이브러리이다.
npm install bull
// queue.js
import Queue from 'bull'
// Redis에 연결된 큐 생성
const myQueue = new Queue('my-job-queue', {
redis: {
host: 'localhost',
port: 6379,
},
})
// 작업 추가
myQueue.add({
type: 'sendEmail',
email: 'user@example.com',
})
// worker.js
import Queue from 'bull'
const myQueue = new Queue('my-job-queue', {
redis: {
host: 'localhost',
port: 6379,
},
})
myQueue.process(async (job) => {
const { type, email } = job.data
if (type === 'sendEmail') {
// 이메일 전송 로직
console.log(`Sending email to ${email}`)
}
})