Home 도메인 주도 설계 첫걸음 - 07장 시간 차원의 모델링
Post
Cancel

도메인 주도 설계 첫걸음 - 07장 시간 차원의 모델링

범위

  • [Part 2] 전술적 설계 - 07장: 시간 차원의 모델링

개념 정리

책에서 기억하고 싶은 내용

이벤트 소싱

  • 이벤트 소싱 패턴은 데이터 모델과 시간 차원을 도입한다.
  • 애그리게이트의 현재 상태를 반영하는 스키마 대신 이벤트 소싱 기반 시스템은 애그리게이트의 수명주기의 모든 변경사항을 문서화하는 이벤트를 유지한다.

검색

  • 이벤트 소싱을 사용하면 과거 정보를 쉽게 프로젝션할 수 있다.

분석

원천 데이터

  • 이벤트 소싱 패턴이 작동하려면 객체 상태에 대한 모든 변경사항이 이벤트로 표현되고 저장되어야 한다.
  • 이러한 이벤트는 시스템의 원천 데이터가 된다.
  • 시스템의 이벤트를 저장하는 데이터베이스는 유일하고 강력하게 일관된 저장소인 시스템의 원천 데이터다.
  • 이벤트를 저장하는 데 사용되는 데이터베이스를 지칭하는 이름이 이벤트 스토어(event store)다.

이벤트 스토어

  • 이벤트 스토어는 추가만 가능한 저장소이므로 이벤트를 수정하거나 삭제할 수 없다.

이벤트 소싱 도메인 모델

  • 이벤트 소싱 도메인 모델은 애그리게이트의 수명 주기를 모델링하기 위해 독점적으로 도메인 이벤트를 사용한다.
  • 애그리게이트 상태에 대한 모든 변경사항은 도메인 이벤트로 표현돼야 한다.
  • 이벤트 소싱 애그리게이트에 대한 각 작업은 다음 단계를 따른다.
    • 애그리게이트의 도메인 이벤트를 로드한다.
    • 이벤트 비즈니스 의사결정을 내리는 데 사용할 수 있는 상태로 프로젝션해서 상태 표현을 재구성한다.
    • 애그리게이트의 명령을 실행하여 비즈니스 로직을 실행하고 결과적으로 새로운 도메인 이벤트를 생성한다.
    • 새 도메인 이벤트를 이벤트 스토어에 커밋한다.

장점

  • 시간 여행
    • 도메인 이벤트는 애그리게이트의 모든 과거 상태를 복원하는 데도 사용할 수 있다.
  • 심오한 통찰력
    • 이벤트 소싱은 시스템의 상태와 동작에 대한 깊은 통찰력을 제공한다.
  • 감사 로그
    • 법률에 따라 일부 비지니스 도메인은 감사 로그를 반드시 구현해야 하며 이벤트 소싱은 이를 즉시 제공한다.
  • 고급 낙관적 동시성 제어
    • 이벤트 소싱을 사용할 때 기존 이벤트를 읽고 새 이벤트를 작성하는 사이에 정확히 무슨 일이 일어났는지 더 깊은 통찰력을 얻을 수 있다.
    • 이벤트 스토어에 동시에 추가된 정확한 이벤트를 추출하고 새로운 이벤트가 시도된 작업과 충돌하닌지, 또는 추가 이벤트가 관련이 없ㄷ고 계속 진행하는 것이 안전한지에 대해 비즈니스 도메인 주도 의사결정을 내릴 수 있다.

단점

  • 학습 곡선
    • 패턴이 데이터를 관리하는 기존 기술과 엄청난 차이가 있다.
    • 패턴을 성공적으로 구현하려면 팀 교육과 새로운 사고 방식에 익숙해지는 시간이 필요하다.
  • 모델의 진화
    • 이벤트 소싱 모델을 발전시키는 것은 어려울 수 있다.
  • 아키텍처 복잡성
    • 이벤트 소싱을 구현하면 수많은 아키텍처의 ‘유동적인 부분’이 도입되어 전체 설계가 더 복잡해진다.

자주 묻는 질문

성능

  • 이벤트가 추가되면서 성능이 저하된다.
    • 이벤트의 평균 수명 동안 기록될 것으로 예상되는 이벤트 수와 비교해서 누적될 이벤트 목록의 규모를 예측해야 한다.
    • 스냅숏 패턴 같은 다른 패턴을 적용할 수도 있다.
  • 확장할 수 있을까?
    • 이벤트 소싱 모델은 쉽게 확장할 수 있다.
    • 모든 애그리게이트 관련 작업은 단일 애그리게이트 컨텍스트에서 수행되므로 이벤트 스토어는 애그리게이트 ID로 분할할 수 있다.
    • 애그리게이트 인스턴스에 속하는 모든 이벤트는 단일 샤드(shard)에 있어야 한다.

데이터 삭제

  • 물리적으로 데이터를 삭제해야 하는 경우에는 어떻게 할까?
    • 잊어버릴 수 있는 페이로드 패턴(forgettable payload pattern)으로 해결할 수 있다.
    • 모든 민감 정보는 암호화된 형식으로 이벤트에 포함한다.
    • 민감 데이터를 삭제해야 하는 경우 키 저장소에서 암호화된 키를 삭제한다. 결과적으로 이벤트에 포함된 민감 정보에 더 이상 접근할 수 없다.

이렇게 하면 안될까요…?

결론

  • 이벤트 소싱 도메인 모델에서 애그리게이트 상태에 대한 모든 변경사항은 일련의 도메인 이벤트로 표현한다.
  • 이벤트 기반 모델은 이벤트를 특정 작업에 최적화된 여러 표현 모델로 프로젝션할 수 있는 유연성을 제공한다.
  • 이 패턴은 분석과 최적화를 위해, 또는 법적으로 감사 로그를 요구하기 때문에 시스템 데이터에 대한 심오한 통찰력이 필요한 경우에 적합하다.
This post is licensed under CC BY 4.0 by the author.

도메인 주도 설계 첫걸음 - 06장 복잡한 비즈니스 로직 다루기

헥사고날 아키텍처