본문은 도메인 주도 설계 첫걸음을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
14장) 마이크로서비스
마이크로서비스
- 의미
- 서비스의 의미
- 미리 정의된 인터페이스를 사용해 하나 이상의 역량에 접근하기 위한 메커니즘 (OASIS)
- 미리 정의된 인터페이란 서비스로부터 데이터를 넣고 빼는 모든 메커니즘을 의미한다
- 마이크로서비스의 의미
- 마이크로 퍼블릭 인터페이스에 의해 정의된 서비스
- 서비스의 의미
- 장점
- 단일 서비스의 기능과 연동되는 다른 시스템 구성요소 모두를 쉽게 이해할 수 있음
- 유지/보수/확장이 쉬워짐
- 구성
- 인터페이스가 적고, 구현 복잡성이 높은 깊은 모듈로 구성하라
- 즉, 외부에 노출되는 기능은 적게 하고 구현 복잡성은 높여라
마이크로서비스와 바운디드 컨텍스트
- 마이크로서비스와 바운디드 컨텍스트의 관계는 비대칭이다
- 모든 마이크로서비스는 바운디드 컨텍스트지만, 반대로 모든 바운디드 컨텍스트가 반드시 마이크로서비스인 것은 아니다
15장) 이벤트 주도 아키텍처
이벤트 주도 아키텍처
- 의미
- 시스템 컴포넌트가 이벤트 메시지를 교환하면서 비동기적으로 서로 커뮤니케이션 하는 아키텍처 스타일
- 이벤트 소싱과의 차이점
- 이벤트 소싱은 상태의 변화를 일련의 이벤트로 캡처하는 방법
- 이벤트 주도 아키텍처는 서비스 간 통신을 의미하는 반면, 이벤트 소싱은 서비스 내부에서 발생한다
이벤트
이벤트, 커맨드 메시지
- 이벤트는 메시지이지만, 메시지가 반드시 이벤트는 아니며 메시지에는 두 가지 유형(이벤트, 커맨드)이 있다
- 이벤트
- 이미 발생한 변화를 설명하는 메시지
- 이미 발생한 일을 설명하므로 과거 시제로 이벤트명을 표현해야 한다
- 이벤트를 받는 쪽에서는 이벤트를 취소할 수 없다
- 커맨드
- 수행돼야 할 작업을 설명하는 메시지
- 커맨드는 거부될 수 있다
구조
- 일반적인 이벤트 스키마는 메타 데이터와 페이로드를 포함한다
- 메타 데이터에는 이벤트ID, 이벤트가 발생한 시간 등의 정보가 담긴다
- 페이로드에는 이벤트가 전달하는 정보를 설명할 뿐만 아니라 이벤트의 유형도 정의한다
이벤트 유형
이벤트 알림
- 다른 컴포넌트가 반응할 비즈니스 도메인의 변경에 관한 메시지
- 이해 당사자에게 이벤트를 알리는 것이 목적이므로 장황하면 안 된다
- 즉, 구독자가 이벤트에 반응하는 데 필요한 모든 정보를 이벤트에 포함해서는 안 된다 (명시적 질의가 추가적으로 요구됨)
이벤트를 통한 상태전송(ECST: Event-Carried State Transfer)
- 구독자에게 제공자의 내부 상태에 대한 변경사항을 알려준다
- 이벤트 알림 메시지와 달리 상태 변경을 반영하는 모든 데이터를 포함한다
- 완전한 스냅샷을 포함하거나 업데이트된 필드만을 포함할 수 있다
도메인 이벤트
- 제공자의 비즈니스 도메인 내에서 발생하는 이벤트를 설명하는 메시지
- 이벤트 알림과의 차이
- 이벤트를 설명하는 모든 정보를 포함한다
- 모델링 의도에 차이가 있다 (컴포넌트 연동 vs 비즈니스 도메인 설명)
- 비즈니스 도메인을 모델링하고 설명하기 위한 것
- 도메인 이벤트는 풍부한 모델을 노출하면 안 된다
- 도메인 이벤트에 포함된 데이터는 애그리게이트의 상태를 설명하기 위한 것이 아니다
'책 > 도메인 주도 설계 첫걸음' 카테고리의 다른 글
[도메인 주도 설계 첫걸음] Part 3. 도메인 주도 설계 적용 실무 (0) | 2023.10.08 |
---|---|
[도메인 주도 설계 첫걸음] Part 2. 전술적 설계 (0) | 2023.09.03 |
[도메인 주도 설계 첫걸음] Part 1. 비즈니스 도메인 분석하기 (0) | 2023.08.27 |