개발일지

[기술적 의사결정] RabbitMQ vs. Kafka? | S3 이미지 업로드 및 URL 저장 RabbitMQ 도입

kimslab01 2024. 11. 8. 21:02

 

 

1. 도입 배경

프로젝트에서 S3 이미지 업로드 및 URL 저장 중 발생한 문제를 해결하는 과정에서 RabbitMQ를 도입하게 되었습니다. 다음과 같은 이유로 RabbitMQ를 선택하였습니다:

  • 비동기 처리의 필요성: 이미지 업로드와 URL 저장 작업을 요청과 별도로 처리하여 클라이언트 응답 속도를 개선하려 했습니다.
  • 메시지 안정성: 여러 이미지 업로드 요청을 안전하게 큐에 넣고, 문제가 발생했을 때 재처리할 수 있는 안정적인 시스템이 필요했습니다.
  • 라우팅 요구: 특정 조건에 따라 메시지를 다르게 처리해야 하는 복잡한 작업 흐름을 지원할 라우팅 기능이 필요했습니다.

 

 

2. 기술 비교

특성KafkaRabbitMQ

메시지 전달 방식 로그 기반(스트림 저장) 브로커 기반(큐와 주제 사용)
설계 목적 대규모 데이터 스트리밍 및 분석 안정적인 메시지 전송 및 라우팅
성능 대규모 처리에 최적화 빠르고 안정적인 중소규모 처리
메시지 소비 방식 소비자가 오프셋 관리 브로커가 큐에 따라 메시지 전송
라우팅 기능 간단한 구조, 제한적인 라우팅 교환기를 통한 복잡한 라우팅 가능
데이터 보존 디스크에 영구 저장 소비 후 삭제(영구 저장 옵션 있음)
사용 용도
로그 분석, 이벤트 스트리밍 비동기 작업 처리, 요청/응답 통신

 

 

3. 최종 결정

RabbitMQ를 선택한 이유는 다음과 같습니다:

  1. 비동기 작업 처리: RabbitMQ는 요청과 별도로 작업을 큐에 넣고 비동기적으로 처리할 수 있어 클라이언트의 응답 속도를 크게 개선합니다.
  2. 라우팅 기능: 교환기(Exchange)를 통해 복잡한 메시지 라우팅이 가능하므로, 다양한 업로드 및 URL 저장 요청을 효율적으로 분배할 수 있었습니다.
  3. 안정성: 메시지 전송 실패 시 재처리가 가능하며, 작업의 일관성과 안정성을 보장합니다.
  4. 프로젝트 요구에 적합: Kafka는 대규모 데이터 스트림 처리에 강점이 있지만, 중소규모 비동기 작업인 이미지 업로드 및 URL 저장에는 RabbitMQ가 더 적합했습니다.