이벤트 기반 아키텍처

이벤트 기반 아키텍처 (EDA)

이벤트를 발행하고 수신해서 처리하는 구조

  • Event-Driven Architecture, EDA

  • 시스템의 구성 요소간에 발생하는 이벤트 중심으로 설계

  • 분산 시스템과 마이크로서비스 아키텍처에서 주로 사용

아키텍처 구성

  • 이벤트 발행자

    • 이벤트를 발생시키는 구성 요소 또는 서비스

  • 이벤트 소비자

    • 특정 이벤트에 대해 구독

    • 이벤트가 발생하면 이를 처리하는 구성 요소 또는 서비스

장점

  • 느슨한 결합 - 생산자와 소비자 분리

  • 확장성 - 쉽게 소비자를 추가 가능

  • 실시간성 - 이벤트 수신 즉시 소비자가 처리

  • 탄력성 - 필요한 리소스에 따라 쉽게 늘리거나 줄일 수 있다.

  • 비동기성 - 수신자는 각자 작업을 수행

코드 예시

이벤트

// 이벤트 클래스
class MyEvent {
  private String message;
  
  public MyEvent(String message) {
    this.message = message;
  }
  
  public String getMessage() {
    return message;
  }
}

이벤트 발행자

// 이벤트 발행자
class EventPublisher {
  private List<EventListener> listener = new ArrayList<>();
  
  // 이벤트를 발행하는 메서드
  public void publishEvent(MyEvent event) {
    for (EventListener listener : listeners) {
      listener.onEvent(event);
    }
  }
  
  // 이벤트 구독자 등록
  public void addEventListener(EventListener listener) {
    listeners.add(listener);
  }
}

이벤트 구독자

// 이벤트 구독자 인터페이스
interface EventListener {
  void onEvent(MyEvent event);
}

// 이벤트 구독자
class EventSubscriber implements EventListener {
  @Override
  public void onEvent(MyEvent event) {
    System.out.println("이벤트 수신: " + event.getMessage());
  }
}

이벤트 발행과 수신

public class EventExample {
  public static void main(String[] args) {
    // 이벤트 발행자 생성
    EventPublisher eventPublisher = new EventPublisher();
    
    // 이벤트 구독자 생성 및 등록
    EventSubscriber subscriber1 = new EventSubscriber();
    eventPublisher.addEventListener(subscriber1);
    
    EventSubscriber subscriber2 = new EventSubscriber();
    eventPublisher.addEventListener(subscriber2);
    
    // 이벤트 발행
    MyEvent event = new MyEvent("안녕하세요!");
    eventPublisher.publishEvent(event);
  }
}

Keywords

  • 카프카

  • 레비댄큐

Last updated