이벤트 모델링을 통한 효과적인 도메인 주도 설계 및 애플리케이션 개발 전략

7. Mateusz Nowak - Might & Magic of Domain-Driven Design - wroc_love.rb 2025

작성자
wrocloverb
발행일
2025년 04월 17일

핵심 요약

  • 1 기존 데이터베이스 중심의 애플리케이션 설계 방식에서 벗어나, 비즈니스 프로세스와 행위에 초점을 맞춘 이벤트 중심 사고의 중요성을 강조합니다.
  • 2 이벤트 모델링은 도메인 전문가와 개발자 간의 공유된 이해를 구축하고, 시스템 경계를 명확히 하여 모듈화된 애플리케이션을 설계하는 강력한 도구임을 제시합니다.
  • 3 계획 단계에서의 철저한 모델 검증과 아키텍처 실행을 통해 개발 효율성을 높이고, 비즈니스 변화에 신속하게 대응할 수 있는 유연한 시스템 구축을 목표로 합니다.

도입

Mateusz Novak은 강연을 통해 Eric Evans의 저서 '도메인 주도 설계(Domain-Driven Design, DDD)'가 자신의 프로그래밍 인생을 바꾼 '게임 체인저'였음을 밝히며, 전통적인 명사 중심의 데이터베이스 모델링 방식에서 벗어나 비즈니스 프로세스와 행위에 초점을 맞춘 '이벤트 중심 사고(Event-Driven Thinking)'로의 전환이 필수적임을 역설합니다. 그는 이벤트 중심 사고가 DDD, 이벤트 모델링(Event Modeling), 이벤트 소싱(Event Sourcing) 등 다양한 방법론을 포괄하는 개념이며, 이를 통해 애플리케이션 설계의 패러다임을 전환해야 한다고 주장합니다.

노박은 ‘Might and Magic’이라는 비유를 들어, 성공적인 설계는 이론적 지식(패턴, 휴리스틱)과 실제 경험 및 직관(마법)의 조화에서 온다고 설명합니다. 그는 Uber와 같은 실제 애플리케이션의 새로운 기능 모델링 사례를 통해 유연한 모델의 중요성을 강조합니다.

강연의 핵심 방법론인 이벤트 모델링은 이벤트 스토밍(Event Storming)을 통해 도출된 비즈니스 이벤트를 시작으로, 사용자의 의도를 나타내는 명령(파란색 스티커), 시스템의 현재 상태를 나타내는 뷰(초록색 스티커), 그리고 사용자 인터페이스(UI)를 추가하여 비즈니스 프로세스를 영화의 프레임처럼 시각화합니다. 이 과정에서 ‘이벤트 후에 무엇이 일어났는가?’ 또는 ‘이벤트 전에 무엇이 일어났는가?’와 같은 질문을 통해 시스템의 자율적이고 완전한 모듈(바운디드 컨텍스트)을 식별하고, 잘못된 결합(Big Ball of Mud)을 방지하여 불필요한 리팩토링 시간을 절약할 수 있다고 강조합니다.

개발 팀의 효율적인 작업을 위해 이벤트 모델링 결과물을 ‘수직적 슬라이스(Vertical Slice)’로 분할하는 방법을 제시합니다. 이는 쓰기(Write) 슬라이스, 읽기(Read) 슬라이스, 자동화(Automation) 슬라이스로 구분되며, 각 슬라이스는 독립적인 작업 단위로 병렬 개발이 가능하게 하여 프로젝트 진행 상황을 명확히 보여줍니다.

코드 구현에 있어서는 Ruby 언어를 활용한 ‘Decide’, ‘Evolve’, ‘React’ 세 가지 순수 함수를 소개합니다. ‘Decide’ 함수는 비즈니스 로직과 불변성을 담당하고, ‘Evolve’ 함수는 이벤트를 기반으로 상태를 계산하며, ‘React’ 함수는 특정 이벤트에 반응하여 다른 모듈에 명령을 전달하는 자동화 로직을 구현합니다. 이러한 패턴은 이벤트 소싱 방식뿐만 아니라 스냅샷 기반의 데이터베이스 저장 방식에도 적용 가능하여 지속성 독립성을 제공합니다.

마지막으로, 그는 전통적인 코드 리뷰 대신 ‘아키텍처 실행(Architecture Execution)’을 제안합니다. 이는 계획 단계에서 아키텍처 검토, 실험, 모델 검증을 통해 품질을 선제적으로 확보하고, 구현 단계에서는 사전에 정의된 표준을 따르므로 코드 리뷰가 형식적인 절차가 되도록 하여 개발 효율성을 극대화합니다.

결론

궁극적으로 이 강연은 기술 전문가와 도메인 전문가 사이의 장벽을 허물어 '공유된 이해(Shared Understanding)'를 구축하는 것이 DDD의 핵심 목표임을 강조합니다. 이를 통해 코드가 비즈니스를 정확히 반영하고 제품과 함께 진화하며, 비즈니스 변화에 신속하게 대응할 수 있는 유연한 시스템을 구축할 수 있다고 결론짓습니다. 개발자가 기술적 문제 해결에 소요되는 시간을 줄여 비즈니스 가치 창출에 집중하고, 궁극적으로 기업의 성장에 기여하는 진정한 비즈니스 파트너가 되는 길을 제시하며 강연을 마무리합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!