이벤트 기반 설계 & 메시지 기반 설계

발행: (2026년 1월 19일 오후 12:11 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

이벤트 기반 설계 (EDD)

EDD에 들어가기 전에 이벤트를 정의해 보겠습니다. 이벤트는 불변이며 과거에 일어난 상태 변화를 나타냅니다.
EDD의 핵심 아이디어는 시스템이 이미 일어난 사실, 즉 이벤트에 반응한다는 것입니다. EDD에서는 생산자가 이벤트를 누가 소비하는지 알 필요가 없으므로 높은 결합도 감소를 달성합니다.

  1. 서비스가 작업을 수행합니다.
  2. 이벤트를 발행합니다.
  3. 하나 이상(또는 전혀) 소비자가 독립적으로 반응합니다.

예시: 주문 서비스가 주문을 성공적으로 생성하고 이벤트를 발생시킵니다.

잠재적 소비자

  • 재고 서비스: 재고 감소
  • 이메일 서비스: 확인 메일 전송
  • 분석 서비스: 메트릭 추적

흔히 저지르는 실수는 이벤트에 대한 응답을 기대하는 것입니다. 이벤트는 일방향 알림이며 대화가 아닙니다. 이벤트를 발행한다는 것은 “이 일이 발생했다”는 것을 알리는 것이지 “응답해 주세요”라는 뜻이 아닙니다.


메시지 기반 설계 (MDD)

이미 일어난 일에 반응하는 EDD와 달리, MDD는 서비스에게 작업을 수행하도록 지시합니다. 이러한 시스템은 메시지를 보내 다른 시스템에 작업을 요청합니다.

  • 메시지는 의도 기반입니다(예: ProcessPayment, SendEmail, GenerateInvoice).
  • 발신자는 보통 처리가 이루어지기를 기대합니다.

흐름

  1. 발신자가 메시지를 보냅니다.
  2. 수신자가 이를 처리합니다.
  3. 선택적인 응답 또는 확인이 있을 수 있습니다.

예시: 주문 서비스가 결제 서비스에 ProcessPayment 메시지를 보냅니다.


EDD와 MDD 선택하기

유용한 사고 모델은 하나는 반응형, 다른 하나는 지시형이라는 점입니다:

  • 반응형: “주문이 접수되었습니다.” (이벤트)
  • 지시형: “주문을 하세요.” (메시지)

대부분의 현대 아키텍처는 두 방식을 결합합니다. 명령(메시지)이 작업을 시작하고, 이벤트가 결과를 알립니다.

결합 예시

Checkout Service
   ├─ sends → ProcessPayment (message)
   └─ publishes → PaymentCompleted (event)
Back to Blog

관련 글

더 보기 »

메시징 & 이벤트 기반 설계

Event‑Driven Architecture(EDA) Event‑driven architecture는 작은, 분리된 서비스들로 구성된 현대적인 패턴으로, 이 서비스들은 이벤트를 publish, consume 또는 route합니다. - Even...

도메인 이벤트에서 웹훅으로

도메인 이벤트는 다음 인터페이스를 구현합니다: php interface DomainEvent { public function aggregateRootId: string; public function displayReference: st...