Post

[CS 지식] Redis

Redis란 무엇인가? Redis Queue를 javascript로 구현하기

[CS 지식] Redis

✏️ Redis

Redis(REmote DIctionary Server)
인메모리 기반의 Key-Value 저장소로, 빠른 데이터 처리와 다양한 자료구조 지원을 특징으로 하는 비관계형 데이터베이스(NoSQL)이다.


◼︎ Redis의 주요 특징

  • In-memory 저장소 → 모든 데이터를 메모리에 저장하여 디스크 기반 DB보다 빠른 성능 제공

  • Key-Value 구조 → 문자열뿐 아니라 리스트, 해시, 셋, 정렬된 셋 등 다양한 자료구조 지원

  • Persistence(지속성) 지원 → RDB 스냅샷, AOF(Append Only File) 방식으로 디스크 저장 가능

  • Pub/Sub 시스템 → 메시지 브로커처럼 채널 기반 메시징 기능 제공

  • Atomic 연산 → Redis 명령어는 기본적으로 원자적으로 실행되어 데이터 정합성 보장


◼︎ Redis는 어디에 쓰이나

  1. 웹 애플리케이션 세션 저장소

  2. 캐시 서버

  3. Queue

  4. Pub/Sub 이벤트 브로커




✏️ Redis Queue

Redis Queue는 Redis의 List 자료 구조를 이용하여 구현한 작업 큐 시스템이다.


◼︎ 구성요소

| 구성 요소 | 설명 | |———–|——| | Producer (생산자) | 작업을 생성해서 큐에 넣는 쪽. 보통 웹 서버나 API 요청 처리기 | | Queue (큐 자체) | Redis의 List, Stream, Sorted Set 등을 사용하여 작업을 저장 | | Consumer (소비자) | 큐에서 작업을 꺼내 처리하는 백엔드 프로세스 (worker) | | Redis 서버 | 중간 저장소로, 작업을 안전하게 저장하고 관리함 | | Job | 큐에 들어가는 단위 작업 데이터. JSON 객체 등으로 표현됨 |


◼︎ 구현 W/JS

bull은 Redis를 기반으로 한 작업 큐(queue) 처리 라이브러리이다.

1. 설치

1
npm install bull

2. 기본 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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',
})


3. 작업 처리 (Consumer)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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}`)
  }
})
This post is licensed under CC BY 4.0 by the author.