DDD로 비즈니스 복잡성을 코드 모델에 담는 법

도메인 주도 설계 DDD의 보편적 언어, 모델 기반 설계, 엔티티와 애그리거트 등 핵심 패턴을 실무 관점에서 정리한다.

2026-08-14 · 최초 발행 2026-04-17

비즈니스 규칙이 복잡해질수록 모델이 중심이 된다

도메인 주도 설계(Domain Driven Design, DDD)는 기업의 유사 업무 집합인 비즈니스 도메인을 기준으로 소프트웨어를 설계하고 개발하는 방법론이다. 프로세스와 무관한 패턴과 원칙을 바탕으로 하며, 도메인 모델과 실제 소프트웨어 모델인 코드 사이의 표현 차이를 줄이는 데 초점을 둔다.

MVC 패턴은 데이터베이스 중심 설계로 기울기 쉽고, 서비스 계층에 비즈니스 로직이 과도하게 쌓이는 Fat Service 문제로 이어질 수 있다. 대용량 처리가 필요한 시스템에서는 객체의 세밀한 상태 변화를 제어해야 하며, 도메인 전문가와 개발자 사이의 소통 단절도 해결해야 한다. DDD는 이 복잡성을 기술 구현보다 비즈니스 모델의 문제로 다룬다.

핵심은 도메인을 깊이 이해해 모델을 만들고, 그 모델을 코드에 직접 반영하는 데 있다. 구현 과정에서 얻은 통찰은 다시 모델에 반영되며, 모델은 피드백을 통해 계속 정교해진다.

팀의 언어와 구현 모델을 맞춘다

보편적 언어

Ubiquitous Language는 비즈니스 전문가, 설계자, 개발자 등 모든 이해관계자가 같은 뜻으로 사용하는 공통 언어다. 용어의 모호성을 줄여 소통 비용을 낮추고, 기획 문서와 소스 코드가 서로 다른 개념을 가리키는 문제를 막는다.

모델 기반 설계

Model Driven Design에서는 분석, 설계, 구현을 분리된 단계로 보지 않는다. 모델을 구현의 기준으로 삼고, 구현에서 발견한 내용을 모델에 되돌리는 순환을 만든다. 이때 실제 동작하는 코드는 도메인 모델을 가장 정확하게 드러내는 매개체가 된다.

도메인 로직의 경계를 만드는 패턴

엔티티(Entity)는 속성이 바뀌어도 고유 식별자(Identity)로 추적할 수 있는 객체다. 시스템 안에서 생명주기를 가지며 상태 변화를 관리한다.

값 객체(Value Object)는 식별자가 아니라 속성 자체로 정의된다. 불변성(Immutability)을 가지므로 복잡한 비즈니스 로직을 단순하게 만들고 객체 사이의 결합도를 낮추는 데 쓰인다.

애그리거트(Aggregate)는 생명주기가 같거나 밀접하게 연결된 모델을 원자적으로 격리한 단위다. 데이터 변경의 일관성을 보장하는 경계가 되며, 외부에서는 애그리거트 루트(Root)를 통해서만 내부 객체에 접근할 수 있다.

리포지토리(Repository)는 엔티티나 애그리거트를 저장하고 조회하는 보관소 역할을 한다. 영속성 계층의 구체적 구현 기술을 도메인 모델과 분리해 비즈니스 로직의 순수성을 유지하도록 돕는다.

서비스(Service)는 특정 엔티티나 값 객체의 행위로 표현하기 어려운 도메인 로직을 맡는다. 상태를 직접 갖지 않고 여러 도메인 객체를 조합해 복잡한 오퍼레이션을 수행하는 Stateless한 특성을 가진다.

모델을 코드로 옮기고 다시 다듬는 과정

DDD는 한 번의 설계로 끝나지 않는다. 비즈니스 도메인을 깊이 분석해 모델을 만들고, 이를 소스 개발로 연결한다. 이후 코드 리뷰와 리팩토링을 반복하면서 유연성과 확장성을 갖춘 소프트웨어로 발전시킨다.

인프라 계층 (Infrastructure)도메인 계층 (Domain Layer)Aggregate일관성 경계Entity고유 식별자Value Object불변Database영속성 저장소Repository객체 보관소Domain Service도메인 행위

협업 방식이 모델의 품질을 좌우한다

DDD는 기술 패턴만 도입해서 정착하지 않는다. 개발자와 도메인 전문가가 긴밀하게 협업해야 하며, 개발은 폭포수 방식보다 점진적이고 반복적인 방식(Incremental & Iterative)으로 진행되어야 한다. 이런 방식은 애자일(Agile) 방법론과 결합될 때 시너지를 낸다.

도메인 모델의 응집도가 높아지고 결합도가 낮아지면 유지보수성이 향상된다. 비즈니스 요건 변화에도 더 빠르게 대응할 수 있는 아키텍처적 유연성을 확보하게 되고, 장기적으로는 소프트웨어의 수명을 늘리는 기반이 된다.

Sources

도메인 주도 설계소프트웨어 아키텍처도메인 모델애그리거트리포지토리