분산 애플리케이션에서 프로세스 간의 느슨한 결합(loosely coupled)을 제공하는 것이 가장 큰 장점입니다. 그렇다면 강하게 결합된 시스템에서의 단점은 무엇일까요? 서로 연결되어 있는 시스템 중 한 곳에서 장애가 발생했을 때 그 장애가 연결된 다른 시스템들에 영향이 갑니다.
예를 들어 다음과 같은 상황에서, Server 2에 장애 상황이 발생하면, Server 1에서 DB2로 가는 데이터가 유실됩니다.
그러나 중간에 메시지 브로커가 있다면, 한 시스템의 장애가 다른 시스템에 주는 영향을 줄일 수 있다.
Server 2에 일시적인 장애가 발생하더라도, 복구 기간 동안 메시지 브로커가 메시지를 보관해 놓기 때문에, 데이터가 유실되지 않습니다.
메시지 브로커의 종류로는 Apache Kafka, Amazon Kinesis, Amazon SQS 등이 있습니다. 어떤 메시지 브로커를 선택해야 할 경우, 다음 기준으로 선택하면 좋습니다.
Question
- 메시지 브로커의 두 가지 방식인 Queue 방식과 Topic 방식은 어떤 차이가 있나요?
- 메시지 서비스로는 대표적으로 Apache Kafka와 Amazon SQS, Amazon Kinesis가 있습니다. 각각은 어떤 차이가 있나요?
- 웹 서비스에서 메시지 브로커(메시지 큐)를 이용해 비동기적인 방법이 활용되는 사례를 하나 이상 찾아보고, 어떻게 활용되는지 설명하세요.
Queue 방식: 메시지 큐에 대기하고 있는 각각의 소비자는 메시지를 순서대로 처리합니다. 즉, 각각의 메시지는 하나의 소비자에게만 전달됩니다.
Topic 방식: 메시지를 구독하는 모든 소비자에게 메시지가 전달됩니다. 이는 구독자 중 하나 이상이 메시지를 처리하고 다른 구독자가 처리하지 않은 메시지는 해당 구독자들에게 계속 유지됩니다.
Apache Kafka: 대규모 스트림 데이터 처리를 위한 메시지 브로커입니다. 대규모 분산 처리를 위한 기능을 제공하며, 데이터 유실 없이 고속으로 처리할 수 있습니다.
Amazon SQS: Amazon Web Services(AWS)에서 제공하는 완전 관리형 메시지 큐 서비스입니다. 이 서비스는 대규모 분산 시스템 및 서버리스 아키텍처와 같은 클라우드 환경에서 사용하기 적합합니다.
Amazon Kinesis: AWS에서 제공하는 대규모 데이터 스트리밍 플랫폼입니다. 대규모 데이터 처리, 실시간 분석, 머신러닝과 같은 기능을 제공합니다.
이메일 발송: 이메일 발송은 웹 서비스에서 많이 사용되는 기능 중 하나입니다. 이메일 발송 요청을 메시지 큐에 저장한 후 백그라운드에서 처리할 수 있습니다. 이를 통해 이메일 발송이 느려지거나 실패할 경우, 사용자 경험이 저하되는 문제를 방지할 수 있습니다.
주문 처리: 웹 사이트나 앱에서 주문 처리 시, 주문 정보를 메시지 큐에 저장한 후 백그라운드에서 처리할 수 있습니다. 이를 통해 사용자가 대기 시간을 최소화하고 주문 처리 과정이 안정적으로 이루어질 수 있습니다.