피드로 돌아가기
쿠폰 발급 RabbitMQ도입기
올리브영 테크블로그올리브영 테크블로그
Backend

쿠폰 발급 RabbitMQ도입기

쿠폰 스쿼드가 Redis Worker에서 RabbitMQ로 마이그레이션하여 세일 행사 중 과도한 요청 처리 안정성 확보 및 기능 확장성 개선

2023년 9월 18일7intermediate

Context

Redis List 기반 MQ는 기능 확장에 제한이 있었으며, 네고왕·세일 같은 행사 기간 중 과도한 요청 처리 시 불안정성이 발생했다. 보다 안정적인 쿠폰 발급 처리와 기능적 확장이 필요했다.

Technical Solution

  • Redis Worker 대체로 AWS Managed RabbitMQ 도입: Kafka와의 PoC 비교를 통해 파티션 축소 불가 특성으로 인한 Kafka 제외
  • RabbitMQ Concurrency 내부 메커니즘 활용: 기존 일련번호 기반 List 조회 방식을 RabbitMQ의 내부 병렬 처리로 간소화
  • Direct Exchange 방식 채택: 세일 행사 및 기타 쿠폰 발급 메시지 라우팅 구성
  • Prefetch 및 Concurrency 설정 코드 기반 구성: RabbitMQ Config를 애플리케이션 코드에서 직접 관리
  • 두 가지 발급 시나리오 통합: 세일 행사 발급과 고객 쿠폰 대량 발급 처리를 RabbitMQ로 통합

Impact

세일 행사 기간 중 발급량이 안정적으로 처리되었으며, 기존 과도한 요청 처리 시 발생하던 불편 사항이 해결되었다.

Key Takeaway

이벤트 기반 트래픽 변동이 큰 서비스에서는 Kafka의 고정 파티션 정책보다 RabbitMQ의 유연한 메시지 교환 방식이 더 적합할 수 있으며, 내부 Concurrency 메커니즘 활용으로 비동기 처리 로직을 단순화할 수 있다.


Redis List 기반 비동기 큐를 사용하는 전자상거래 서비스에서 RabbitMQ의 Direct Exchange와 Prefetch/Concurrency 설정을 도입하면, 세일 행사 같은 트래픽 스파이크 시에도 메시지 처리 안정성을 확보하고 일련번호 기반 조회 로직을 내부 병렬 처리로 대체하여 개발 복잡도를 낮출 수 있다.

원문 읽기