
크롤링 서버를 구축하는 과정에서 크롤링이 오래걸려 사용자가 기다려야 하는데, 너무 오래 걸려서 UX가 좋지 않은 것 같아 이 문제를 해결하는 과정에서 Celery를 사용하게 되었다. 메세지 브로커를 선택하는 과정에서 Redis 와 RabbitMQ, Amazon SQS, Kafka 등이 사용될 수 있는데 작은 서비스의 경우에는 Redis 와 RabbitMQ이 둘 사이에 고민하는 게 맞는 것 같아서 둘을 비교하고 나에게 적합한 메세지 큐를 선택하려고 한다.
🔥 Celery의 메시지 브로커 선택
Celery는 분산 작업 큐(Distributed Task Queue)로, 비동기 작업을 처리하는 데 널리 사용된다. Celery는 메시지 브로커(Message Broker)를 통해 작업을 전달하며, 대표적인 브로커로 Redis와 RabbitMQ가 있다.
그러면 Celery + Redis와 Celery + RabbitMQ의 차이점은 무엇일까? 어떤 상황에서 어떤 선택이 더 적합할까? 이를 비교해보자.
🎯 Celery + Redis
✅ 장점
- 설정이 간단함
- Redis는 Key-Value 스토어로 작동하며, 설치와 설정이 매우 간편하다.
- Celery에서 Redis를 브로커로 사용하려면 몇 줄의 설정만 추가하면 된다.
- 빠른 속도
- Redis는 메모리 기반이므로 작업을 매우 빠르게 처리할 수 있다.
- 작은 규모의 작업 처리에서는 매우 뛰어난 성능을 보인다.
- 다양한 활용 가능
- 단순 메시지 브로커뿐만 아니라 캐시(Cache), 세션 저장소(Session Store) 등 다양한 용도로 사용할 수 있다.
❌ 단점
- 메시지 영속성이 낮음
- 기본적으로 Redis는 비휘발성 데이터 저장소가 아니므로, 시스템이 갑자기 종료되면 메시지가 유실될 가능성이 있다.
- appendonly 모드를 사용하면 일부 해결 가능하지만, 성능이 저하될 수 있다.
- 메시지 큐 기능이 RabbitMQ보다 부족함
- Redis는 기본적으로 Pub/Sub 모델을 지원하지만, 메시지 우선순위, 라우팅, 재시도 메커니즘 등이 RabbitMQ보다 부족하다.
🎯 Celery + RabbitMQ
✅ 장점
- 메시지 영속성 보장
- RabbitMQ는 디스크에 메시지를 저장할 수 있어, 시스템 장애 발생 시에도 메시지가 손실되지 않는다.
- 중요한 작업을 처리할 때 더욱 안정적인 선택이다.
- 고급 메시징 기능 지원
- RabbitMQ는 Exchange, Queue, Routing Key를 통해 복잡한 메시지 라우팅이 가능하다.
- 작업의 우선순위, 딜레이 큐(Delayed Queue) 등을 보다 정교하게 설정할 수 있다.
- 확장성 및 고가용성
- RabbitMQ는 여러 개의 노드를 클러스터링할 수 있어 수평 확장(Scale-out) 이 가능하다.
- 대규모의 작업 분산이 필요할 경우, Redis보다 RabbitMQ가 더 적합할 수 있다.
❌ 단점
- 설정이 복잡함
- RabbitMQ는 설정이 다소 복잡하고 운영 부담이 크다.
- Redis처럼 단순한 Key-Value 스토어가 아니라 AMQP 프로토콜을 사용하므로, 처음 접할 때 학습 비용이 필요하다.
- 속도가 Redis보다 느릴 수 있음
- RabbitMQ는 메시지를 디스크에 저장하기 때문에 Redis보다 처리 속도가 느릴 수 있다.
- 하지만 속도를 향상시키기 위해 메모리 기반 큐를 활용할 수도 있다.
💡 어떤 선택이 적절할까?
| Celery + Redis | Celery + RabbitMQ | |
| 설정 난이도 | 간단함 | 상대적으로 복잡함 |
| 속도 | 빠름 (메모리 기반) | 상대적으로 느림 (디스크 저장 가능) |
| 메세지 영속성 | 낮음 (데이터 유실 가능) | 높음 (디스크 저장 지원) |
| 메시지 큐 기능 | 단순한 Pub/Sub | 복잡한 라우팅, 우선순위 지원 |
| 확장성 | 단일 노드에서 간편 사용 | 클러스터링 및 대규모 확장 가능 |
✅ Redis를 추천하는 경우
- 빠른 속도가 필요하고 메시지 유실이 큰 문제가 되지 않는 경우
- 간단한 Celery 작업을 처리할 때
- 추가적인 캐시 기능이 필요할 때
✅ RabbitMQ를 추천하는 경우
- 메시지의 안정성과 영속성이 중요한 경우 (예: 결제 시스템, 대규모 작업 처리)
- 복잡한 메시지 라우팅과 우선순위 처리가 필요한 경우
- 확장성과 고가용성이 중요한 경우
🚀 결론: Redis vs RabbitMQ, 당신의 선택은?
Celery에서 Redis와 RabbitMQ는 각각의 장단점이 있기 때문에, 프로젝트의 요구사항에 따라 선택하는 것이 중요하다.
- Redis는 빠르고 간단하게 설정할 수 있지만, 메시지 영속성이 낮고 메시지 큐 기능이 제한적이다.
- RabbitMQ는 메시지 영속성이 강하고 강력한 메시징 기능을 제공하지만, 설정과 운영이 더 복잡하다.
🚀 만약 단순한 작업 큐가 필요하다면 Redis를, 복잡하고 안정적인 메시징 시스템이 필요하다면 RabbitMQ를 선택하자!
'AlgoMate' 카테고리의 다른 글
| 🚀 크롤링 서버 vs 메인 서버, 크롤링한 데이터를 어디서 저장해야 할까? (0) | 2025.02.17 |
|---|---|
| 🔑 크롤링&스크래핑에서 쿠키를 사용하여 로그인 상태 유지하기 (0) | 2025.02.17 |
| 🚀 동적으로 파일을 제공하는 방법 (2) | 2025.02.16 |
| Spring Boot 단위 테스트: @Mock 과 @InjectionMocks의 원리와 활용 (2) | 2025.02.14 |
| AlgoMate#3 - docker 로 띄운 DB 에 접근하기(PostgreSQL) (2) | 2025.02.01 |