Posted On 2026년 05월 22일

데이터의 시간 여행: 이벤트 소싱과 도메인 모델의 새로운 관계

nobaksan 0 comments
여행하는 개발자 >> 기술 >> 데이터의 시간 여행: 이벤트 소싱과 도메인 모델의 새로운 관계

소프트웨어 개발에서 상태(state)란 무엇일까. 대부분의 시스템은 현재 상태만을 저장하고, 그 상태를 변경하는 행위를 기록하지 않는다. 데이터베이스에 저장된 사용자의 잔액, 주문의 상태, 상품의 재고량은 모두 ‘지금 이 순간’의 스냅샷일 뿐이다. 하지만 이벤트 소싱(Event Sourcing)은 이 관점에 근본적인 질문을 던진다. “상태를 저장하는 대신, 상태를 변화시킨 모든 사건을 기록하면 어떨까?”

이벤트 소싱의 핵심은 단순하다. 시스템의 상태를 결정하는 모든 변화를 시간 순서대로 기록하는 것이다. 사용자가 계좌에서 돈을 인출하면 ‘인출 이벤트’가 발생하고, 주문이 취소되면 ‘취소 이벤트’가 저장된다. 이벤트들은 불변(immutable)하며, 오직 추가만 가능하다. 현재의 상태는 이벤트들의 누적 결과일 뿐이다. 마치 은행 거래 내역이 모든 입출금 기록을 담고 있어 현재의 잔액을 계산할 수 있는 것처럼.

이 접근 방식은 몇 가지 흥미로운 가능성을 열어준다. 첫째, 시스템의 모든 상태 변화를 추적할 수 있다. 특정 시점의 상태를 재구성하거나, 과거의 특정 시점으로 되돌리는 것도 이론상 가능하다. 둘째, 이벤트 자체가 도메인 모델의 핵심 로직을 담을 수 있다. 예를 들어 ‘주문 취소 이벤트’는 단순히 상태를 변경하는 것이 아니라, 취소에 필요한 비즈니스 규칙(환불 처리, 재고 복원 등)을 포함할 수 있다. 셋째, 이벤트 스트림은 자연스럽게 감사(audit) 로그로 기능하며, 디버깅이나 분석에 유용하다.

하지만 이벤트 소싱이 모든 상황에 적합한 것은 아니다. 가장 큰 도전은 복잡성이다. 단순한 CRUD 애플리케이션에서 이벤트 소싱을 도입하면 과도한 설계가 될 수 있다. 또한, 이벤트 스트림을 재생(replay)하여 현재 상태를 재구성하는 것은 성능에 부담을 줄 수 있다. 특히, 이벤트 수가 많아질수록 재생 시간은 길어진다. 이를 해결하기 위해 스냅샷(snapshot) 기법을 사용하기도 하지만, 이는 또 다른 복잡성을 추가한다.

흥미로운 점은 이벤트 소싱이 도메인 모델과의 관계를 어떻게 변화시키느냐이다. 전통적인 도메인 모델은 상태와 행동을 함께 캡슐화한다. 예를 들어 ‘주문’ 객체는 주문 상태와 주문 취소, 결제 처리 등의 메서드를 가진다. 하지만 이벤트 소싱에서는 도메인 모델이 이벤트를 생성하고, 이벤트가 상태를 결정한다. 이는 CQRS(Command Query Responsibility Segregation)와 자연스럽게 결합된다. 명령(Command)은 이벤트를 생성하고, 조회(Query)는 이벤트 스트림을 재생하거나 별도의 읽기 모델을 사용한다.

이벤트 소싱의 진정한 가치는 ‘시간’을 모델링하는 새로운 방식에 있다. 전통적인 시스템은 시간의 흐름을 암묵적으로만 다루지만, 이벤트 소싱은 시간을 명시적으로 다룬다. 이는 과거의 상태를 재구성하거나, 미래의 시나리오를 시뮬레이션하는 데 유용하다. 예를 들어, 금융 시스템에서 특정 시점의 포트폴리오 상태를 재구성하거나, 재고 시스템에서 과거의 재고 변동을 분석하는 데 활용할 수 있다.

하지만 이벤트 소싱을 도입할 때는 신중해야 한다. 기술적인 장점만 보고 도입하면 실패할 가능성이 크다. 이벤트 소싱이 필요한 비즈니스 문제부터 정의해야 한다. 예를 들어, 감사 로그가 필수적인 시스템, 과거 상태의 재구성이 중요한 시스템, 복잡한 비즈니스 규칙이 이벤트 형태로 자연스럽게 표현되는 시스템 등이 적합하다. 또한, 팀의 기술 수준과 유지보수 역량을 고려해야 한다. 이벤트 소싱은 학습 곡선이 가파르며, 잘못 설계하면 시스템이 복잡해지고 성능 문제가 발생할 수 있다.

이벤트 소싱은 단순한 기술 패턴을 넘어, 소프트웨어 설계에 대한 새로운 사고방식을 제시한다. 데이터의 시간적 흐름을 명시적으로 모델링함으로써, 시스템의 유연성과 투명성을 높일 수 있다. 하지만 모든 도구와 마찬가지로, 적절한 상황에서 적절하게 사용해야 그 가치를 발휘할 수 있다. 이벤트 소싱이 모든 문제를 해결하는 만능 열쇠는 아니지만, 특정 문제에는 매우 강력한 해결책을 제공한다.

더 자세한 내용은 Event-Sourced Domain Modeling에서 확인할 수 있다.


이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Related Post

자율 에이전트의 신원, 그리고 우리가 놓치고 있던 것들

오픈소스 프로젝트 ZeroID는 "자율 에이전트"라는 단어 하나로도 충분히 흥미롭지만, 그 이면에 담긴 문제의식이 더 중요하다.…

자본의 미래, 승자는 누구인가: 버크셔와 소프트뱅크의 운명적 대결

버크셔 해서웨이와 소프트뱅크. 두 회사의 이름은 전혀 다른 시대를 상징한다. 하나는 20세기 미국의 자본주의 정수를…

메모리 관리의 철학: 러스트의 소유권이 던지는 질문

프로그래밍 언어가 메모리를 다루는 방식은 단순히 기술적 선택을 넘어, 그 언어의 철학을 드러낸다. C++가 포인터와…