본문 바로가기
카테고리 없음

DDD 도메인 주도 설계 (Domain Driven Developement)

by 바디스 2023. 1. 25.

도메인 주도 설계 (Domain Driven Developement)

등장배경

기존의 개발 도메인 주도 개발
데이터에 종속 문제 영역을 개념적으로 표현
모델링과 개발 간의 불일치 발생 이해관계자(개발, 기획, 사용자 등) 이 공통적으로 의미를 이해할 수 있음 => 효과적인 모델링

도메인

  • 소프트웨어로 해결하고자 하는 문제 영역 
  • 한 도메인은 다시 하위 도메인으로 나눌 수 있다.

도메인 모델

  • 도메인(문제 영역)을 개념적으로 표현한 것
  • 도메인 모델을 여러 이해 당사자가 이해할 수 있는 개념적 모델링 가능
  • 하위 도메인으로 개념 구체화 가능 ex) 상품 주문 도메인 => 주문자, 주문상품, 배송 (하위 도메인)
  • 클래스 다이어그램, 상태 다이어그램, 시퀀스 다이어그램 등의 방식으로 표현 가능
  • 도메인은 고정적이지 않기 때문에, 도메인이 변경되면 이에 따라 도메인 용어 및 모델도 변경 반영되어야 한다.

DDD 핵심 목표

"High cohesion" , "Loosly coupling"으로 각각의 도메인은 서로 철저히 분리되고,

높은 응집력과 낮은 결합도 변경과 확장에 용이한 설계 얻게된다

DDD 아키텍쳐

Layered Architecture

Layered Architecture를 올바르게 구현하기 위한 두 가지 중요한 규칙이 있다.

1. 위의 계층에서 아래 계층에는 접근이 가능하지만 아래에서 위로는 불가능한 것을 기본으로 한다.

2.  계층의 관심사와 관련된 어떤 것도 다른 계층에 배치되어서는 안된다.

영역 설명
표현(Interface) 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 여기서 사용자는 소프트웨어를 사용하는 사람뿐만 아니라 외부 시스템일 수도 있다.
- Controller 영역
응용(Application) 사용자가 요청한 기능을 실행한다. 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다.
- Service, 트랜잭션 관리, DTO변환, 사용자 인증/인가, 파라미터 검증
도메인(Domain) 시스템이 제공할 도메인 규치을 구현한다.
- Entitiy, Value, Aggergate, repository, dmaoin Service
인프라스트럭처(Infrastructure) 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다.

Layerd Architecture의 장단점

장점

  • 각 레이어를 loosely coupling 된 형태로 구축하면서, 각각 자신의 관심사에만 집중할 수 있다.
  • 핵심 비즈니스 로직을 순수하게 유지함으로써 유지보수와 확장성 측면에서 이득을 얻을 수 있다.
  • 각 레이어에 서로 다른 추상화 수준을 가진 상태와 행동을 위치시킴으로써 코드 재사용성을 높일 수 있다.

단점

  • 서비스가 커질수록 복잡도가 증가하여 확장성이 떨어진다.
  • 레이어로 분리된 관심사 외에 다른 관심사가 생길 경우 패키지 분리 및 코드 배치가 어렵다.

댓글