- 비동기 메세지를 사용하는 프로그램 간 데이터 송수신
MOM 기반의 시스템은 위의 그림과 같이 클라이언트, 메시지, 메시지 브로커(broker)로 구성된다.
- 클라이언트는 메시지의 송신 혹은 수신 중 하나의 행동만 수행할 수 있다.
- 메시지의 송·수신은 API를 이용하여 이루어진다.
- 브로커는 송신측 클라이언트로부터 받은 메시지를 목적지(destination)에 저장하여 수신 측 클라이언트의 요청이 발생할 때까지 보관한다.
메시지 지향 미들웨어의 장, 단점
장점
- 보관 : 메시지의 백업을 유지함으로써 지속성을 제공, 덕분에 송수신 측은 동시에 네트워크 연결을 유지할 필요 없음
- 라우팅 : 미들웨어 계층 자신이 직접 메시지 라우팅이 가능하기 때문에, 하나의 메시지를 여러 수신자에게 배포가 가능해짐(멀티캐스트)
- 변환 : 송수신 측의 요구에 따라 메시지를 변환할 수 있음
단점
- 아키텍처에 외부 구성 요소인 메시지 전송 에이전트가 필요, 새로운 요소를 추가할 경우 시스템 성능이 저하되고, 신뢰성이 떨어짐
- 시스템이 복잡해지기 때문에 관리가 어렵고 비용이 발생
- 애플리케이션 간의 통신은 본질적으로 동기지만, 메시지 기반 통신은 본질적으로 비동기이기 때문에 메커니즘 불일치가 발생
- 표준이라고 부를 규격이 존재하지 않기 때문에 호환이 안될 수도 있음
- Message Queue 혹은 MQ라고 부른다.
- 프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신 방법 중에 하나로,
메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다.- 비동기 메시지를 사용하는 서비스들 사이에서 데이터를 교환해주는 역할을 한다.
- PRODUCER가 메시지를 큐에 전송하면 CONSUMER가 처리하는 방식으로, PRODUCER와 CONSUMER 사이에 메시지 프로세스가 추가되는 것이 특징이다.
- 비동기: 데이터를 수신자에게 바로 보내지 않고 큐에 넣고 관리하기 때문에 나중에 처리 가능
- 낮은 결합도 : PRODUCER와 CONSUMER가 독립적으로 행동하게 됨으로써 서비스 간 결합도가 낮아짐
- 탄력성 : 일부가 실패하더라도 전체에 영향을 주지 않음
- 과잉 : 실패할 경우 재실행 가능
- 보장성 : 큐에 저장된 모든 메시지가 CONSUMER에게 전달되는 것을 보장
- 확장성 : PRODUCER 또는 CONSUMER를 원하는 대로 확장 가능
- 다른 곳의 API로부터 데이터 송수신 가능
- 다양한 애플리케이션에서 비동기 통신 가능
- 이메일 발송 및 문서 업로드 가능
- 이미지, 비디오 등 대용량 데이터 처리등 메모리를 많이 쓰는 작업
대표적 종류로 RabbitMQ, ActiveMQ(JMS), Kafka가 있다.
RabbitMQ, ActiveMQ(JMS)는 신뢰성 있는 메시지 브로커가 필요한 경우 사용하고,
Kafka는 처리량이 많은 분산 메시징 시스템에 사용된다.
🙇 참고 사이트 🙇 https://gwamssoju.tistory.com/107 https://cerulean85.tistory.com/458 https://velog.io/@yujiniii/%EB%A9%94%EC%84%B8%EC%A7%80%ED%81%90