Skip to content

Sec01 introduction

1. Spring Event 와 메시징 플랫폼 (SQS, SNS, Kafka, RabbitMQ) 비교

스프링 이벤트에 대한 학습을 시작하기에 앞서서 먼저 Spring Event 의 이벤트 처리와 SQS, Kafka 와 같은 외부 시스템 (미들웨어)을 이용한 이벤트 처리의 차이에 대해서 알고가면 좋을것 같습니다.

공통점

두 방식 모두 메시지(이벤트)를 게시하고 구독하는 시스템입니다.

차이점

스프링 이벤트는 스프링 애플리케이션 내부에서 이벤트를 게시하고 구독하는 목적으로 사용됩니다.

미들웨어를 이용한 이벤트 처리는 프로세스와 프로세스 또는 인스턴스와 인스턴스 사이에 이벤트 메시지를 게시하고 구독하는 목적으로 사용됩니다. MSA 환경 에서는 한 컴포넌트에서 다른 여러 컴포넌트에 데이터를 전파하는 목적으로 사용하거나 메시지 큐에 메시지를 쌓아 두고 주기적으로 배치 프로세싱하는 데 주로 사용합니다.

spring-event-vs-middleware-event.excalidraw.png

2. 이벤트를 사용하는 이유

그렇다면 이벤트 처리를 외부 시스템과 한 애플리케이션 인스턴스 내에서도 이렇게나 적극적으로 활용하는 이유가 무엇일까요?

그 이유는

  • Publisher 와 Subscriber 의 낮은 결합도 유지
  • 비동기 처리를 통한 시스템 자원의 효율적인 사용 및 성능 향상
  • 하나의 이벤트를 여러 Subscriber 가 구독할 수 있음

등이 있습니다.

첫번째 이유인 낮은 결합도, 의존 관계 분리의 역할이 가장 크고 이벤트 처리의 핵심입니다. 이 깃헙 링크 에서 의존관계가 분리되지 않았을 때의 문제점과 이를 Spring 이벤트로 해결하는 예제를 확인 할 수 있습니다.


관심사가 다른 두 도메인 패키지간의 의존 관계를 분리하는 방법은 이벤트 처리 방식 외에도

  • 중간 클래스를 도입하여 DIP 를 적용한다.
  • 도메인 엔티티가 아닌 ID 참조를 활용한다.
  • 이벤트 구독, 발행 모델을 활용한다.

등이 있습니다. 이 방식들은 조영호님의 우아한 객체지향 (링크) 에서 예제를 통해 확인 할 수 있습니다.


Last update: February 26, 2023
Created: December 20, 2022