본문 바로가기
IT/Knowledge

Event Sourcing(이벤트 소싱)

by 성준하이 2024. 3. 10.
반응형

이벤트 소싱이란,

발생하는 모든 이벤트에 대해서 기록을 하는 저장 기법이다.

 

클라우드에서 구동되는 반응형 시스템에 적합하고 규모 확장이 쉽기에 최근 주목을 받고 있다.

 

시나리오를 하나 짜보면,

장바구니에 A 랑 B 물건을 담고 B물건을 다시 삭제 시키고 결제를 하면 최종적으로는 A라는 물건만 구매가 된다.

 

일반적으로는 결국 최종 이벤트였던 A 물건만 구입하는게 트랜잭션이겠지만,

이벤트 소싱에서는 A랑 B를 담고 B를 없애는 행위까지 같이 저장이 된다.

 

이 이벤트 소싱에 대해서 모든 이벤트를 정리가 되면서 함께 사용되면서 나온 개념이 CQRS 내용도 있다.

해당 내용은 아래 참고 포스팅 참고 바란다.

 

 

이벤트 소싱의 장점은 아래와 같다.

정규(Normalized) 데이터 구조가 단순하다.

도메인 모델의 정규 데이터인 도메인 이벤트는 단순한 구조로 저장된다. 때문에 도메인 이벤트를 저장할 대상으로 관계형 데이터베이스, 문서 데이터베이스, 키-값 저장소, 파일 시스템, 또는 Event Store와 같이 이벤트 소싱에 특화된 저장소 등 다양한 데이터베이스를 고려할 수 있고 분산 저장소에 적합해 규모 확장도 쉽다. 그리고 도메인 이벤트는 수정되거나 삭제되지 않으며 오직 추가만 되기 때문에 기존 데이터에 접근하기 위한 경쟁이 발생하지 않는다.

임피던스 불일치가 존재하지 않는다.

일반적으로 잘 정의된 도메인 모델을 메모리 상의 개체 그래프로 표현하는 것은 어렵지 않다. 하지만 전통적 방식에서 도메인 모델을 관계형 데이터베이스에 투영할 때에는 다양한 구조적 문제들이 발생하며 이것을 개체-관계형 임피던스 불일치(Object-Relational Impedance Mismatch)라고 한다. ORM 등의 도구를 사용해 반복작업을 줄일 수는 있지만 근본적인 해결책은 아니다. 반면 이벤트 소싱을 사용하면 도메인 모델은 직렬화된(serialized) 도메인 이벤트의 집합으로 저장되기 때문에 임피던스 불일치가 발생하지 않는다.

신뢰할 수 있는 시스템 기록을 확보할 수 있다.

도메인 모델의 모든 변경 내역은 도메인 이벤트로 기록되기 때문에 특정 시점까지의 이벤트를 재생하면 해당 시점의 도메인 모델이 복원된다. 시스템에 오류가 발생하면 프로그래머는 오류가 발생한 시점의 도메인 모델을 복원해 오류를 분석할 수 있다.

메시지 중심(Message-Driven) 아키텍처에 적합하다.

비동기 메시지 전달을 중심으로 한 설계는 반응형 시스템의 기반이다. 이미 설명된 것처럼 도메인 이벤트는 일급 데이터로 저장되기 때문에 이를 통해 ‘최소 일 회 배달(at-least-once delivery)’을 구현하기 용이하다. 도메인 모델에서 발생한 이벤트는 안정적으로 관찰될 수 있으며 반드시 발행됨을 보장할 수 있다. 또한 도메인 이벤트가 담긴 메시지는 높은 설명력을 가진다.


참고 포스팅

https://thenicesj.tistory.com/251

 

CQRS 패턴

CQRS란? Command Query Responsibility Segregation 의 약자로 단어 그대로 해석하면 명령 조회 책임 분리 라는 뜻 애플리케이션들을 구성하는 아키텍처에 대한 하나의 패턴 애플리케이션을 구현함에 있어 명

thenicesj.tistory.com

 

반응형

'IT > Knowledge' 카테고리의 다른 글

DMZ (Demilitarized Zone) 에 대해서  (27) 2024.03.12
DDOS (디도스)  (14) 2024.03.11
Bastion Host(배스천 호스트)  (14) 2024.03.09
'Service Mesh' VS 'API Gateway'  (20) 2024.03.08
Kong API 란? (API gateway)  (18) 2024.03.07

댓글