[TIL]비동기 메세징

비동기 메세징

메세징은 서비스  메세지를 통해 비동기적으로
주고 받는 통신 방식.

메세징은 브로커라는 인프라 서비스의 이용 유무에 따라 나뉜다.(찾아보기)

브로커 기반 메세징 모델은 송신자,메세지 채널,수신자로 구성되며

송신자와 수신자  메세지 채널을 통해 메세지를 교환한다.

송신자는 메세지 채널에 메세지를 쓰고
수신자는 메세지 채널에 메세지를 읽는다.

메시지란?

메시징 서비스에서 송신자와  수신자  교환되는 데이터 단위.
메시지는 헤더와 바디(본문)으로 구성된다.

메세지의 종류에는 document, command, event가 있고

document : 데이터만을 포함한 제너릭한 메세지.
해당 document메세지는 데이터를 전달하기만 하며, 해당 메세지를
어떻게 해석하여 어떤 작업을 수행할 지는 수신자가 결정한다.

command : 호출할 작업과 매개변수를 전달하고 수신자가
어떤 작업을 수행할지 지정하는 메세지, RFC요청과 비슷한 개념의 메세지.

event : 어떤 사건의 발생과 상태의 변화를 나타내고,
이러한 송신자의 사건의 발생  상태의 변화를 알리는 메세지

매세지 채널
메세지 채널은 메세징 인프라내의 송신자와 수신자를 연결하는 가상의 통로이며
채널에서는 Point to Point, Publish and Subscribe 두가지 종류가 있다

왜 비동기 메세징을 사용하는가?

현대 소프트웨어 아키텍처 MSA에서는 서비스의 민첩성,고가용성,확장성 등을 위해
서비스간의 느슨한 결합을 강조하며
느슨한 결합은  서비스의 구성요소들  의존성을 최소화하는 것을 목표로 한다.
의존성이 최소화하게 되면

1. 비즈니스 민첩성 : 서비스간의 결합을 줄여 서비스의 변경  테스트 등이 용이

2. 뛰어난 성능 : 송수신자는 메세지 큐를 통해 데이터를 교환

한쪽의 서비스가 중단되어도 다른 한쪽은 메세지 큐를 통해 여전히 상호작용을   있다.
또한 메세지 큐에서 메세지를 읽는 것은 실패해도 
해당 메세지는 메세지 큐에 저장되어 있기 때문에 메세지 읽기를 재시도   있다.

3. 확장성 : 메세지 , 송신자, 수신자는 분리되어 있으며 
메세지 큐를 중심으로 각자 독립적으로 확장이 가능하다
이러한 확장성을 기반으로 분산 처리에 용이하다.

4. 편의성 :  수신자의 처리 성능이나 환경에 대한 고려가 줄어든다.
따라서 불필요한 상호작용의 최소화로 각자의 비즈니스 로직에만 집중할  있다

비동기 메세징 시스템의 종류

위와  같은 메세징 기반 통신을 구현한 소프트웨어를 메세지 지향 미들웨어
MOM : Message Oriented Middleware라고 하며
많은 메세지 지향 미들웨어는 메세지 (MQ) 시스템을 기반으로 한다.

대표적인 메세지  시스템 : Kafka, RabbitMQ , ActiveMQ , IBM MQ