목표
Domain Entity vs JPA Entity
아키텍처 구성
Presentation; 사용자 인터페이스 or 표현
사용자의 요청을 처리하고 응답하는(사용자에게 정보를 보여주는) 역할
여기서 사용자는 실제 서비스를 이용하는 고객일 수도 있고, API를 사용하는 외부 시스템일 수도 있다.
Application; 응용
서비스에서 제공 해야하는 완성된 기능을 Application 계층에서 제공한다.
사용자가 요청한 기능을 실행한다.
업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 완성시킨다.
Domain; 도메인
시스템이 제공할 **도메인 규칙(=비즈니스 로직)**을 구현한다.
여기서 도메인 규칙이란?
도메인의 핵심 규칙을 구현한다. 주문 도메인의 경우, “출고 전에 배송지를 변경할 수 있다.”라는 규칙과 “주문 취소는 배송 전에만 할 수 있다.”라는 규칙을 구현한 코드가 도메인 계층에 위치한다. 이런 도메인 규칙을 객체 지향 기법으로 구현하는 패턴이 도메인 모델 패턴이다.
여기서 말하는 도메인 모델은 아키텍처 상의 도메인 계층을 객체 지향 기법으로 구현하는 패턴을 말한다.
Infrastructure; 인프라스트럭처
데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다.
DDD의 핵심
코드에 도메인 지식이 녹아 들어야 한다.
이렇게 하면 소통 과정에서 발생하는 용어의 모호함을 줄일 수 있고 개발자는 도메인과 코드 사이에서 불필요한 해석 과정을 줄일 수 있다.