Dev

“Applying Event sourcing in a ERP system: a case study”을 읽고

February 8, 2019

“Applying Event sourcing in a ERP system: a case study”을 읽고

Vasconsellos, Pedro RG, Vinicius M. Bezerra, and Calebe P. Bianchini. “Applying Event sourcing in a ERP system: a case study.”

요약

해당 논문에 대한 간략한 요약은 아래와 같다. 본 논문에서 필자가 참고한 부분은 튜링 기계를 사용한 이벤트 소싱에 대한 개념적 접근 부분 IV. EVENT SOURCING 부분이다.

  1. 대부분의 소프트웨어는 내부 이벤트 또는 사용자 입력에 의해 실행되는 일련의 도메인 규칙으로 볼 수 있다. 일반적으로 이러한 도메인 규칙은 입력 데이터를 처리하고 이벤트와 일치하는 소프트웨어의 내부 상태를 변경하도록 설계된다.
  2. 이러한 설계의 결과로 메모리에서 과거 상태를 유지할 수 있는 신뢰할만한 수단이 없다. 이런 유사한 기능이 내장 되어 있다고 하더라도 시스템과 분리되어 있거나 관련 시스템으로 선택된 특정 위치만 기록한다.
  3. 이 논문에서는 과거 상태를 유지할 수 있는 방법 중 하나인 이벤트 소싱(Event Sourcing)에 대해 논의하고 시스템이 이전 상태를 자유롭게 재생할 수 있도록 한다. 또한이 아키텍처가 ERP 시스템 개발에 적용되는 사례 연구를 제시한다. 이 아키텍처는 오류 추적 성을 대폭 향상시켜 개발 팀에게 특히 유용했다.

Event Sourcing

해당 기사는 논문에서 필요한 내용만 간략하게 발췌하여 소개하며, 자세한 내용이 필요한 분들은 해당 논문을 참고하길 바란다.

개념

소프트웨어 상태를 저장하는 대신 상태를 계산할 수 있는 행위(event)를 저장하는 것이다.

튜링 기계를 사용한 Event Sourcing 설명

튜링 기계

수학자 앨런 튜링이 1936년에 제시한 개념이다. 계산하는 기계에 대한 일반적인 개념을 설명하기 위해 설계한 가상의 기계이며 오토마타의 일종이다.

튜링기계는 아래와 같은 구성으로 설계된다.

  • 테이프
    • 유한한 알파벳으로 채워져있다.
    • 특정 알파벳은 비어있음을 나타낸다.
    • 테이프는 왼쪽이나 오른쪽으로 임의적으로 확장될 수 있다.
  • 상태 레지스터
    • 튜링 기계의 유한한 상태 중 하나를 기록한다.
    • 상태 레지스터를 초기화하는 특별한 상태도 존재한다.
  • 생산 규칙
    • 특정한 상태(Q)에 있는 기계가 어떠한 기호(S)를 읽을 때 해야 할 행동을 표기한 것이다.
    • 예를 들어 X1 상태에서 테이프에서 Y1을 읽으면 -> Y2를 테이프에 기록하고 D 방향으로 이동한 다음 X2 상태로 만든다와 같은 형태로 구성되어 있다.

계산 중단과 재시작

만약 튜링 기계가 계산 중단하고, 중단 시점부터 계산을 재시작할 경우 계산 중단 시점에 1) 생산 규칙, 2) 상태 레지스터, 3) 테이프의 위치를 어딘가 저장해야 한다. 중단 후 계산을 재시작 하기 위해선 1) 생산 규칙을 튜링 기계로 다시 불러오고 2) 상태 레지스터를 기억 된 상태로 설정 3) 2) 동일하거나 효과적인 테이프를 사용하면 계산을 재계하면 된다. 튜링 기계의 계산 중단 후 재시작하는 과정은 현대 컴퓨터 프로그램에서 함수 호출과 반환을 위한 과정과 유사하다. 차이점이라면 현대 컴퓨터의 경우 메모리를 사용한다는 점이다. 비즈니스 규칙(혹은 로직)은 실행 파일과 라이브러리의 형태로 “저장”되며, 내부 상태는 소프트웨어 객체를 관계형 구조로 변환하여 데이터베이스에 저장하는게 일반적인 형태로 할 수 있다.

튜링 기계는 항상 결정론적이기 때문에 동일한 상태와 심볼(symbol)에 대해 동일한 생성 규칙을 실행하면 항상 같은 결과가 산출된다. 이는 복잡한 중간 계산 상태를 저장하는 대신 간단한 초기 상태와 규칙을 저장할 수 있고 그 시점부터 계산 이력이 동일한 단계를 수행한다면 같은 결과를 산출 할 수 있어야 한다는 점이다. 이 같은 논리는 최신 소프트웨어에도 적용될 수 있는데 전체 소프트웨어 상태를 저장하는 대신 상태 변경을 일으키는 모든 “동작”또는 “이벤트”를 저장하면 소프트웨어의 현재 상태가 필요할 때 이벤트가 발생한 순서대로 이벤트를 재생하고 똑같은 상태를 다시 얻을 수 있다는 것을 시사한다. Vernon은이 기술을 Event Sourcing(Vernon, Vaughn. Implementing domain-driven design. Addison-Wesley, 2013)이라고 하였다.

해당 논문의 결론

쉬운 디버깅

일단 문제가 발생한 사용자가 식별되면 프로덕션 데이터베이스 복제를 통해 문제가 발생한 시점부터 이벤트를 하나씩 재생하거나 삭제하면서 문제 상황을 재현하여 해결할 수 있었다.

검증

프로덕션 디버깅에서 사용한 프로세스를 적용하여 해당 서비스의 데이터를 비즈니스 요구에 맞게 변환하여 BI 스타일 보고서를 작성하여 데이터를 검증할 수 있었다. 이벤트 저장소의 흐름을 재생하는 과정에서 비기술적인 이해 당사자들이 참가하여 여러 시나리오에 대한 분석과 토론에 참석할 수 있었다.