내 잡다한 노트
Communication 본문
1. Message-Oriented Middleware (메시지 지향 미들웨어)
- 메시지 지향 미들웨어는 높은 수준의 영속적(persistent) 비동기 통신을 목표로 설계되었습니다.
- 이 방식에서는 프로세스 간의 직접적인 동기화를 요구하지 않으며, 메시지가 **큐(queue)**에 저장됩니다.
2. 주요 특징
- 메시지 전달:
- 프로세스 간에 메시지가 주고받아지며, 이 메시지들은 큐에 저장됩니다.
- 큐는 메시지를 보관하여 수신자가 준비될 때 전달되도록 보장합니다.
- 비동기 통신:
- 송신자는 즉각적인 응답을 기다릴 필요가 없습니다.
- 응답을 기다리지 않고 다른 작업을 수행할 수 있습니다.
- 이는 시스템의 효율성을 높이는 데 기여합니다.
- 장애 내성(Fault Tolerance):
- 미들웨어는 메시지의 안정적인 전달과 장애 상황에서의 복구를 보장합니다.
- 예: 메시지가 손실되지 않도록 보장하거나, 네트워크 오류 발생 시 재시도 메커니즘을 지원.
3. 장점
- 비동기성:
- 송신자와 수신자가 동시에 동작하지 않아도 작업 수행 가능.
- 유연성:
- 큐를 사용해 메시지를 버퍼링하므로, 수신자가 바쁘거나 다운되더라도 메시지가 손실되지 않음.
- 확장성:
- 분산 시스템에서 더 많은 노드가 추가되어도 메시지 전달 메커니즘이 동일하게 유지됨.
4. 단점
- 복잡성 증가:
- 큐 관리와 메시지 지연에 따른 처리가 필요.
- 실시간 요구사항에 부적합:
- 메시지가 큐에 저장되므로, 실시간 응답이 필요한 경우 적합하지 않을 수 있음.
5. 사용 사례
- 분산 시스템:
- 프로세스 간의 느슨한 결합(loose coupling)을 유지하며 비동기 통신이 필요한 환경.
- 메시지 큐 시스템:
- RabbitMQ, Kafka, AWS SQS 같은 메시지 브로커에서 사용.
- 마이크로서비스 아키텍처:
- 서비스 간 비동기 통신을 구현하기 위해 활용.
3. 주요 연산
OperationDescription
put | 지정된 큐에 메시지를 추가합니다. |
get | 큐가 비어 있지 않을 때까지 대기한 후 첫 번째 메시지를 제거하고 반환합니다. |
poll | 지정된 큐에서 메시지를 확인하고 첫 번째 메시지를 제거합니다(절대 대기하지 않음). |
notify | 특정 큐에 메시지가 추가되었을 때 호출될 핸들러를 등록합니다. |
4. 각 연산의 의미
- put:
- 송신자가 큐에 메시지를 추가.
- 메시지는 큐에 영속적으로 저장되어 수신자가 준비되면 처리됩니다.
- get:
- 수신자가 큐에서 메시지를 가져오며, 큐가 비어 있으면 대기(blocking).
- 메시지를 처리한 후 큐에서 제거.
- poll:
- 메시지를 가져오는 동작은 get과 유사하지만, 큐가 비어 있어도 대기하지 않음(non-blocking).
- notify:
- 특정 조건(예: 메시지가 큐에 추가됨)에 따라 지정된 핸들러를 호출.
Message-Oriented Persistent Communication: Message-Oriented Middleware (MOM)
1. 기본 개념
- 메시지 큐잉 시스템(Message Queuing System):
- 애플리케이션들은 공통의 메시징 프로토콜을 기반으로 동작하며, 메시지 구조와 데이터 표현 방식에 대해 합의합니다.
- 이를 통해 이질적인 애플리케이션 간의 통신을 가능하게 만듭니다.
2. Broker의 역할
메시지 브로커는 메시지 큐잉 시스템에서 애플리케이션 간 **이질성(heterogeneity)**을 처리하는 중요한 역할을 합니다.
- 메시지 변환:
- 브로커는 수신된 메시지를 타겟 애플리케이션이 이해할 수 있는 포맷으로 변환합니다.
- 예: JSON 형식으로 받은 메시지를 XML 형식으로 변환.
- 애플리케이션 게이트웨이 역할:
- 브로커는 서로 다른 애플리케이션 간 중재자(gateway) 역할을 수행합니다.
- 서로 다른 프로토콜, 메시지 포맷, 또는 데이터 구조를 사용하는 애플리케이션 간의 통신을 가능하게 합니다.
- Subject-Based Routing (주제 기반 라우팅):
- 브로커는 Publish-Subscribe 모델을 지원하여 메시지를 특정 주제(topic)나 구독자(subscriber)에게 전달합니다.
- 이는 메시지를 필요한 수신자에게만 전달하도록 최적화합니다.
3. 장점
- 애플리케이션 이질성 해결:
- 서로 다른 형식과 프로토콜을 사용하는 애플리케이션 간 통신을 원활하게 만듭니다.
- 확장성:
- Publish-Subscribe 라우팅을 통해 대규모 분산 시스템에서도 효율적인 메시지 전달 가능.
- 유연성:
- 메시지 포맷 변환과 게이트웨이 역할로 애플리케이션 간 통합을 단순화.
4. 단점
- 브로커 의존성:
- 브로커가 단일 장애 지점(Single Point of Failure)이 될 수 있음.
- 이를 방지하려면 복제 및 클러스터링이 필요.
- 추가적인 처리 비용:
- 메시지 변환 및 라우팅 과정에서 추가적인 성능 오버헤드 발생.
5. 사용 사례
- 분산 시스템 통합:
- 서로 다른 시스템 간의 데이터 통합과 통신.
- 마이크로서비스 아키텍처:
- 서비스 간 비동기 통신과 이벤트 전달.
- 실시간 알림 시스템:
- Publish-Subscribe 모델을 활용한 다수의 구독자 대상 알림.