개발일지
[기술적 의사결정] RabbitMQ vs. Kafka? | S3 이미지 업로드 및 URL 저장 RabbitMQ 도입
kimslab01
2024. 11. 8. 21:02
1. 도입 배경
프로젝트에서 S3 이미지 업로드 및 URL 저장 중 발생한 문제를 해결하는 과정에서 RabbitMQ를 도입하게 되었습니다. 다음과 같은 이유로 RabbitMQ를 선택하였습니다:
- 비동기 처리의 필요성: 이미지 업로드와 URL 저장 작업을 요청과 별도로 처리하여 클라이언트 응답 속도를 개선하려 했습니다.
- 메시지 안정성: 여러 이미지 업로드 요청을 안전하게 큐에 넣고, 문제가 발생했을 때 재처리할 수 있는 안정적인 시스템이 필요했습니다.
- 라우팅 요구: 특정 조건에 따라 메시지를 다르게 처리해야 하는 복잡한 작업 흐름을 지원할 라우팅 기능이 필요했습니다.
2. 기술 비교
특성KafkaRabbitMQ
메시지 전달 방식 | 로그 기반(스트림 저장) | 브로커 기반(큐와 주제 사용) |
설계 목적 | 대규모 데이터 스트리밍 및 분석 | 안정적인 메시지 전송 및 라우팅 |
성능 | 대규모 처리에 최적화 | 빠르고 안정적인 중소규모 처리 |
메시지 소비 방식 | 소비자가 오프셋 관리 | 브로커가 큐에 따라 메시지 전송 |
라우팅 기능 | 간단한 구조, 제한적인 라우팅 | 교환기를 통한 복잡한 라우팅 가능 |
데이터 보존 | 디스크에 영구 저장 | 소비 후 삭제(영구 저장 옵션 있음) |
사용 용도 |
로그 분석, 이벤트 스트리밍 | 비동기 작업 처리, 요청/응답 통신 |
3. 최종 결정
RabbitMQ를 선택한 이유는 다음과 같습니다:
- 비동기 작업 처리: RabbitMQ는 요청과 별도로 작업을 큐에 넣고 비동기적으로 처리할 수 있어 클라이언트의 응답 속도를 크게 개선합니다.
- 라우팅 기능: 교환기(Exchange)를 통해 복잡한 메시지 라우팅이 가능하므로, 다양한 업로드 및 URL 저장 요청을 효율적으로 분배할 수 있었습니다.
- 안정성: 메시지 전송 실패 시 재처리가 가능하며, 작업의 일관성과 안정성을 보장합니다.
- 프로젝트 요구에 적합: Kafka는 대규모 데이터 스트림 처리에 강점이 있지만, 중소규모 비동기 작업인 이미지 업로드 및 URL 저장에는 RabbitMQ가 더 적합했습니다.