[F-Lab 멘토링 학습]

이벤트 브로커(event broker)

everydeveloper 2023. 9. 19. 20:37

이벤트 브로커(event broker)

이벤트 브로커(event broker)

이벤트 브로커(event broker)

이벤트 브로커(event broker)는 특정 시스템, 애플리케이션, 서비스에서 발생하는 이벤트를 다른 시스템, 애플리케이션, 서비스로 중개하는 소프트웨어나 서비스를 의미합니다. 메시지 브로커와 비슷한 기능을 수행하지만, 주로 이벤트 주도 아키텍처나 스트림 처리와 같은 상황에서 활용됩니다.

이벤트 브로커의 주요 특징은 다음과 같습니다:

  1. 이벤트 중심: 이벤트 브로커는 특정 상황이나 조건에서 발생하는 이벤트에 중점을 둡니다. 예를 들어, 사용자가 웹사이트에서 제품을 구매하는 행위, 센서에서 새로운 데이터를 캡처하는 행위 등이 이벤트로 간주될 수 있습니다.
  2. 비동기 통신: 이벤트 브로커를 사용하면 시스템 간의 통신을 비동기적으로 수행할 수 있습니다. 이로 인해 이벤트 발생 시스템은 이벤트 수신 시스템의 응답을 기다리지 않고도 이벤트를 전송할 수 있습니다.
  3. 디커플링: 이벤트 브로커를 사용하면 이벤트 발행자와 수신자 사이의 종속성을 줄일 수 있습니다. 이를 통해 각 시스템의 확장성과 유지 보수성이 향상됩니다.
  4. 유연성과 확장성: 이벤트 브로커는 여러 수신자에게 동시에 이벤트를 전달할 수 있습니다. 또한, 새로운 수신자나 발행자를 시스템에 추가하기 쉽습니다.
  5. 내결함성: 많은 이벤트 브로커 솔루션들은 메시지나 이벤트를 안전하게 저장하고, 시스템 장애나 네트워크 문제가 발생한 경우에도 이를 다룰 수 있는 기능을 제공합니다.
  6. 이벤트 처리: 일부 고급 이벤트 브로커는 복잡한 이벤트 처리(Complex Event Processing, CEP)와 같은 기능을 제공하여 여러 이벤트 간의 상호 관계나 패턴을 식별하는 데 도움을 줍니다.

Apache Kafka, RabbitMQ, AWS EventBridge 등은 이벤트 브로커 또는 관련 기능을 제공하는 대표적인 솔루션들 중 몇 가지입니다.

이벤트 브로커의 사용 사례:

  1. 마이크로서비스 아키텍처: 마이크로서비스 간의 통신을 위해 이벤트 브로커를 사용할 수 있습니다. 서비스가 독립적으로 확장되고 운영될 수 있도록 서비스 간의 결합도를 낮추기 위해 이벤트 기반의 통신 패턴이 사용됩니다.
  2. 리얼타임 데이터 분석: 스트리밍 데이터를 실시간으로 분석하기 위해 이벤트 브로커를 활용할 수 있습니다. 예를 들면, 사용자의 행동, 로그 데이터, 센서 데이터 등을 실시간으로 처리하고 분석하는데 사용됩니다.
  3. 이벤트 기반 워크플로우: 특정 이벤트 발생 시 자동화된 워크플로우나 프로세스를 실행하기 위해 이벤트 브로커를 활용할 수 있습니다.
  4. 로그 집계: 시스템이나 애플리케이션에서 생성된 로그를 중앙 집중식으로 수집하고 처리하는데 이벤트 브로커를 사용할 수 있습니다.

주요 이벤트 브로커 솔루션:

  1. Apache Kafka: 대규모 스트리밍 데이터를 처리하는데 특화된 이벤트 브로커입니다. Kafka는 분산된 아키텍처를 가지며, 고성능, 내결함성, 그리고 확장성이 뛰어납니다.
  2. RabbitMQ: AMQP를 기반으로 하는 메시징 시스템이며, 이벤트 중심의 메시징을 지원합니다.
  3. AWS EventBridge: AWS에서 제공하는 서버리스 이벤트 브로커로, AWS 서비스, SaaS 애플리케이션, 사용자 정의 애플리케이션 간의 이벤트 전달을 지원합니다.
  4. NATS: 경량하고 빠른 퍼블리시-서브스크라이브 및 메시징 시스템으로, 클라우드 네이티브 환경과 잘 어울립니다.

이벤트 브로커 선택 시, 여러 기준을 고려해야 합니다. 트래픽의 양, 지연 시간, 내결함성, 확장성, 그리고 특정 환경과의 호환성 등의 요구 사항을 고려하여 최적의 솔루션을 선택하는 것이 중요합니다.

물론, 이벤트 브로커에 관한 논의를 계속하겠습니다.

이벤트 브로커의 이점:

  1. 탄력성: 메시지 브로커나 이벤트 브로커를 사용하면 애플리케이션 간의 결합도를 낮춤으로써 각 애플리케이션의 개발과 배포가 독립적으로 진행될 수 있습니다. 이로 인해 시스템의 전체적인 탄력성이 향상됩니다.
  2. 확장성: 대규모의 메시지나 이벤트 트래픽을 처리할 수 있는 브로커는 수평적으로 확장이 가능합니다. 이로써 대량의 트래픽을 안정적으로 처리할 수 있습니다.
  3. 내구성: 많은 이벤트 브로커들은 메시지를 안전하게 보관하는 기능을 제공합니다. 따라서 시스템 장애나 다른 문제가 발생하더라도 메시지나 이벤트의 손실 없이 처리할 수 있습니다.
  4. 실시간 처리: 이벤트 브로커를 활용하면 데이터를 실시간으로 전달하고 처리할 수 있습니다. 이로 인해 사용자에게 더 빠른 반응성을 제공할 수 있습니다.

고려사항:

  1. 지연 시간: 이벤트 브로커의 성능과 용량에 따라 지연 시간이 발생할 수 있습니다. 실시간 처리가 필요한 애플리케이션에서는 이러한 지연을 최소화하는 것이 중요합니다.
  2. 보안: 중요한 데이터를 전송하는 경우, 이벤트 브로커의 보안 기능에 주의를 기울여야 합니다. 암호화, 인증 및 권한 관리와 같은 보안 기능을 제공하는지 확인해야 합니다.
  3. 비용: 대부분의 클라우드 서비스 제공자는 이벤트 브로커 서비스에 대한 비용을 부과합니다. 이 비용은 메시지의 양, 저장 공간, 처리 능력 등에 따라 달라질 수 있습니다.

결론적으로, 이벤트 브로커는 복잡한 IT 환경에서 효과적인 데이터 통신을 지원하기 위한 핵심 도구로 간주됩니다. 애플리케이션과 서비스가 계속해서 확장될 때, 이벤트 브로커는 안정적이고 확장 가능한 메시지 전달 메커니즘을 제공하여 전체 시스템의 성능과 안정성을 향상시킬 수 있습니다.

이벤트 브로커의 한계 및 도전 과제:

  1. 복잡성: 이벤트 브로커를 도입하면 시스템의 구성이 복잡해질 수 있습니다. 적절한 모니터링 및 관리 도구 없이는 브로커의 상태, 트래픽, 오류 등을 추적하기 어려울 수 있습니다.
  2. 데이터 일관성: 여러 서비스 또는 시스템 간의 데이터 일관성을 유지하는 것은 도전적일 수 있습니다. 한 시스템에서 발생한 이벤트가 다른 시스템에서 적절히 반영되지 않을 경우 데이터 불일치 문제가 발생할 수 있습니다.
  3. 장애 복구: 이벤트 브로커나 연결된 서비스 중 하나에 장애가 발생한 경우, 장애 시점의 데이터를 복구하고 시스템을 다시 동기화하는 것이 중요합니다.

이벤트 브로커 선택 시 고려 사항:

  1. 프로토콜 지원: AMQP, MQTT, STOMP 등의 메시징 프로토콜 중 어느 것을 지원하는지 확인해야 합니다. 사용하려는 애플리케이션과의 호환성을 고려하여 적절한 프로토콜을 선택하는 것이 중요합니다.
  2. 통합 능력: 사용하는 기술 스택과 이벤트 브로커가 잘 통합되는지 확인해야 합니다. SDK, API, 플러그인 등의 지원 여부를 검토하십시오.
  3. 커뮤니티 및 지원: 오픈 소스 이벤트 브로커를 사용하는 경우, 활발한 커뮤니티와 문서화가 중요합니다. 이는 문제 해결과 기술 지원에 도움이 됩니다.

이벤트 브로커는 현대의 분산 애플리케이션 아키텍처에서 중요한 역할을 합니다. 그러나 적절한 선택, 설계 및 구현 없이는 추가적인 복잡성과 관리 비용을 초래할 수 있으므로 신중한 계획과 평가가 필요합니다.

Apache Kafka (이벤트 브로커, 메세지 브로커)

Apache Kafka는 초기에 LinkedIn에서 로그 처리 시스템으로 개발되었으나 현재는 분산 데이터 스트리밍 플랫폼으로 널리 사용되고 있습니다. Kafka의 주요 구성 요소는 Producer, Broker (또는 Kafka 클러스터), Consumer로 나눌 수 있으며, 이들 간의 데이터 흐름을 관리합니다. Kafka는 주로 다음과 같은 이벤트 브로커로서의 역할을 수행합니다.

  1. 이벤트 스트리밍: Kafka는 실시간으로 대량의 이벤트나 메시지를 처리하는 데 최적화되어 있습니다. 이를 통해 실시간 분석, 모니터링, 데이터 파이프라인 구축 등의 작업에 적합합니다.
  2. 분산 및 확장성: Kafka 클러스터는 여러 브로커로 구성되어 있어 데이터를 분산 저장하며, 필요에 따라 클러스터의 크기를 수평적으로 확장할 수 있습니다. 이로 인해 Kafka는 고 가용성 및 대용량 데이터 처리를 지원합니다.
  3. 내구성: Kafka는 이벤트나 메시지를 디스크에 기록하므로, 시스템 장애가 발생하더라도 데이터 손실을 최소화할 수 있습니다. 또한 복제를 통해 데이터의 내구성을 더욱 강화합니다.
  4. 높은 처리량: Kafka는 초당 수백만 개의 이벤트를 처리할 수 있습니다. 이러한 성능은 주로 Kafka의 분산 아키텍처와 효율적인 스토리지 메커니즘 덕분입니다.
  5. 역사 데이터 저장: Kafka는 토픽 내의 이벤트나 메시지를 오랜 시간 동안 보관할 수 있습니다. 이를 통해 시간이 지난 데이터에 대한 분석이나 재처리도 가능합니다.
  6. 다양한 소비자 지원: Kafka의 Consumer API를 활용하면 다양한 시스템이나 애플리케이션에서 Kafka 토픽의 데이터를 소비할 수 있습니다. 이를 통해 데이터 파이프라인, 분석 시스템, 모니터링 도구 등 다양한 소비자가 Kafka에서 데이터를 추출하여 활용할 수 있습니다.
  7. 플러그 가능한 커넥터: Kafka Connect API를 활용하면 다양한 외부 시스템과 Kafka를 통합할 수 있습니다. 이로 인해 관계형 데이터베이스, 스트리밍 플랫폼, 클라우드 서비스와 같은 다양한 데이터 소스와 목적지와의 연동이 용이합니다.

결론적으로, Apache Kafka는 대용량 데이터 스트리밍을 지원하는 분산 시스템으로서 이벤트 브로커의 역할을 효과적으로 수행합니다. 이를 통해 실시간 분석, 데이터 통합, 로그 수집 등의 다양한 유스케이스를 지원합니다.

컨슈머 그룹:

Kafka는 Consumer Group이라는 개념을 제공합니다. 여러 컨슈머가 하나의 그룹을 형성하여 토픽의 파티션을 나누어 소비할 수 있습니다. 이를 통해 데이터의 병렬 처리가 가능하며, 소비자의 수가 증가하더라도 확장성을 유지할 수 있습니다.

토픽과 파티션:

  • 토픽: Kafka에서 데이터는 토픽이라는 카테고리에 저장됩니다. 토픽은 여러 파티션으로 나뉘어 있습니다.
  • 파티션: 파티션은 토픽의 하위 세그먼트로, 메시지는 각 파티션에 추가됩니다. 파티션의 수는 토픽의 병렬처리 수준을 결정합니다. 각 파티션은 독립적으로 컨슈머에 의해 소비될 수 있습니다.

오프셋:

Kafka에서 메시지는 파티션 내에 고유한 ID, 즉 offset을 가집니다. 컨슈머는 어디까지 메시지를 소비했는지 알기 위해 오프셋을 사용합니다. 이는 컨슈머가 중단된 후 다시 시작할 때 마지막으로 소비한 위치에서 계속 소비할 수 있게 해줍니다.

내결함성:

Kafka는 클러스터 내의 브로커 간에 데이터를 복제하여 내결함성을 제공합니다. 한 브로커가 실패하더라도 다른 브로커에서 해당 데이터에 액세스할 수 있습니다.

보안:

Kafka는 클라이언트와 브로커 간의 통신에 SSL/TLS를 사용하여 데이터를 암호화할 수 있습니다. 또한, SASL를 통한 인증과 Apache ZooKeeper를 사용한 권한 관리를 지원하여 보안성을 강화합니다.

스트림 처리:

Kafka Streams API를 사용하면, Kafka에 저장된 데이터 스트림을 처리하고 분석하는 어플리케이션을 구축할 수 있습니다. 이를 통해 실시간 데이터 처리와 분석 작업이 가능합니다.

Apache Kafka는 다양한 기능과 확장성, 내구성, 높은 처리량 등의 특징으로 대용량 데이터 스트리밍 환경에서 널리 사용되는 중요한 도구입니다. 다양한 기업과 조직에서 실시간 분석, 로그 수집, 이벤트 소싱, CQRS 등의 다양한 시나리오에서 Kafka를 활용하고 있습니다.

Kafka 사용 사례:

  1. 로그 수집: Kafka는 시스템 로그나 애플리케이션 로그를 중앙 집중식으로 수집하는데 이상적입니다. 대규모의 로그 데이터를 실시간으로 처리하고 저장할 수 있습니다.
  2. 실시간 분석: Kafka를 사용하여 대량의 실시간 데이터를 분석하고, 이를 기반으로 즉각적인 의사 결정을 내릴 수 있습니다.
  3. 이벤트 소싱: 이벤트 소싱은 시스템의 상태를 이벤트 스트림으로 나타내는 패턴입니다. Kafka는 이벤트 스트림을 저장하고 처리하는 데 적합하므로 이벤트 소싱 아키텍처 구축에 적합합니다.
  4. CQRS (Command Query Responsibility Segregation): Kafka는 CQRS 패턴에서 이벤트 소싱과 함께 사용되어 명령과 조회의 책임을 분리하는 데 도움을 줍니다.
  5. 데이터 레이크 통합: Kafka는 다양한 소스에서 데이터를 수집하여 데이터 레이크나 데이터 웨어하우스로 전송하는 데 사용될 수 있습니다.

Kafka와 관련된 기타 컴포넌트:

  1. Zookeeper: Kafka의 분산 기능을 지원하기 위해 Apache ZooKeeper를 사용합니다. ZooKeeper는 브로커들의 메타데이터를 관리하고, 클러스터의 상태와 리더 선출 등의 역할을 합니다.
  2. KSQL: Kafka용 스트리밍 SQL 엔진으로, 실시간 데이터에 대한 SQL 쿼리를 통한 분석을 가능하게 합니다.
  3. Connectors: Kafka Connect를 사용하면 다양한 소스와 싱크로부터 데이터를 가져오거나 보낼 수 있습니다. 공식적으로 지원되는 커넥터들과 커뮤니티에서 제공하는 커넥터들이 있습니다.

결론:

Apache Kafka는 분산 데이터 스트리밍 플랫폼으로, 실시간 데이터 처리 및 분석, 이벤트 기반 아키텍처, 로그 수집 등의 다양한 사용 사례에 적합합니다. Kafka의 확장성, 내구성 및 높은 처리량은 대규모 데이터 처리 요구 사항에 맞춰 설계되었으며, 이러한 특징 덕분에 많은 조직에서 기반 인프라로 Kafka를 선택하고 있습니다.

AWS EventBridge

AWS EventBridge는 AWS에서 제공하는 서버리스 이벤트 버스 서비스로, 애플리케이션, AWS 서비스, SaaS 애플리케이션, 사용자 정의 애플리케이션 등 다양한 소스로부터 이벤트를 수신하고 대상에 라우팅하는 데 사용됩니다.

AWS EventBridge의 주요 특징:

  1. 서버리스: 서버, 클러스터, 인프라 관리 없이 이벤트 구동 워크플로우를 만들 수 있습니다.
  2. 사용자 정의 이벤트: 사용자 정의 이벤트 소스로부터 이벤트를 수신하고 처리할 수 있습니다.
  3. AWS 통합: EventBridge는 다양한 AWS 서비스와 통합되어 있어, AWS 서비스를 소스나 대상으로 사용할 수 있습니다.
  4. 이벤트 필터링: 이벤트 패턴을 사용하여 특정 이벤트만을 선택적으로 대상에 라우팅할 수 있습니다.
  5. SaaS 애플리케이션 통합: EventBridge는 다양한 SaaS 애플리케이션과 연결됩니다. 따라서 SaaS 애플리케이션에서 생성되는 이벤트를 AWS 환경으로 쉽게 전송할 수 있습니다.

사용 사례:

  1. 실시간 애플리케이션: 실시간 대시보드나 모니터링 시스템에서 EventBridge를 사용하여 데이터를 실시간으로 수신하고 처리할 수 있습니다.
  2. 워크플로우 자동화: 다양한 AWS 서비스 간의 워크플로우를 자동화하기 위해 EventBridge를 사용할 수 있습니다.
  3. 알림: 특정 이벤트가 발생할 때 알림을 보내기 위해 EventBridge와 Amazon SNS, AWS Lambda와 같은 서비스를 통합할 수 있습니다.

장점:

  1. 확장성: 이벤트의 볼륨에 관계없이 EventBridge는 대규모의 이벤트 트래픽을 처리할 수 있습니다.
  2. 유연성: 다양한 이벤트 소스와 대상을 지원하여 다양한 사용 사례에 적용할 수 있습니다.

단점:

  1. 학습 곡선: 초기 사용자에게는 설정 및 사용 방법이 다소 복잡할 수 있습니다.
  2. 비용: 이벤트의 수와 처리 방식에 따라 비용이 발생합니다. 따라서 비용을 관리하기 위해 사용 패턴을 주의 깊게 모니터링해야 할 수 있습니다.

결론적으로, AWS EventBridge는 이벤트 기반 아키텍처를 구현하고자 하는 AWS 사용자에게 강력한 도구로 제공됩니다. 이벤트 라우팅, 변환 및 처리의 필요성이 있는 다양한 사용 사례에 적용할 수 있습니다.

일반적인 이벤트 브로커, 인기 있는 이벤트 브로커

이벤트 브로커는 여러 서비스, 시스템, 애플리케이션 간의 이벤트나 메시지를 중계하며, 이러한 이벤트를 적절한 대상에게 전달하는 역할을 합니다. 여러 종류의 이벤트 브로커가 있지만, 그 중에서도 일반적으로 사용되는 것과 인기 있는 것을 소개하겠습니다.

1. 일반적인 이벤트 브로커:

  • Apache Kafka: Kafka는 분산 스트림 처리 플랫폼으로 시작되었지만, 그 능력과 확장성 덕분에 이벤트 브로커로 널리 사용되게 되었습니다. 큰 규모의 데이터 스트림을 실시간으로 처리하도록 설계되었으며, 신뢰성과 내구성이 특징입니다.

2. 인기 있는 이벤트 브로커:

  • AWS EventBridge: AWS에서 제공하는 서버리스 이벤트 브로커로, AWS 서비스, 사용자 정의 애플리케이션, 외부 SaaS 애플리케이션 등 다양한 소스에서 발생하는 이벤트를 중앙 집중적으로 처리하고 라우팅할 수 있습니다. 통합 및 워크플로우 자동화를 위해 많이 사용됩니다.

다른 이벤트 브로커도 많이 있지만, 위 두 가지는 각각의 범주에서 대표적이며 널리 인정받고 있습니다. 선택하는 브로커는 특정 요구 사항, 사용 사례, 기존의 기술 스택, 비용 및 학습 곡선 등 다양한 요인을 고려하여 결정해야 합니다.