## 메시지 채널(Message Channel)
- 어떻게 메시징을 통신 해야할까? 메시지 채널을 통해 통신한다.
- 메시지 채널은 메시징 시스템의 논리 주소이며, 자동으로 채널이 만들어지게 하는 것보다는 시스템간 협의에 의해 미리 만들어진 배포 시 고정되는 것이 좋다. 실행 중 추가된 채널은 다른 애플리케이션이 알기 어려우므로 유용하지 못하다.
- 메시징 시스템에서는 아래와 같이 다양한 용어들이 동일한 의미로 사용되고 있다.
- 발신자와 수신자 sender receiver
- 생산자와 소비자 producer consumer
- 게시자와 구독자 publisher subscribe
- 요청자와 제공자 requester provider
- 잘 디자인된 채널 집합은 메시지 버스를 형성한다.
## 메시지
- 채널을 통해 어떻게 정보를 교환할까? 메시지로 교환한다.
- 일반적으로 데이터는 바이트 스트림으로 전달되며, header와 body 로 구성된다.
- 그러나, 애플리케이션 입장에서 메시지르 ㄹ적용하는 스타일은 아주 다양하다.
- 명령 메시지 : 원격 프로시저 호출
- 문서 메시지 : 데이터 전달
- 이벤트 메시지 : 변경 통지
- 대용량 데이터 : 메시지 순서대로 전송
- 시간 범위내에서만 유효한 데이터 : 메시지 만료 지정
- 데이터의 포맷 일치 : 정규 데이터 모델로 포맷 지정
## 파이프 필터
- 메시지에 대한 복잡한 처리 수행이 필요할 때가 있다.
- 필터와 파이프 사이의 연결 부분을 Port 라고도 부른다. 기본적으로 필터 컴포넌트마다 하나의 입력 포트와 하나의 출력 포트를 갖는다.
- ![[Pasted image 20240712105719.png]]
- 파이프 필터 아키텍처는 메시징 시스템의 기본 아키텍처 스타일이지만 필터를 많이 거치는 경우 많은 채널을 사용하게 되므로 성능에 영향을 줄 수 있다.
- 테스트가 쉬워지는 장점이 있다.
- 병렬필터는 각 필터가 stateless 인 경우 가장 잘 동작한다.
## 메시지 라우터
- 메시지 라우터는 필터의 특이형태라고 봐도 된다.
-
![[Pasted image 20240712143148.png]]
- 목적지 목록이 자주 변경되는 경우 메시지 라우터의 유지보수가 어려울 수 있다. 이런 경우 개별 수신자들에게 메시지 수신을 결정하게 하는 편이 더 효과적이다.
- RabbitMQ가 라우팅을 이용한 메시지 교환 방식이라면 Kafka는 토픽을 이용한 개별 수신 방식이다.
- 메시지 라우터의 의도적 사용은 느슨한 결함의 장점을 단점으로 바꿀 수 있다.
## 메시지 변환기 Message Translator
- 필터나 애플리케이션들 사이에 특별한 필터인 메시지 변환기를 사용해 데이터 포맷을 변환한다.
- ![[Pasted image 20240712144931.png]]
- 디자인 패턴의 어뎁터 패턴에 상응한다.
- 계층별 변환 수준
- ![[Pasted image 20240712145140.png]]
- 전송 계층 : 일번적으로 TCP/IP 프로토콜을 활용한다.
- 데이터 표현 계층 : 구문 계층 이라고도 한다. XML 등
- 데이터 형식 계층 : 도메인 모델에 기반한 애플리케이션 데이터 형식
- 데이터 구조 계층 : 도메인 모델 수준. Entity관계 등
## 메시지 엔드포인트
- 메시지 엔드포인트를 이용해 애플리케이션과 메시징 채널을 연결한다.
- ![[Pasted image 20240712145838.png]]
- 엔드포인트는 명령이나 데이터를 받아 메시지로 만들고, 메시지를 메시지 채널로 발신한 후, 메시지를 수신하고, 메시지에서 내용을 추출하고, 추출된 데이터를 애플리케이션에 절달한다.
댓글
댓글 쓰기