Print
카테고리: [ Cloud Computing & MSA ]
조회수: 832

1. 개요

1.1. 개념

이벤트 소싱 패턴은 도메인 내부 데이터의 현재 상태 그대로 저장하는 방식 대신에, 데이터에 수행된 전체 작업을 덧붙이는 방식으로 저장한다. 다시 말해, 이벤트 소싱은 애플리케이션에 의한 상태 변화를 변경 불가능한 연속된 사건들 또는 일어난 사건에 대한 로그를 통해 표현한다. 이벤트 소싱에서 특정 상태가 필요한 경우 집계(Aggregate)를 통해 이벤트에 대한 리플레이를 수행하여 상태를 생성하게끔 한다. 

< 이벤트 >

< 집계/집합체(Aggregate) >

< 스냅샷 >

1.2. ORM(Object-Relation Mapping)과 Event Sourcing 비교 예시

일반적인 ORM 레이어를 통해 요청을 처리하는 과정은 아래와 같다. 

  1. 사용자가 좌석 2개 예약 요청을 Command Handler에 전달
  2. Aggregate가 ORM Layer에 SeatsAvailability 정보를 요청하고, ORM Layer는 DB에 쿼리를 보내 데이터 조회
  3. Command Handler가 Aggregate 인스턴스에 예약을 수행 할 것을 명령
  4. Aggregate가 ORM Layer에 상태 저장 요청
  5. ORM Layer가 DB에 업데이트 수행

1.3. Event Sourcing 

장점은 다음과 같다.


2. CRUD와의 비교

CRUD 모델의 문제점은, CRUD 모델에서 일반적인 데이터 프로세스는 저장소에서 데이터를 읽고 수정한 다음 데이터를 잠그는 트랜잭션을 사용하여 데이터의 현재 상태를 새 값으로 업데이트 하는 것이다.


3. Event Sourcing Pattern의 특징

3.1. 장점

이벤트 변경이 불가능함

이벤트는 데이터와 함께 수행된 작업을 설명하는 단순 객체

전용 이벤트 스토리지에서 제공하는 Audit Logging 사용 가능

Event Sourcing은 일반적으로 이벤트에 대한 응답으로 데이터 관리 태스크를 수행하고 저장된 이벤트에서 뷰를 구체화하여 CQRS 패턴과 결합됨

3.2. 문제 및 고려사항

구체화된 뷰를 만들거나 이벤트를 재생하여 데이터 프로젝션을 생성할 때만 시스템이 일치