MSA/Event Driven Architecture 2024. 4. 21. 02:06

[MSA] Event Driven Architecture

목차
  1. 정의
  2. Event Sourcing
  3. 구성 요소
  4. 장점
  5. 단점
  6. 어떤 경우에 유용한가?
  7. 활용 사례
  8. 출처

정의

시스템 컴포넌트 간의 통신을 위해 이벤트를 생성하고 감지하는 아키텍처

  • 이벤트: 무언가 발생한 것
    • 시스템의 상태 변화
    • Event Notification으로 전달
    • 명령과 관련된 데이터를 포함할 수도 있고, 단지 무언가 발생했다는 알림일수도 있다
    • 불변(immutable) 이다
      • ⇒ Event Sourcing의 원천이 된다
  • 명령(Command): 다른 시스템에게 응답을 요청하는 것

Event Sourcing

데이터 변경 이벤트를 저장하고 시스템의 상태를 재구축하는 방식

  • 데이터 변경 히스토리 추적
  • 데이터 일관성 보장

구성 요소

  • Producer: 이벤트 생성
  • Broker: 이벤트를 적절한 Consumer로 라우팅
  • Consumer: 이벤트를 수신하고 처리

이벤트 기반 아키텍처나 메세지 기반 아키텍처에서는 Publisher-Subscriber 모델로 부르기도 한다

장점

  • 컴포넌트 간의 결합을 낮출 수 있다
    • vs 직접 호출
      • 다른 서비스를 호출하기 위해서 그 서비스의 존재를 알아야 한다
      • ⇒ 의존성 발생
  • 의존성 역전 (Dependency Inverision)[각주:1]
    • 다른 서비스를 아는 대신 이벤트의 생성과 소비에 대해서만 알면 됨
      • ⇒ 다른 서비스 대신 이벤트라는 인터페이스에 의존
      • 메세지 형식을 유지하면 구체적인 서비스는 교체할 수 있다
  • 병렬 처리와 확장성이 뛰어나다
    • 불변이기 때문에 다른 시스템에서 병렬적으로 처리될 수 있다
    • 하나의 이벤트를 여러 서비스에서 소비 가능
  • 지속성이 있어 이벤트를 나중에 처리할 수 있다
    • 나중에 정보 검색 가능
    • 비동기 처리 가능
  • 단일 장애 지점이 없어 견고하다
    • Consumer가 다운되어 이벤트를 읽지 못해도 Broker가 이벤트를 가지고 있다

단점

  • 성능 저하
    • 다른 서비스를 직접 호출하는 대신 메세지를 전달하는 Broker가 있어서 성능 저하가 발생
    • 대가로 확장성 증가
  • 최종 일관성
    • 이벤트 전송과 수신 사이에 지연(delay) 발생
    • 동일한 이벤트를 여러 서비스가 소비하면 각각 다른 시간에 읽을 수 있음
    • 서비스 간 동기화 문제 발생
  • 복잡성 증가
    • 무슨 일이 발생했는지, 언제 발생했는지, 어떤 서비스를 호출했는 지 추적하기 어렵다

어떤 경우에 유용한가?

  • 확장성이 성능보다 중요할 때
  • 데이터 복제가 필요할 때
    • 이벤트를 공통 소스로 각 서비스에서 정보를 복사할 수 있음
  • 병렬 처리가 필요할 때
  • 느슨한 결합[각주:2]이 중요하고 다른 시스템 간 통신할 때
    • 이벤트 형식만 맞추면 전체 시스템이 작동한다

활용 사례

  • Saga Pattern
  • Redis pub/sub
  • 브라우저 이벤트
  • Redux (React)
  • React - React Native 간 메세지

출처

https://www.youtube.com/watch?v=DQ5Cbt8DQbM

https://en.wikipedia.org/wiki/Event-driven_architecture

https://en.wikipedia.org/wiki/Loose_coupling

  1. 구체적인 구현이 아닌 추상화된 인터페이스에 의존한다는 것 [본문으로]
  2. 1. 끊어질 수 있는 관계. 한 컴포넌트의 변경이 다른 컴포넌트의 존재 또는 성능에 거의 영향을 미치지 않는 경우. 2. 각 컴포넌트가 다른 컴포넌트에 대한 지식이 없거나 활용하지 않는 경우 [본문으로]
저작자표시 (새창열림)

'MSA > Event Driven Architecture' 카테고리의 다른 글

[Kafka] 개요, 사용 목적, 특징, 구성  (0) 2024.07.14
[EDA] 장단점과 적용 사례  (0) 2024.06.29
  1. 정의
  2. Event Sourcing
  3. 구성 요소
  4. 장점
  5. 단점
  6. 어떤 경우에 유용한가?
  7. 활용 사례
  8. 출처
'MSA/Event Driven Architecture' 카테고리의 다른 글
  • [Kafka] 개요, 사용 목적, 특징, 구성
  • [EDA] 장단점과 적용 사례
이우진 기술 블로그개발자 이우진의 기술 블로그입니다
개발자 이우진
이우진 기술 블로그
  • All (86)
    • Spring Framework (20)
    • MSA (7)
      • Event Driven Architecture (3)
    • Java (3)
    • Flink (2)
    • Computer Science (9)
      • Object Oriented Programming (3)
    • Problem Solving (15)
    • Design Pattern (0)
    • React (4)
    • Javascript (2)
    • Web (3)
    • Tools & Environment (3)
    • C++ (2)
    • misc (5)
    • Essay (3)
      • 기술 회고 (5)
  • 홈
  • 태그
  • 관리자
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
[MSA] Event Driven Architecture
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.