개발하면서 Message Queue (메시지 큐)라는 기술에 대해서 어렵지 않게 들을 수 있다.
‘RabbitMQ’ ‘Kafka’ ‘Amazon SQS’ 등이 바로 이 메시지 큐를 활용한 프로그램이다.
Message Queue? 나는 처음들어보는데..
만일 한번도 Message Queue와 프로그램들의 이름을 들어보지 못했을 수도 있지만, 개발을 진행하다보면 결국 마주치는 기술이라는 것을 명심하면 좋겠다.
Message Queue란?
‘Message Queue’는 데이터 송수신을 위한 중간 매개체 역할을 한다.
메시지를 안전하게 보내고 받는 기술이라 할 수 있다.
메세지를 큐형태로 존재하는 어떠한 보관함에 넣어두고 시스템간 의존도를 낮추고, 비동기 통신을 활용해 데이터 손실을 최소화하는 것이 핵심이다.

메세지 전송 시, 생산자(Producer) 컴포넌트가 메세지를 보관함에 (메시지 큐)에 추가한다.
보관함의 메시지는 소비자(Consumer) 컴포넌트가 메시지를 검색하고, 이를 사용해 어떤 작업을 수행할 때까지 메시지 큐에 저장된다. 각 메시지는 Producer - Consumer의 1:1 방식으로 매칭된다.
(저장방식 offset, cleanup policy, retuntion 등..) 옵션에 따라 달라진다.
소비자에게 매칭된 메시지는 가공 혹은 시스템에 전송한다.
Message Queue 장점
- 비동기 : 데이터를 수신자에게 바로 보내지않고, 큐에 넣어 관리하여 지연처리 가능
- 낮은 결합도 : 생산자 - 소비자의 서비스가 독립적으로 운영되므로 낮은 결합도를 가질 수 있음
- 탄력성 : 소비자 서비스가 비정상적으로 다운되더라도 메세지는 큐에 남아있어, 재 실행시 추가작업 없이
메세지 처리가능
- 확장성 : N:1:N 개념이기 때문에 다수의 프로세스들이 큐에 메세지를 보낼 수 있음
- 보장성 : 큐에 보관되는 모든 메세지는 결국 소비자 서비스에 전달
Message Queue 단점
- 일반적인 성능저하 : 아키텍쳐에 외부의 메시지 전송 에이전트가 필요함. 새로운 요소 추가됨에 따른 성능저하 발생가능
- 유지보수 비용 증가 : 생산자 - 메세지 - 소비자 간의 복잡한 시스템 설계 가능성에 다른 유지보수의 어려움 발생가능
- 표준규격의 부재 : 표준 규격의 부재로 인한 호환문제 발생 가능
주요 사용 사례
- 주문처리 : 전자 상거래 플랫폼에서 주문과 결제를 비동기적으로 처리
- 로그&이벤트 처리 : 시스템 로그와 이벤트 데이터를 효율적으로 수집, 처리
- 작업 큐 : 백그라운드 작업을 관리하고 작업 스케줄링을 관리
자주 볼 수 있는 Kafka
- 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템
- 단순한 메시지 헤더를 지닌 TCP 기반 프로토콜을 사용하여 프로토콜에 의한 오버헤드 감소시킴
- 다수의 메세지를 전송할 때 각 메세지를 개별적으로 전달하는 기존 시스템과 달리, 다수의 메세지의 Batch 형태로 Broker에게 한 번에 전달할 수 있어 TCP/IP 라운드 트립 횟수를 줄임.
- 메세지를 파일 시스템에 저장하기 때문에 데이터의 영속성을 보장
- 다른 Message Queue와 다르게 메세지 양에 따른 성능감소가 적음
- 기존 메시징 시스템은 소비자에게 Push 해주는 반면, kafka는 소비자가 직접 Pull하는 방식
참고자료