데브허브 | DEVHUB | RabbitMQ + NestJS Microservices Crash Course | A Simple Order Processing ProjectRabbitMQ + NestJS Microservices Crash Course | A Simple Order Processing Project
- RabbitMQ는 마이크로서비스 간의 느슨하게 결합되고 확장 가능하며 장애 허용적인 통신을 가능하게 하는 메시지 브로커입니다. 🔗
- 메시지 브로커를 사용하면 서비스가 독립적으로 작동하고, 서비스 다운 시 메시지를 재시도하거나 큐에 보관하여 안정성을 높이며, 로드 밸런싱에 기여합니다. 🛡️
- RabbitMQ의 핵심 개념은 메시지를 보내는 생산자, 메시지를 받는 소비자, 메시지를 저장하는 큐, 메시지를 큐로 라우팅하는 교환기, 메시지 타겟팅을 돕는 라우팅 키로 구성됩니다. 📬
- NestJS는
@EventPattern 데코레이터로 메시지를 수신하고 클라이언트 프록시를 사용하여 메시지를 전송하는 등 RabbitMQ와의 연동을 간결하게 처리합니다. 🚀
- RabbitMQ는 결제 처리, 이메일 알림, 재고 업데이트 등 생산자가 응답을 기다릴 필요 없는 비동기 작업을 처리하는 데 유용합니다. ⏱️
- 실제 주문 처리 마이크로서비스 아키텍처는 API 게이트웨이가 클라이언트 요청을 받아 RabbitMQ로 '주문 생성' 메시지를 보내고, 주문, 결제, 알림 서비스가 각자의 큐에서 메시지를 받아 처리하는 방식으로 구현됩니다. 🛒
- Docker Compose를 사용하여 RabbitMQ 서버를 쉽게 설정하고, 웹 관리 대시보드(포트 15672)를 통해 큐 상태 등을 모니터링할 수 있습니다. 🐳
- NestJS에서 RabbitMQ 클라이언트 프록시를 설정하려면
@nestjs/microservices 패키지를 설치하고 ClientModule.register를 사용하며, durable: true 옵션으로 큐의 영속성을 확보합니다. ⚙️
- API 게이트웨이에서
client.emit('routing_key', payload) 메서드를 사용하여 RabbitMQ 교환기로 메시지를 발행합니다. 📤
- NestJS 애플리케이션이 Docker 컨테이너 내에서 실행될 경우 RabbitMQ 서버 주소를
localhost 대신 Docker Compose 서비스 이름(예: rabbitmq)으로 설정해야 합니다. 🌐