Study with book/DDD START!

1. 도메인 모델 시작


1.1 도메인이란?

내가 만들고 있느 서비스 혹은 소프트웨어가 영향력을 미치는 곳이며 즉 소프트웨어가 어떠한 문제를 해결하고자 하는 영역을 말합니다.

도메인은 다시 하위 도메인으로 나눌 수 있습니다.

하지만 도메인마다 모두 고정된 하위 도메인이 존재하는 것은 아닙니다.

쇼핑몰을 운영하고 있다면, E-Commerce가 나의 도메인 영역이 되는 것입니다.
그리고 쇼핑몰은 회원, 카테고리, 주문, 상품 등의 하위 도메인이 존재합니다.
모든 온라인 쇼핑몰이 고객 혜택을 제공하지 않으며 규모가 작은 업체는 엑셀과 같은 도구를 이용해서 수작업으로 정산을 처리할 수도 있습니다.

 

1.2 도메인 전문가와 개발자 간 지식 공유

코딩에 앞서 요구사항을 올바르게 이해하는 것이 중요합니다. 요구사항을 제대로 이해하지 않으면 변경하거나 유용함이 떨어지는 시스템을 만들기 때문입니다. 요구사항을 올바르게 이해하기 위해서는 도메인 전문가와 개발자가 직접 대화를 통해서 도메인 지식을 일치시켜야 합니다.

Garbage in, Garbage out
잘못된 값이 들어가면 잘못된 결과가 나온다. 라는 의미를 갖습니다.

 

1.3 도메인 모델

도메인 모델은 특정 도메인개념적으로 표현한 것입니다. 도메인은 소프트웨어가 해결하고자 하는 영역을 뜻합니다. 그리고 개념적으로 표현한다는 것은 클래스 다이어그램, 상태 다이어그램, UML 뿐만 아니라 기획자와 개발자가 서로 대화하면서 연습장에 끄적였던 낙서 등을 포함합니다.

클래스 다이어그램

1.4 도메인 모델 패턴

일반적인 어플리케이션 아키텍쳐는 아래와 같이 4개의 영역으로 구성됩니다. 상위 레이어(presentation layer)는 하위 레이어(application layer)에 대해서 알고 있지만(의존하지만) 하위 레이어는 상위 레이어에 대해서 알지 못합니다.

아키텍쳐 구성

Presentation Layer (표현 영역 / UI영역)

- 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 합니다.

- 제공하는 방법은 HTTP, TCP, RCP등 다양합니다. 어떤 데이터를 어떻게 제공할 것인가에 대해 관심이 있는 영역입니다.

 

Application Layer (응용 서비스 영역)

- 사용자의 요청을 처리하기 위한 작업을 담당합니다.

- Repository로부터 어그리거트를 조회 -> 에그리거트에게 메시지를 던지고(어떤 작업을 요청하고) -> 에그리거트 결과를 토대로 사용자에게 제공합니다. 즉, 에그리거트들 간의 실행 흐름을 제어합니다.

- 논리적인 트랜잭션을 에그리거트에서 처리한다면, 물리적인 트랜잭션은 응용 서비스 영역에서 처리를 진행합니다.

- 도메인 영역에서 발생시킨 어떠한 이벤트를 처리합니다.

- 응용 서비스 영역으로 보내는 파라미터의 종류가 많다면 별도의 클래스로 만들 수 있는데 보통 DTO로 명명하여 만듭니다.

 

Domain Layer (도메인 영역)

- 도메인 영역의 논리적인 비지니스 로직을 처리합니다.

 

Infrastructure Layer (인프라 영역)

- 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리합니다.