Page History
도메인 주도 설계(DDD)는 복잡한 도메인 문제를 해결하기 위해 에릭 에반스(Eric Evans)가 제안한 소프트웨어 설계 접근법입니다. DDD는 도메인을 명확히 이해하고, 이를 코드로 반영하여 비즈니스 로직과 기술 구현의 일관성을 유지하는 것을 목표로 합니다. 이 접근법은 복잡한 비즈니스 요구사항을 쉽게 관리할 수 있도록 해주며, 주로 이벤트 소싱(Event Sourcing)과 CQRS(Command Query Responsibility Segregation)와 같은 패턴으로 확장되고 있습니다.
DDD의 주요 3인방으로는 DDD의 창시자인 에릭 에반스(Eric Evans), 실무적 접근을 강조한 반버논(Vaughn Vernon), 그리고 마이크로서비스와의 연계성을 설명한 **그렉 영(Greg Young)**이 있습니다. 에릭 에반스는 DDD의 기초 이론을 정립하고, 이를 통해 복잡한 도메인을 효과적으로 관리하는 방법을 제시했습니다. 반버논은 이러한 DDD 개념을 실용적으로 확장하며, 특히 이벤트 소싱과 CQRS와 잘 맞아떨어지는 액터 모델(Actor Model)과 리액티브 시스템(Reactive Systems)을 함께 소개했습니다. 그렉 영은 CQRS와 이벤트 소싱을 통해 도메인 로직을 효율적으로 관리하는 기법을 제안하며, DDD의 개념을 마이크로서비스 아키텍처와 결합하는 데 중요한 역할을 했습니다.
액터 모델은 메시지를 통해 액터들이 상호작용하며 상태를 변경하는 패턴으로, 분산 시스템 및 비동기 처리를 지원하여 높은 확장성과 성능을 제공합니다. 이는 DDD의 복잡한 도메인 로직을 더 유연하게 관리하는 데 기여합니다.
반버논은 DDD를 실무에 적용하는 다양한 방법을 제시한 저서 **"Implementing Domain-Driven Design"**을 통해 잘 알려져 있습니다. 이 책은 DDD의 개념을 실용적으로 구현하는 방법을 상세히 설명하며, 복잡한 도메인 모델을 관리하고 설계하는 데 필요한 다양한 패턴과 전략을 다룹니다. 특히 이벤트 소싱, CQRS, 바운디드 컨텍스트 등의 개념을 실제 프로젝트에 적용할 수 있도록 구체적인 예제와 가이드를 제공합니다.
반버논이 언급한 주요 프레임워크 중 하나로는 Akka가 있습니다. Akka는 JVM 기반의 라이브러리로 액터 모델을 구현하여 리액티브 시스템을 구축하는 데 도움을 줍니다. Akka를 활용하면 이벤트 소싱과 CQRS의 비동기적 특성을 극대화할 수 있어 고성능 시스템 구축이 가능합니다.
또 다른 도구로는 Axon Framework가 있으며, Axon은 Java 기반의 오픈소스 프레임워크로 DDD와 이벤트 소싱, CQRS를 쉽게 구현할 수 있도록 돕습니다. Axon은 바운디드 컨텍스트 내에서 복잡한 애그리게이트 간의 상호작용을 관리하고, 이벤트 흐름을 시각화하는 기능을 제공합니다.
마지막으로, Vert.x와 Spring WebFlux와 같은 리액티브 프로그래밍 프레임워크도 소개되었습니다. 이들은 리액티브 스트림을 처리하고 비동기 시스템을 구축하는 데 효과적이며, 이벤트 소싱과 CQRS와 함께 사용될 때 데이터 일관성 및 반응성을 높이는 데 유용합니다.
반버논은 이러한 개발 패턴과 프레임워크를 통해 복잡한 도메인 로직을 효과적으로 관리하고, 시스템의 확장성과 유지보수성을 높이는 방안을 강조했습니다. DDD의 기원을 기반으로 이러한 확장된 개념들은 오늘날의 복잡한 분산 시스템에서 필수적인 도구로 자리 잡고 있습니다.