Event-Driven Architecture

최혜원·2023년 8월 2일
0

Event-Driven Architecture

어떤 이벤트가 있으면 어떤 동작이 실행된다

EDA(Eventt Driven Architecture)란?

분산된 시스템에서 이벤트를 생성(발행)하고 발행된 이벤트를 수신자에게 전송하는 구조로 수신자는 그 이벤트를 처리하는 방식의 아키텍처입니다.

분산 아키텍처 환경에서 상호 간 결합도를 낮추기 위해 비동기 방식으로 메시지를 전달하는 패턴으로 주로 Message Broker(KafkaRabbitMQ)와 결합하여 구성됩니다.

  • 어디에서 쓰나요?
    • 요즘 B2C → 대중들 상대는 소프트웨어 ex) 카카오 인스타
    • 로깅이 점점 더 세밀화
    • 로깅 → 무조건
    • 알림 서비스 (앱 알림, sms, email 알림)
    • 동작을 바로 실행 할 수 없는 경우 ex) 너무나 큰 파일 다운로드 or PDF 만드는 시간동안 기다릴 수 있도록
    • 회사 자체가 서로 느슨한 결합도를 가지고 팀 운영을 해나가는 경우 → 개발할 때 커뮤니케이션 비용 감소

EDA의 구성요소

  1. Event Generator (Publisher, Producer, Creater)
    표준화된 형식의 이벤트를 생성(발행)합니다. 생성된 이벤트는 Event Channel로 전송합니다.
  2. Event Channel (Bus)
    Event Generator에서 Event Processing Engine으로 수집된 데이터를 전파하는 메커니즘입니다.
    즉, 이벤트를 필요로 하는 시스템까지 발송하는 역할입니다.
  3. Event Processing Engine (Consumer, Processor)
    수신한 이벤트를 식별/처리하는 역할을 합니다. 처리 결과에 따라 새로운 이벤트를 생성할 수 있습니다.
    Consumer는 이벤트의 송신자에 대한 정보를 알 필요가 없습니다.

EDA의 동작 방식

  1. Message 생성 (Publish/Subscribe)
    1. 메세지 종류, 메세지가 실행할 파라미터
      이벤트가 생성되면 Subscriber(수신자)에게 전달합니다.
      이벤트는 반복되어 전달되지 않으며, 수신자는 송신자의 정보를 알 필요가 없습니다.
  2. Event Source
    Event Processor에게 이벤트를 전달하는 역할을 합니다.
    Event Source는 1개 이상일 수 있으며, 1개 이상의 Event Processor에게 전달합니다.
  3. Event Processor
    수신된 이벤트에 대한 여러 Action을 수행하는 역할입니다.
    단일 이벤트에 대하여 타임스템프를 추가한다거나, 파생 이벤트를 만드는 등의 작업을 수행합니다.
  4. Event Consumer
    이벤트에 대한 처리를 합니다. 실질적인 Biz Logic을 수행합니다.

EDA의 장단점

장점

  1. Loosely Coupling

    분산 시스템간 느슨한 결합도를 제공합니다.

  2. 분산된 시스템간 의존성 배제

    약속된 Message를 통해 통신하기 때문에 다른 시스템의 정보를 알 필요가 없으므로 시스템 간 의존성이 배제됩니다.

  3. 확장성, 탄력성 향상

단점

  1. Broker Dependency

    시스템 간 의존도는 낮아지지만 메시지브로커에 대한 의존성이 발생합니다.

    만약 메시지 브로커의 장애가 발생하면 큰 장애로 무조건 이어집니다

  2. Transaction 단위 분리

    장애나 이슈발생시 Retry/Rollback에 대한 고려가 필요합니다.

  3. 시스템 Flow파악이 어려움 → 회사에 Kafka eng 있으면 파악 쉬워요

  4. 디버깅이 어려움


EDA를 선택할 때 고려할 특징

  1. Multicast 통신

    한 개의 이벤트 Publisher는 다양한 Consumer에게 이벤트를 전달할 수 있습니다.

    • 여러분들이 insta 게시물을 한 개 올렸어요
    • 그럼 팔로워 그 알림을 받아볼 거 잖아요
  2. 실시간 전송

    실시간으로 발생하는 이벤트에 대한 처리가 가능합니다.

  3. 비동기 통신

    비동기로 통신이 이루어지므로 Publisher는 처리 결과를 기다릴 필요가 없습니다.

    → 비동기로 만든 거에요 EDA

    → 의존성이 더 낮아져요 → 비동기는 내가 지금 실행한다해서 지금 바로 실행 X

  4. 세밀한 통신

    한 덩어리의 큰 이벤트(데이터)보다 작고 자세한 이벤트로 통신이 이루어집니다.

  5. 이벤트 온톨로지

    이벤트들은 확실하게 구분된 특징을 지니며 그에 상응하는 Consumer에게 전달됩니다.

  6. 자유로운 배포

    느슨할 결합도를 제공하므로 새로운 서비스의 배포가 자유롭습니다.

프로그래밍 관점뿐만아니라 다방면에서 적용가능한 아키텍처 패턴입니다.

복잡성/역동성에 가장 효율적으로 대응가능한 아키텍처입니다.

이벤트를 통해 데이터간 연결이 생성된다는 점이 가장 중요하므로 EDA에는 고정된 구조가 없습니다.

profile
어제보다 나은 오늘

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

많은 도움이 되었습니다, 감사합니다.

답글 달기