🔥스파르타 TIL (MSA)

Spring Cloud 란? (5) - Event-Driven Architecture

승승장규 2025. 3. 10. 22:51

애플리케이션 내에서 특정 이벤트가 발생했을 때, 이를 감지하고 적절한 핸들러(리스너)가 동작하는 방식으로 설계하는 것

  • 이벤트 : 시스템 내 또는 외부에서 발생하는 상태 변화나 특정 동작을 의미한다 ex) 사용자가 버튼을 클릭, 주문이 생성 등.
  • 발생자(Producer) : 이벤트를 생성하고, 이벤트 버스에 전달하는 컴포넌트 ex) 프론트엔드, 사물인터넷 센서 등.
  • 소비자(Consumer) : 이벤트를 수신하고 이를 처리하는 컴포넌트  ex) 주문 처리 서비스, 알림 시스템 등.
  • 버스 : 발생자와 소비자를 연결하는 중개 시스템으로, 이벤트의 전달과 라우팅을 담당한다. ex) 메시지 브로커 시스템

 

EDA의 장점으로는 

  • 유연성 : 컴포넌트 간의 느슨한 결합으로 시스템 확장 및 변경이 용이하다.
  • 스케일링 : 비동기 처리로 높은 성능과 확장성을 제공한다.
  • 실시간 반응성 : 이벤트 기반으로 실시간 처리가 가능하다.

 

Producer와 Consumer를 연결하는 메시지 브로커 시스템 중에서 RabbitMQ와 Kafka에 대해서 간단하게 알아보자.

 

 

먼저 RabbitMQ는 AMQP(Advanced Message Queuing Protocal)를 기반으로 하는 메시지 브로커로, 메세지를 queue에 저장하고 필요할 때 적절한 수신자에게 전달한다. 

 

AMQP ▼

  • Message : 전송되는 데이터 단위
  • Queue : 메시지를 저장하고 전달하는 구조
  • Exchange : 메시지를 queue로 라우팅하는 역할
  • Binding : exchange와 queue를 연결하는 설정. binding을 통해 메시지가 어느 queue로 전달될지 정의
 

RabbitMQ 란?

대규모 시스템에서 수배만 명의 사용자가 동시에 접속하고 상호작용할 수 있는 시스템을 구축해야 하는 상황에서 안정성과 신뢰성을 유지하면서 고성능을 제공해야 한다.카톡이나 라인 같은

seungg8361.tistory.com

 

장점 ▼

  • 설정 및 사용이 비교적 쉽다.
  • 메시지를 디스크에 저장하여 시스템 장애 발생 시에도 메시지가 손실되지 않도록 한다.
  • 클러스터링을 통해 여러 노드로 구성된 환경에서 높은 가용성과 부하 분산을 제공한다.
  • 메시지 보장, 다양한 라우팅 옵션 등 구체적인 메시지 관리 기능을 제공한다. ex) Exchange 등.
  • 여러 프로토콜과 언어를 지원하여 다양한 시스템과 쉽게 통합 가능하다.

단점 ▼

  • 대규모 데이터를 실시간으로 처리하는데 한계가 있다.
  • 초기 설정이 다소 복잡할 수 있고, 클러스터링 및 분산 환경에서는 더욱 많은 설정이 필요하다.
  • 모든 메시지를 중앙 브로커를 통해 전달하기 때문에, 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있다.
  • 메모리와 CPU 자원을 많이 소비할 수 있다.
  • 매우 큰 메시지 처리에 제한이 있을 수 있으며, 대용량 파일 전송에는 적합하지 않을 수 있다.
  • 러닝 커브가 있을 수 있다.
  • 수평적 확장은 가능하지만 Kafka에 비해 제한적일 수 있다.

Kafka는 분산된 스트리밍 플랫폼으로 대규모 실시간 데이터 스트리밍에 최적화 되어있다. 

 

장점 ▼

  • 메시지를 디스크에 저장하여 데이터 손실을 방지한다.
  • 데이터를 여러 브로커에 복제하여 저장하므로, 단일 브로커 장애 시에도 데이터 손실을 방지
  • 데이터가 소비자에게 성공적으로 전달되었는지 확인하는 기능을 제공
  • 브로커와 파티션을 추가하여 쉽게 확장할 수 있다.
  • 데이터 전송의 지연을 최소화하여 실시간 처리가 가능하다.
  • 대규모 실시간 로그 및 데이터 스트리밍에 최적화 되어있다.

단점 ▼

  • 설정과 운영이 비교적 복잡하다. 클러스터링 및 분산 환경에서는 더 많은 설정이 필요하다.
  • 높은 트래픽 상황에서는 브로커의 오버헤드가 발생할 수 있다. 매우 대규모의 메시지를 처리할 때 성능 처하가 발생할 수 있으며, 이러한 경우 적절한 클러스터링 및 최적화가 필요하다.
  • 메모리와 CPU 자원을 많이 소비할 수 있다.
  • 사용과 관리에 대한 학습 곡선이 가파르다.

 

이후에 Kafka에 대해 학습해보자 🖐️🖐️