메시지 주도
1. 개요
1. 개요
메시지 주도는 소프트웨어 구성 요소 간의 통신 방식으로, 구성 요소가 메시지를 생성하고 전송하여 다른 구성 요소와 비동기적으로 상호 작용하는 아키텍처 패턴이다. 이 패턴은 메시지 생산자가 메시지 채널을 통해 메시지를 발행하면, 메시지 소비자가 이를 비동기적으로 수신하고 처리하는 방식으로 동작한다. 중간에 메시지 브로커가 메시지의 라우팅, 변환, 배달 보장 등의 역할을 담당하는 경우가 많다.
이 접근법의 핵심은 비동기 통신과 느슨한 결합에 있다. 송신자와 수신자가 서로의 상태나 위치를 직접 알 필요 없이 메시지만을 주고받으므로, 시스템 구성 요소 간의 의존성이 크게 줄어든다. 이는 특히 마이크로서비스 아키텍처나 분산 시스템에서 각 서비스의 독립적인 개발, 배포, 확장을 가능하게 하는 기반이 된다.
메시지 주도 아키텍처는 확장성과 신뢰성을 주요 장점으로 한다. 비동기 처리를 통해 피크 시간의 부하를 완화할 수 있고, 메시지 브로커가 메시지의 지속성과 재시도 메커니즘을 제공함으로써 일시적인 장애에도 시스템의 견고성을 유지할 수 있다. 따라서 이벤트 기반 시스템, 엔터프라이즈 애플리케이션 통합, 복잡한 비즈니스 프로세스의 오케스트레이션 등 다양한 용도로 널리 사용된다.
이는 소프트웨어 아키텍처와 분산 컴퓨팅의 중요한 패러다임으로, 이벤트 주도 아키텍처와 밀접한 관련이 있다. 두 패턴 모두 이벤트나 메시지를 통한 상태 변화의 전파를 강조하지만, 메시지 주도는 통신의 메커니즘과 인프라에 더 초점을 맞춘다.
2. 핵심 개념
2. 핵심 개념
2.1. 메시지
2.1. 메시지
메시지는 메시지 주도 아키텍처에서 구성 요소 간에 교환되는 데이터의 기본 단위이다. 이는 특정 형식으로 구조화된 정보 패키지로, 발신자(생산자)가 수신자(소비자)에게 전달하려는 명령, 알림, 데이터 업데이트 등을 담고 있다. 메시지의 내용은 일반적으로 JSON이나 XML과 같은 표준화된 형식으로 직렬화되며, 메시지 헤더와 본문으로 구성되는 경우가 많다. 헤더에는 메시지의 유형, 목적지, 식별자, 타임스탬프와 같은 메타데이터가 포함되고, 본문에는 실제 전달하려는 비즈니스 데이터나 이벤트 정보가 담긴다.
메시지는 크게 명령 메시지와 이벤트 메시지로 구분할 수 있다. 명령 메시지는 수신자에게 특정 작업을 수행하도록 지시하는 요청이다. 예를 들어, "주문 생성"이나 "결제 처리"와 같은 명령이 이에 해당한다. 반면, 이벤트 메시지는 시스템 내에서 이미 발생한 사건에 대한 알림이다. "주문이 생성됨"이나 "결제가 완료됨"과 같은 메시지는 상태의 변화를 다른 구성 요소에 브로드캐스트하여 후속 작업을 트리거하는 데 사용된다. 이러한 이벤트 메시지는 이벤트 주도 아키텍처와 밀접한 관련이 있다.
메시지의 핵심 가치는 송신자와 수신자 사이의 직접적인 연결을 필요로 하지 않는 데 있다. 생산자는 메시지의 최종 소비자가 누구인지, 또는 현재 사용 가능한지 알 필요 없이 메시지를 메시지 채널에 발행하기만 하면 된다. 마찬가지로 소비자는 메시지가 언제 생성될지 모르는 상태에서 채널을 구독하고 메시지가 도착할 때까지 기다린다. 이는 시스템 구성 요소 간의 느슨한 결합을 실현하는 근간이 된다.
효율적인 메시지 설계는 시스템의 신뢰성과 성능에 직접적인 영향을 미친다. 메시지는 불변성을 유지하는 것이 일반적이며, 한 번 생성되면 그 내용이 변경되지 않는다. 또한, 멱등성(동일한 메시지를 여러 번 처리해도 결과가 동일함)을 보장하도록 설계되면 네트워크 장애나 재시도로 인한 중복 처리 문제를 완화할 수 있다. 메시지의 크기와 형식은 사용되는 메시지 브로커나 메시지 큐의 특성에 맞게 최적화되어야 한다.
2.2. 비동기 통신
2.2. 비동기 통신
비동기 통신은 메시지 주도 아키텍처의 핵심 동작 원리이다. 이 방식에서는 메시지 생산자가 메시지를 메시지 채널에 전송한 후, 즉시 다음 작업을 수행할 수 있다. 메시지 소비자는 자신의 처리 속도에 맞춰 채널에서 메시지를 가져와 비동기적으로 처리한다. 이는 발신자가 수신자의 즉각적인 응답을 기다리지 않는 통신 모델로, 동기 통신과 대비되는 개념이다.
비동기 통신의 주요 장점은 시스템 구성 요소 간의 느슨한 결합을 가능하게 한다는 점이다. 생산자와 소비자는 서로의 상태나 가용성을 직접 알 필요 없이, 중간의 메시지 브로커나 메시지 큐를 통해 간접적으로 소통한다. 이로 인해 한 구성 요소의 장애나 지연이 다른 구성 요소로 직접 전파되지 않으며, 시스템의 신뢰성과 복원력이 향상된다.
또한, 이 방식은 시스템의 확장성을 크게 높인다. 소비자 측의 처리 부하가 증가하면 더 많은 소비자 인스턴스를 추가하여 병렬로 메시지를 처리할 수 있다. 반대로, 생산자의 요청이 급증하더라도 메시지 큐에 임시로 저장되어 소비자의 처리 능력을 초과하는 부하를 완충하는 역할을 한다. 이는 마이크로서비스 아키텍처나 이벤트 기반 시스템에서 변동성이 큰 워크로드를 효과적으로 관리하는 데 필수적이다.
그러나 비동기 통신은 복잡성을 수반한다. 메시지 전달의 보장, 순서 유지, 중복 처리 방지, 장애 복구 등의 문제를 해결해야 한다. 또한, 전체 시스템의 흐름을 추적하고 디버깅하기가 동기식 호출에 비해 더 어려울 수 있다. 따라서 메시지 주도 시스템을 설계할 때는 이러한 분산 컴퓨팅의 고유한 과제를 충분히 고려해야 한다.
2.3. 느슨한 결합
2.3. 느슨한 결합
느슨한 결합은 메시지 주도 아키텍처의 핵심 설계 원칙 중 하나이다. 이는 시스템을 구성하는 개별 구성 요소들이 서로에 대해 최소한의 정보만을 가지고 독립적으로 동작할 수 있도록 하는 것을 의미한다. 구성 요소들은 직접적인 호출이나 강한 의존 관계를 맺는 대신, 표준화된 메시지를 통해 간접적으로 통신한다. 이로 인해 한 구성 요소의 내부 구현이 변경되더라도, 그것이 외부에 노출하는 메시지의 형식만 유지된다면 다른 구성 요소들에게 영향을 미치지 않는다.
이러한 접근 방식은 시스템의 유지보수성과 확장성을 크게 향상시킨다. 새로운 기능을 가진 구성 요소를 추가하거나 기존 구성 요소를 교체할 때, 시스템의 다른 부분을 크게 수정할 필요가 없어진다. 또한, 각 구성 요소가 독립적으로 개발, 배포, 확장될 수 있으므로, 마이크로서비스 아키텍처와 같은 현대적인 분산 시스템 구축에 매우 적합한 기반을 제공한다.
느슨한 결합은 비동기 통신과 밀접한 관계가 있다. 메시지를 보내는 생산자는 메시지를 즉시 처리할 소비자의 상태를 알 필요가 없으며, 메시지 브로커나 메시지 큐와 같은 중간 매개체를 통해 전송하기만 하면 된다. 소비자는 자신의 처리 능력에 맞게 메시지를 가져와 비동기적으로 처리할 수 있다. 이는 시스템의 전체적인 신뢰성과 탄력성을 높이는 데 기여한다.
그러나 느슨한 결합은 완전한 무관계를 의미하지는 않는다. 구성 요소들은 여전히 공유된 메시지 형식이나 프로토콜에 대해 합의되어 있어야 하며, 이는 시스템 전체의 상호운용성을 보장하는 계약의 역할을 한다. 따라서 메시지의 스키마 설계와 버전 관리는 느슨한 결합 시스템에서 중요한 고려 사항이 된다.
3. 아키텍처 패턴
3. 아키텍처 패턴
3.1. 메시지 큐
3.1. 메시지 큐
메시지 큐는 메시지 주도 아키텍처를 구현하는 핵심 구성 요소 중 하나이다. 이는 메시지 생산자와 메시지 소비자 사이에 위치하는 중간 저장소 역할을 하며, 생산자가 전송한 메시지가 소비자가 처리할 준비가 될 때까지 안전하게 보관한다. 이 구조는 생산자와 소비자가 서로의 존재나 상태를 직접 알 필요 없이 메시지를 통해 간접적으로 통신할 수 있게 하여, 시스템 간의 느슨한 결합을 실현한다.
메시지 큐의 동작 방식은 일반적으로 비동기적이다. 생산자는 메시지를 큐에 전송한 후 즉시 다른 작업을 수행할 수 있으며, 소비자는 자신의 처리 속도에 맞춰 큐에서 메시지를 가져와 처리한다. 이는 특히 처리 시간이 긴 작업이나 부하가 변동하는 시스템에서 유용하며, 생산자와 소비자의 처리 속도 차이를 완화하는 버퍼 역할을 한다. 또한, 메시지가 큐에 지속적으로 저장되기 때문에 소비자 시스템에 장애가 발생하더라도 메시지가 유실되지 않고 복구 후 재처리될 수 있어 신뢰성을 높인다.
메시지 큐는 다양한 형태로 구현된다. 간단한 형태로는 메시지 브로커 없이 애플리케이션 내부에서 관리되는 인메모리 큐가 있을 수 있지만, 대규모 분산 시스템에서는 Apache Kafka, RabbitMQ, Amazon SQS와 같은 전문 미들웨어가 널리 사용된다. 이러한 기술들은 고가용성, 확장성, 지속성과 같은 엔터프라이즈급 기능을 제공하며, 마이크로서비스 아키텍처에서 서비스 간 통신의 표준 수단으로 자리 잡았다.
메시지 큐의 설계 시에는 메시지 전달 보장 수준(최대 한 번, 적어도 한 번, 정확히 한 번), 메시지 순서 보장, 메시지 만료 정책, 데드 레터 큐 처리 방식 등을 고려해야 한다. 또한, 큐가 단일 장애점이 되지 않도록 클러스터링 및 복제 구성을 신경 써야 하며, 시스템 모니터링과 성능 튜닝도 중요한 관리 요소이다.
3.2. 메시지 브로커
3.2. 메시지 브로커
메시지 브로커는 메시지 주도 아키텍처의 핵심 구성 요소로, 메시지 생산자와 메시지 소비자 사이에서 메시지의 라우팅, 변환, 전달을 중개하는 소프트웨어이다. 생산자가 특정 소비자를 직접 알지 못해도 메시지를 브로커에 전송하면, 브로커가 사전에 정의된 규칙이나 패턴에 따라 적절한 소비자에게 메시지를 전달한다. 이는 시스템 구성 요소 간의 느슨한 결합을 실현하는 데 필수적이다.
메시지 브로커는 주로 메시지 큐와 발행-구독 패턴이라는 두 가지 기본 통신 모델을 지원한다. 메시지 큐 모델에서는 생산자가 특정 큐에 메시지를 보내면, 일반적으로 하나의 소비자가 그 메시지를 가져가 처리한다. 반면, 발행-구독 모델에서는 생산자가 특정 토픽에 메시지를 발행하면, 해당 토픽을 구독한 모든 소비자에게 메시지가 복제되어 전달된다. 이러한 모델들은 비동기 통신을 가능하게 하여 생산자와 소비자의 처리 속도 차이를 완화하고 시스템의 전체적인 처리량과 응답성을 높인다.
주요 메시지 브로커 구현체로는 Apache Kafka, RabbitMQ, Apache ActiveMQ, Amazon SQS 등이 있다. 각 구현체는 지속성, 전달 보장 수준(최소 한 번, 정확히 한 번), 처리량, 지연 시간 등에서 서로 다른 특성을 가지며, 시스템의 요구사항에 따라 선택된다. 예를 들어, Apache Kafka는 높은 처리량과 내구성에 중점을 둔 분산 이벤트 스트리밍 플랫폼인 반면, RabbitMQ는 다양한 메시징 프로토콜을 지원하는 범용 메시지 브로커로 널리 사용된다.
메시지 브로커를 도입할 때는 운영 복잡성 증가, 브로커 자체가 단일 장애점이 될 가능성, 메시지 순서 보장과 같은 문제를 고려해야 한다. 또한, 마이크로서비스 아키텍처나 이벤트 주도 아키텍처와 같은 분산 시스템에서 서비스 간 통신, 데이터 파이프라인 구축, 실시간 알림 시스템 구현 등에 효과적으로 활용된다.
3.3. 발행-구독 패턴
3.3. 발행-구독 패턴
발행-구독 패턴은 메시지 주도 아키텍처를 구현하는 대표적인 패턴 중 하나이다. 이 패턴에서는 메시지 생산자(발행자)가 특정 주제나 채널에 메시지를 발행하고, 관심 있는 메시지 소비자(구독자)들이 해당 주제를 구독하여 메시지를 수신한다. 발행자와 구독자는 서로를 직접 알 필요가 없으며, 중간에 위치한 메시지 브로커가 발행된 메시지를 적절한 구독자들에게 전달하는 역할을 담당한다. 이로써 시스템 구성 요소 간의 느슨한 결합이 실현된다.
이 패턴의 핵심은 비동기 통신을 통해 발행자가 메시지를 보내고 나면 즉시 다른 작업을 계속할 수 있다는 점이다. 구독자는 자신의 처리 속도에 맞춰 메시지를 비동기적으로 수신하고 처리한다. 또한, 하나의 메시지를 여러 구독자가 동시에 수신할 수 있어, 동일한 이벤트를 기반으로 여러 하위 시스템이 독립적으로 반응해야 하는 이벤트 기반 시스템에 매우 적합하다. 예를 들어, 주문 생성 이벤트가 발생하면 재고 관리, 배송 처리, 고객 알림 등 다양한 서비스가 동시에 이를 구독하여 각자의 업무를 수행할 수 있다.
발행-구독 패턴은 이벤트 주도 아키텍처와 밀접한 관계가 있다. 이벤트 주도 아키텍처는 상태의 변화를 나타내는 이벤트의 발생과 전파에 기반을 두는데, 이러한 이벤트의 전파 메커니즘으로 발행-구독 모델이 널리 채택된다. 이 패턴을 구현하는 주요 기술로는 Apache Kafka, RabbitMQ, Google Cloud Pub/Sub 등의 메시지 큐 및 스트리밍 플랫폼이 있다. 이러한 기술들은 대용량 메시지 처리, 장애 허용, 확장성 등을 제공하여 복잡한 분산 시스템과 마이크로서비스 아키텍처의 통합 백본으로 자리 잡았다.
3.4. 이벤트 주도 아키텍처와의 관계
3.4. 이벤트 주도 아키텍처와의 관계
메시지 주도 아키텍처는 이벤트 주도 아키텍처와 밀접한 관련이 있으며, 종종 함께 사용되거나 혼용되어 언급된다. 두 패턴 모두 시스템 내 구성 요소 간의 느슨한 결합과 비동기 통신을 핵심 원칙으로 삼는다. 그러나 미묘한 차이가 존재하는데, 메시지 주도 아키텍처는 통신의 메커니즘과 수단에 초점을 맞춘다. 즉, 메시지 브로커나 메시지 큐와 같은 인프라를 통해 명시적으로 정의된 메시지를 주고받는 방식 자체를 강조한다.
반면, 이벤트 주도 아키텍처는 상태의 변화나 발생한 사건, 즉 '이벤트'를 중심으로 시스템의 흐름을 구성하는 더 넓은 아키텍처 철학에 가깝다. 이벤트는 메시지의 한 형태로 간주될 수 있으며, 발행-구독 패턴을 통해 전파되는 경우가 많다. 따라서 메시지 주도 방식은 이벤트 주도 시스템을 구현하기 위한 구체적인 통신 수단으로 활용된다고 볼 수 있다.
요약하면, 메시지 주도는 '어떻게' 통신하는지에 관한 것이고, 이벤트 주도는 '무엇을' 중심으로 시스템이 반응하고 구성되는지에 관한 것이다. 현대의 마이크로서비스 아키텍처나 복잡한 분산 시스템에서는 이벤트의 발생을 메시지로 패키징하여 비동기적으로 전달하는 방식, 즉 두 패턴의 장점을 결합한 이벤트 기반 시스템이 널리 채택되고 있다.
4. 장점
4. 장점
메시지 주도 아키텍처의 가장 큰 장점은 시스템 구성 요소 간의 느슨한 결합을 가능하게 한다는 점이다. 생산자는 특정 소비자의 상태나 위치를 알 필요 없이 메시지만 채널에 발행하면 되며, 소비자 역시 메시지의 발신자를 알지 못한 채 비동기적으로 메시지를 처리할 수 있다. 이는 시스템의 일부를 독립적으로 개발, 배포, 확장 또는 교체할 수 있게 하여 전체 아키텍처의 유연성과 유지보수성을 크게 향상시킨다.
또한, 비동기 통신을 기본으로 하기 때문에 시스템의 응답성과 확장성이 뛰어나다. 발행자는 메시지를 전송한 후 즉시 다른 작업을 수행할 수 있으며, 소비자는 자신의 처리 능력에 맞춰 메시지를 가져와 처리할 수 있다. 이는 특히 처리 시간이 길거나 부하가 변동성이 큰 작업에 유리하며, 메시지 큐를 버퍼로 활용함으로써 순간적인 트래픽 급증을 효과적으로 완화할 수 있다.
신뢰성 측면에서도 장점을 가진다. 대부분의 메시징 미들웨어는 메시지의 지속성, 전달 보증, 재시도 메커니즘 등을 제공한다. 이는 네트워크 장애나 소비자 시스템의 일시적 다운과 같은 상황에서도 메시지가 유실되지 않고 안정적으로 처리될 수 있도록 보장한다. 따라서 분산 시스템이나 마이크로서비스 환경에서 서비스 간 통신의 견고함을 높이는 데 기여한다.
마지막으로, 시스템 통합과 모니터링에 유리한 구조를 제공한다. 다양한 애플리케이션이 표준화된 메시지 형식으로 통신함으로써 이기종 시스템 간의 통합이 용이해진다. 또한, 모든 상호작용이 명시적인 메시지를 통해 이루어지기 때문에 메시지 흐름을 추적하고, 시스템의 상태를 모니터링하며, 디버깅을 수행하는 것이 상대적으로 수월해진다.
5. 단점 및 고려사항
5. 단점 및 고려사항
메시지 주도 아키텍처는 여러 장점을 제공하지만, 구현과 운영 시 고려해야 할 단점과 복잡성이 존재한다. 가장 큰 과제 중 하나는 시스템의 전반적인 복잡도 증가이다. 메시지 흐름이 명시적이지 않고 비동기적으로 발생하기 때문에, 트랜잭션의 흐름을 추적하고 디버깅하는 것이 어려워진다. 또한 메시지의 순서 보장, 중복 전송 방지, 장애 허용 처리와 같은 분산 시스템의 고전적인 문제들을 직접 처리해야 한다.
운영 측면에서도 주의가 필요하다. 메시지 브로커나 메시지 큐와 같은 중간 매개체가 단일 장애점이 될 수 있으며, 이 구성 요소의 가용성과 성능이 전체 시스템의 안정성을 좌우한다. 따라서 브로커의 클러스터링, 모니터링, 백업 전략을 수립하는 것이 필수적이다. 또한 메시지가 큐에 누적되거나 소비자가 지연될 경우 시스템의 지연 시간이 증가할 수 있어, 메시지 처리량과 대기 시간을 지속적으로 관리해야 한다.
개발과 테스트의 난이도도 상대적으로 높은 편이다. 동기식 호출에 비해 비동기 통신의 동작을 시뮬레이션하고, 메시지 전달 실패나 네트워크 분할 상황과 같은 예외 시나리오를 테스트하는 과정이 더 복잡하다. 메시지의 스키마가 변경될 경우 생산자와 소비자 간의 호환성을 유지하는 것도 중요한 고려사항이 된다.
마지막으로, 이러한 아키텍처는 특정 문제 해결에 최적화되어 있으므로 모든 상황에 적합하지는 않다. 실시간 응답이 요구되는 상호작용이나 매우 단순한 애플리케이션의 경우, 메시지 주도 방식이 오히려 불필요한 오버헤드를 초래할 수 있다. 따라서 시스템의 요구사항을 신중히 평가한 후 도입 여부를 결정하는 것이 바람직하다.
6. 주요 기술 및 구현체
6. 주요 기술 및 구현체
메시지 주도 아키텍처를 구현하기 위한 핵심 기술로는 메시지 브로커와 메시지 큐가 있으며, 이를 제공하는 다양한 상용 및 오픈소스 구현체가 존재한다. 대표적인 메시지 브로커로는 Apache Kafka, RabbitMQ, Apache ActiveMQ, Amazon SQS 등이 있다. Apache Kafka는 고성능의 분산 스트리밍 플랫폼으로, 높은 처리량과 내구성을 제공하여 실시간 데이터 파이프라인에 널리 사용된다. RabbitMQ는 AMQP 프로토콜을 구현한 경량의 메시지 브로커로, 복잡한 라우팅 로직과 신뢰성 있는 메시지 전달을 지원한다.
이벤트 주도 아키텍처와의 긴밀한 관계 속에서, 이벤트 소싱 패턴을 구현하는 데 특화된 이벤트 스토어도 중요한 구현체 범주에 속한다. Apache Pulsar는 Kafka와 유사한 기능을 제공하면서도 클라우드 네이티브 환경에 더 적합한 다중 테넌시와 계층적 스토리지 같은 기능을 강조한다. 메시지 큐 서비스로서 Amazon SQS와 Google Cloud Pub/Sub은 완전 관리형 서비스로, 사용자가 인프라 관리 부담 없이 메시징 기능을 활용할 수 있게 한다.
이러한 기술들은 각각의 설계 철학과 장점에 따라 선택된다. Kafka는 대규모 실시간 로그 처리에, RabbitMQ는 복잡한 비즈니스 워크플로우와 신뢰성 있는 작업 큐에 적합하다. 마이크로서비스 간 통신, 데이터 스트리밍, 서버리스 컴퓨팅 백엔드, 그리고 분산 시스템의 결합을 느슨하게 만드는 데 이 기술들이 광범위하게 적용된다.
7. 사용 사례
7. 사용 사례
메시지 주도 아키텍처는 현대 분산 시스템에서 다양한 사용 사례를 가진다. 가장 대표적인 적용 분야는 마이크로서비스 아키텍처이다. 각각 독립적으로 배포되고 운영되는 마이크로서비스들은 메시지 큐나 메시지 브로커를 통해 비동기적으로 통신함으로써 서비스 간의 느슨한 결합을 실현하고, 시스템 전체의 확장성과 신뢰성을 높인다. 예를 들어, 주문 서비스가 주문 정보를 메시지로 발행하면, 재고 관리 서비스와 결제 서비스가 이를 구독하여 각자의 업무를 처리하는 방식이다.
이벤트 기반 시스템 또한 메시지 주도 접근 방식의 주요 사용 사례이다. 시스템 내에서 발생하는 상태 변화나 중요한 사건(이벤트)을 메시지 형태로 발행한다. 다른 구성 요소들은 관심 있는 이벤트를 구독하여 반응하거나, 후속 작업을 트리거한다. 이는 실시간 데이터 처리, 사용자 활동 추적, 알림 시스템 등에 널리 활용된다. 예를 들어, 사용자가 웹사이트에서 상품을 조회하는 행위 자체가 이벤트 메시지가 되어, 추천 시스템이나 개인화 엔진의 입력으로 사용될 수 있다.
기업 애플리케이션 통합과 배치 처리 작업에서도 메시지 주도 패턴은 중요한 역할을 한다. 서로 다른 기술 스택을 가진 레거시 시스템과 현대 시스템 간의 데이터 교환, 또는 대규모 데이터를 처리하는 작업을 비동기 통신 방식으로 효율적으로 조정할 수 있다. 예를 들어, 은행의 심야 배치 처리나 물류 추적 시스템에서 여러 하위 시스템 간의 정보 동기화에 메시지 큐가 사용된다. 이를 통해 피크 시간대의 부하를 분산시키고, 일시적인 시스템 장애 시에도 메시지가 유실되지 않고 처리될 수 있는 신뢰성을 보장한다.
