일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Tomcat error-page version
- angular 6
- SpringBoot
- tvheadend
- SW분석
- docker 네트워크
- open cursors
- CBD 단점
- USB-C충전
- Data Transfer Object(DTO)
- 자바개발
- 자바스크립트 JQuery
- 구글캘린더 검색
- 실해하지 않는
- SI와 SM 차이점
- sonoff
- USB-C to HDMI 아답터
- 경력개발자
- SW설계
- ASUS 공유기
- 네트워크 기본개념
- maven #junit
- 객체설계
- EXK
- 자바튜닝
- LG그램2017
- 프로젝트관리
- 소프트웨어설계
- LAN WAN
- Value Object(VO)
- Today
- Total
대빵's Blog
Event-Driven Architecture(EDA) 란? 본문
아래는 Learning Domain-Driven Design 도서의 chapter 15. Event-Drive Architecture 내용 요약정리이다.
EDA 란, 간단하게 말하면 시스템 컴포넌트들간 통신할 때 비동기적인 이벤트 메세지를 사용하는 아키텍처 스타일이다.
메세지의 두가지 타입
메세지에는 아래와 같은 두가지 타입이 존재한다.
* 이벤트(Event) : 이미 발생된 변경을 나타내는 메세지 이다.
* 커맨드(Command) : 수행되어야 하는 행위(operation)을 나타내는 메세지 이다.
이벤트의 세가지 타입
이벤트는 아래와 같은 세가지 타입이 존재한다.
* Event notification(이벤트알림) : 특정 이벤트 알림으로서 상세정보는 포함되어 있지 않다.
* Event-carried state transfer(ECST, 상태변경이벤트) : 특정 상태 변경에 대한 이벤트 이다.
* Domain event(도메인이벤트) : 특정 이벤트에 대한 모든 정보를 나타낸다. 보통 도메인객체로 처리된다.
이벤트 타입별 예제
- Event notification 예제 : 단순한 알림이고 상세정보를 알기 위해서는 details 를 확인해야 한다.
{
'type': 'marriage-recorded',
'person-id': '01b9a761',
'payload': {
'person-id': '126a7b61',
'details': '/01b9a761/marriage-data'
}
}
- ECST 예제 : 상태변경 값만 나타낸다.
{
'type': 'personal-details-changed',
'person-id': '01b9a761',
'payload': {
'new-last-name': 'Williams'
}
}
- 도메인 이벤트 예제 : married 라는 VO 정보를 모두 가지고 있다.
{
'type': 'married',
'person-id': '01b9a761',
'payload': {
'person-id': '126a7b61',
'assumed-partner-last-name': true
}
}
EDA 아키텍처 설계시 주의사항
* Temporal Coupling : Reporting 은 AdOptimization 이 Domain event 를 처리할 때까지 10초간 기다린 후 처리된다.
* Logical Coupling : Marketing 과 AdOptimization 은 동일한 Domain event 를 수신한다. Marketing 에서만 Business Logic 이 변경되는 경우, CRM 과 AdOptimization 의 이벤트 수신/발신은 Big ball of mud 가 된다.
* Temporal Coupling Refactoring : Reporting 은 AdOptimization 과 통신만 한다.
* Logical Coupling Refactoring : Marketing 과 AdOptimization 은 ECST 로 이벤트를 수신한다. 각각 종속성 없이 필요한 정보에 대해서 별도 처리를 수행할 수 있다.
결론
EDA 에서 적절치 않은 이벤트타입을 사용하면 big ball of mud 가 된다.
'개발관련' 카테고리의 다른 글
SpringBoot 3.3.2 에서 정적컨텐츠 활성화 하기 (0) | 2024.08.28 |
---|---|
MSA(Micro Service Architecture) 서비스 사이즈에 대한 고찰 (0) | 2022.05.29 |
gradle manually install (gradle 수동설치) (0) | 2022.04.17 |
gradle dependencies 확인하기 (0) | 2022.04.17 |
gradle executable jar 만들기 (0) | 2021.12.07 |