DDD란
도메인 주도 설계(Domain-Driven Design)는 복잡한 소프트웨어의 핵심 복잡성을 도메인에 집중하여 다루는 접근법입니다. 40년간 복잡한 비즈니스 시스템을 설계해온 저로서는 DDD가 복잡성 관리에 효과적이라고 확신합니다. 에릭 에반스의 '도메인 주도 설계'가 원전입니다.
핵심 개념: 유비쿼터스 언어
유비쿼터스 언어는 개발자와 도메인 전문가가 공유하는 언어입니다. 코드, 문서, 대화에서 동일한 용어를 사용합니다. 오해를 줄이고 소통을 원활하게 합니다. 코드가 비즈니스를 반영합니다. 용어 사전을 만들고 유지합니다.
전술적 패턴
Entity: 고유 식별자로 구분되는 객체입니다. Value Object: 불변이며 속성으로 구분됩니다. Aggregate: 일관성 경계를 가진 엔티티 그룹입니다. Aggregate Root가 외부 접근점입니다. Repository: 도메인 객체 영속화를 추상화합니다. Domain Service: 엔티티에 속하지 않는 도메인 로직입니다.
전략적 패턴
Bounded Context: 유비쿼터스 언어가 적용되는 경계입니다. 큰 시스템을 여러 컨텍스트로 나눕니다. 마이크로서비스 분리의 기준이 됩니다. Context Map: 컨텍스트 간 관계를 표현합니다. 팀 간 협력 방식도 반영합니다.
DDD 적용 조언
모든 프로젝트에 DDD가 필요하지는 않습니다. 도메인이 복잡하고 장기 프로젝트에 적합합니다. 도메인 전문가와의 협력이 필수입니다. 처음부터 완벽한 모델을 만들려 하지 마세요. 반복적으로 개선합니다. 전술적 패턴만 적용해도 가치가 있습니다.
댓글
0