Celery + Redis vs Celery + RabbitMQ: 어떤 선택이 더 나을까?

2025. 2. 17. 00:17·AlgoMate

 

크롤링 서버를 구축하는 과정에서 크롤링이 오래걸려 사용자가 기다려야 하는데, 너무 오래 걸려서 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

✅ 장점

  1. 설정이 간단함
    • Redis는 Key-Value 스토어로 작동하며, 설치와 설정이 매우 간편하다.
    • Celery에서 Redis를 브로커로 사용하려면 몇 줄의 설정만 추가하면 된다.
  2. 빠른 속도
    • Redis는 메모리 기반이므로 작업을 매우 빠르게 처리할 수 있다.
    • 작은 규모의 작업 처리에서는 매우 뛰어난 성능을 보인다.
  3. 다양한 활용 가능
    • 단순 메시지 브로커뿐만 아니라 캐시(Cache), 세션 저장소(Session Store) 등 다양한 용도로 사용할 수 있다.

❌ 단점

  1. 메시지 영속성이 낮음
    • 기본적으로 Redis는 비휘발성 데이터 저장소가 아니므로, 시스템이 갑자기 종료되면 메시지가 유실될 가능성이 있다.
    • appendonly 모드를 사용하면 일부 해결 가능하지만, 성능이 저하될 수 있다.
  2. 메시지 큐 기능이 RabbitMQ보다 부족함
    • Redis는 기본적으로 Pub/Sub 모델을 지원하지만, 메시지 우선순위, 라우팅, 재시도 메커니즘 등이 RabbitMQ보다 부족하다. 

🎯 Celery + RabbitMQ

✅ 장점

  1. 메시지 영속성 보장
    • RabbitMQ는 디스크에 메시지를 저장할 수 있어, 시스템 장애 발생 시에도 메시지가 손실되지 않는다.
    • 중요한 작업을 처리할 때 더욱 안정적인 선택이다.
  2. 고급 메시징 기능 지원
    • RabbitMQ는 Exchange, Queue, Routing Key를 통해 복잡한 메시지 라우팅이 가능하다.
    • 작업의 우선순위, 딜레이 큐(Delayed Queue) 등을 보다 정교하게 설정할 수 있다.
  3. 확장성 및 고가용성
    • RabbitMQ는 여러 개의 노드를 클러스터링할 수 있어 수평 확장(Scale-out) 이 가능하다.
    • 대규모의 작업 분산이 필요할 경우, Redis보다 RabbitMQ가 더 적합할 수 있다.

❌ 단점

  1. 설정이 복잡함
    • RabbitMQ는 설정이 다소 복잡하고 운영 부담이 크다.
    • Redis처럼 단순한 Key-Value 스토어가 아니라 AMQP 프로토콜을 사용하므로, 처음 접할 때 학습 비용이 필요하다.
  2. 속도가 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
'AlgoMate' 카테고리의 다른 글
  • 🚀 크롤링 서버 vs 메인 서버, 크롤링한 데이터를 어디서 저장해야 할까?
  • 🔑 크롤링&스크래핑에서 쿠키를 사용하여 로그인 상태 유지하기
  • 🚀 동적으로 파일을 제공하는 방법
  • Spring Boot 단위 테스트: @Mock 과 @InjectionMocks의 원리와 활용
SungHoJung
SungHoJung
  • SungHoJung
    HOLOUD
    SungHoJung
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • AlgoMate (13)
      • TroubleShooting (0)
      • 여러가지 모음집 (4)
      • Infra (18)
  • 링크

    • github
  • 인기 글

  • 태그

    ci-cd
    컨테이너 간 통신
    redis
    host.docker.internal
    크롤링
    EC2
    bypass recaptcha
    메세지 브로커
    celery+redis
    Celery
    AWS
    크롤링한 데이터
    recaptcha 우회
    IAM
    docker-compose
    ECS
    스왑 메모리 설정
    로컬 서버와 통신
    k8s
    Kubernetes
  • hELLO· Designed By정상우.v4.10.3
SungHoJung
Celery + Redis vs Celery + RabbitMQ: 어떤 선택이 더 나을까?
상단으로

티스토리툴바