분산 시스템에서는 트래픽 폭주나 특정 서비스의 장애가 전체 시스템의 마비로 이어지는 것을 반드시 막아야 합니다. 생산자와 소비자가 직접 동기적으로 통신하면 서로의 상태에 강하게 결합되어 유연한 대처가 불가능해집니다. 따라서 데이터베이스가 감당할 수 없는 대규모 요청을 중간에서 **완충(Buffering)**하고 전반적인 응답 시간을 단축할 장치가 필요합니다. 이를 통해 일부 서비스가 다운되더라도 데이터 유실을 방지하고 시스템의 **내결함성(Fault Tolerance)**을 확보할 수 있습니다.
느슨한 결합(Decoupling)의 극대화
각 마이크로서비스가 상대방의 물리적 위치(IP)나 상태를 알 필요 없이, 오직 큐라는 매개체와 통신하여 독립적으로 배포 및 확장되는 격리 환경을 제공합니다.
- **Message Queue(메시지 큐)**는 프로세스나 프로그램 간에 데이터를 비동기적으로 교환할 수 있도록 해주는 통신 아키텍처이자 임시 데이터 저장 공간입니다.
- Producer (생산자): 데이터를 생성하여 큐에 보내는(발행하는) 주체입니다.
- Message Queue (브로커): 생산자가 보낸 메시지를 안전하게 보관하고 라우팅하는 중간 버퍼 공간입니다.
- Consumer (소비자): 큐에 연결되어 보관된 메시지를 가져와서(구독하여) 처리하는 주체입니다.
실제 시스템에서 메시지 큐는 다음과 같은 방식으로 작동하여 성능을 최적화하고 장애를 격리합니다.
- 비동기 응답성 향상: Producer는 무거운 작업을 직접 수행하며 기다리지 않고, 큐에 지시 메시지만 전달한 뒤 즉시 사용자에게 응답하여 **지연 시간(Latency)**을 단축합니다.
- 트래픽 완충(Load Leveling): 대규모 이벤트 발생 시 쏟아지는 요청을 큐에 쌓아두어, 백엔드 서버가 실시간으로 모든 부하를 감당하다 다운되는 것을 원천적으로 방지합니다.
- 소비자 주도 처리: Consumer는 실제 복잡한 처리를 백그라운드에서 비동기적으로 수행하되, 본인의 데이터베이스가 감당 가능한 속도로 큐에서 메시지를 가져옵니다.
- 장애 격리와 데이터 복구: Consumer에 이슈가 생겨 다운되더라도 발행된 메시지는 큐에 안전하게 보관되며, 복구 후 큐에 남은 메시지부터 순차적으로 처리를 재개하여 데이터 유실을 막습니다.