Skip to content

DDD의 아키텍처

도메인 주도 설계에서는 도메인을 중심으로하여 애플리케이션을 설계, 구성한다. 애플리케이션은 도메인 외에도 표현, 응용, 인프라스트럭처 등의 영억으로 나뉘어있고 각각의 역할을 수행한다. application전체를 구성하는 아키텍처 요소에 대해 알아보자.

image

대표적으로 DDD에서는 위와 같은 구조의 Layered Architecture를 가진다.

계층별 설명

1. Presentation Layer (표현 계층)

  • 사용자 요청을 해석하고 응답하는 일을 책임지는 계층이다.
  • 사용자에게 UI를 제공하거나 클라이언트에 응답을 보내는 모든 클래스가 포함된다.
  • Client로부터 request를 받아 response를 보내는 API를 정의한다.

2. Application Layer (응용 계층)

  • 사용자의 요청을 전달받아 시스템이 제공해야하는 기능과 로직을 구현하는 계층이다.
  • 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다.
  • 실질적인 데이터의 상태 변화 등의 처리는 도메인 계층에서 진행할 수 있도록 위임한다.

3. Domain Layer (도메인 계층)

  • 비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고있는 계층이다.
  • 도메인의 핵심 로직을 구현한다.

4. Infrastructure Layer (인프라 계층)

  • 외부와의 통신(DB, 메시징 시스템 등)을 담당하는 계층이다.
  • 논리적인 개념을 표현하기보다 실제 구현 기술을 다룬다.

Layered Architecture 구현시 규칙

Layered Architecture를 올바르게 구현하기 위해선 아래 두가지의 규칙을 지켜야한다.

1. 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않는다.

  • SOLID 원칙 중 DIP(고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다) 원칙과 동일한 규칙이다. 이에 위반되는 경우 저수준 모듈과 고수준 모듈 사이에 인터페이스를 두어, 추상 클래스와 의존 관계를 맺도록 해야한다.

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

  • 각 계층이 그에 맞는 역할만 수행해야한다는 의미이다. 클래스가 그에 맞는 계층에 배치되고, 계층의 경계가 구분되어야 계층형 아키텍처의 의미를 제대로 가질 수 있다.