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