Notice
Recent Posts
Recent Comments
Link
헬창 개발자
메시지 브로커(Redis)와 Celery 본문
✏️ Redis란?
Redis(REmote DIctionary Server)는 인메모리 기반의 오픈소스 NoSQL 데이터 저장소입니다.
데이터를 RAM에 저장하여 빠른 읽기/쓰기 성능을 제공합니다.
주요 특징
- NoSQL: 키-값(key-value) 기반 저장소
- 기본 자료구조 지원: String, List, Set, Hash, Sorted Set 등
- 싱글 스레드 기반: 구조는 단순하지만 성능은 매우 뛰어남
- 다양한 언어 지원: Python, Node.js, Java, Go 등 클라이언트 제공
💡 기존 DB가 있는데도 Redis를 사용하는 이유가 뭘까?
DB는 데이터를 디스크에 직접 저장(write)하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는데
매번 디스크에 접근해야하기 때문에 사용자가 많아질 수록 부하가 많아져서 느려질 수 있어서 캐시 서버를 도입하여 사용해야한다.
이 캐시 서버로 이용할 수 있는 것이 바로 Redis이다.
Redis의 활용 사례
캐싱 | DB 부하 감소 및 응답 속도 향상 (자주 쓰는 데이터 저장) |
세션 관리 | 분산 서버 환경에서 세션 공유 |
실시간 랭킹 | Sorted Set을 이용한 리더보드 구현 |
메시지 큐 / Pub-Sub | 실시간 채팅, 알림 시스템에 활용 |
분산 락 | 여러 서버 간 자원 접근 제어 |
카운터 | 방문자 수, 이벤트 카운트 등 실시간 통계 처리 |
데이터베이스 용도 | 영속성 옵션을 설정해 NoSQL DB처럼 사용 가능 |
Redis의 영속성(Persistence)
RAM 기반 저장소지만 데이터를 디스크에 저장할 수 있는 두 가지 방식 제공:
RDB (Snapshot) | 주기적으로 메모리 데이터를 디스크에 저장 (스냅샷) |
AOF (Append Only File) | 모든 쓰기 명령을 로그처럼 기록하여 높은 복구 가능성 제공 |
✏️ Celery란?
Celery는 비동기 작업 처리(Async Task Queue)와 스케줄링을 위한 파이썬 기반 프레임워크입니다.
복잡한 작업을 백그라운드에서 비동기로 처리하여 애플리케이션의 응답성을 향상시킵니다.
주요 특징
- Task Queue 시스템: 작업을 큐에 넣고 Worker가 비동기로 처리
- Message 기반 아키텍처: 클라이언트 ↔ 브로커 ↔ 워커 간 메시지로 통신
- 높은 확장성: 여러 개의 Worker와 Broker를 통해 수평 확장 가능
- 멀티 언어 지원: Python 외에도 다양한 언어에서 사용 가능
- 스케줄링 가능: 주기적 작업(Cron job)도 수행 가능
메시지 브로커
Celery는 메시지를 주고받기 위해 Broker를 사용합니다.
- 대표적인 브로커: Redis, RabbitMQ
- 역할: 클라이언트가 보낸 작업 메시지를 Worker에게 전달
동작 구조 요약
- Client가 작업(Task)을 요청
- Broker가 메시지를 전달
- Worker가 메시지를 수신하고 비동기로 작업 수행
- (선택) 결과 백엔드를 통해 작업 결과 저장/조회 가능

많은 사람들이 Celery를 사용할 때 Broker로 RabbitMQ나 Redis 중 무엇을 써야 할지 헷갈려 하죠.
RabbitMQ | Redis | |
역할 | 전통적인 메시지 브로커 | 키-값 저장소 기반의 메시지 브로커 |
신뢰성 | 높음 (메시지 보존/재전송 가능) | 낮음 (재시작 시 메시지 유실 가능) |
속도 | 안정적이고 빠름 | 더 빠름 (특히 짧은 작업에 유리) |
기능 | 복잡한 라우팅, Ack, Dead Letter 등 | 기본 Pub/Sub 수준의 라우팅만 지원 |
설정 난이도 | 복잡함 | 간단함 |
Celery 지원 | 공식 1등 지원 | 지원은 되지만 몇몇 기능이 제한됨 |
참고
https://velog.io/@osj1405/FastAPI-Celery
'공부방' 카테고리의 다른 글
Sync/Async & Blocking/Non-blocing (2) | 2025.06.30 |
---|---|
종속성 관리 - 서브모듈, 서브트리 (0) | 2025.06.17 |
docker health check (0) | 2025.05.09 |
논문 리뷰: s1: Simple test-time scaling (1) | 2025.02.18 |
논문 리뷰: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning (3) | 2025.02.05 |