2.4 도메인 영역의 주요 구성요소
- 엔티티(ENTITY) : 고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다. 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.
- 밸류(VALUE) : 고유의 식별자를 갖지 않는 객체로 개념적으로 하나의 값을 표한할 때 사용한다. 엔티티의 속성으로 사용할 뿐만 아니라 다른 밸류 타입의 속성으로 사용한다.
- 애그리거트(AGGREGATE) : 애그리거트는 연관된 엔티티와 밸류를 개념적으로 하나로 묶은 것이다. 애그리거트를 사용하면 개별 객체가 아닌 관련 객체를 묶어서 객체 군집 단위로 모델을 바라볼 수 있다.(큰 틀에서 모데인 모델 관리 가능)
- 리포지토리(REPOSITORY) : 도메인 모델의 영속성을 처리한다. 엔티티나 밸류가 요구사항에서 도출되는 도메인 모델이라면 리포지토리는 구현을 위한 도메인 모델이다.
- 도메인 서비스(DOMAIN SERVICE) : 특정 엔티티에 속하지 않는 도메인 로직을 제공한다. 도메인 로직이 여러 엔티티와 밸류를 필요로 하면 도메인 서비스에서 로직을 구현한다.
2.5 요청 처리 흐름
- 웹 브라우저를 통해 HTTP 요청을 받고, 표현 영역에 해당하는 컨트롤러는 HTTP 요청 파라미터를 응용 서비스에 맞게 변환하여 전달한다.(표현 영역은 사용자가 전송한 데이터 형식이 올바른지 검사하고 응용 영역에 기능 실행 위임)
- 응용 서비스는 도메인 모델을 이용해서 기능을 구현한다. 기능 구현에 필요한 도메인 객체를 리포리토리에서 가져오거나 신규 도메인 객체를 생성하여 리포지토리에 저장한다.
- 도메인 로직을 실행하여 나온 결과를 다시 표현영역을 거쳐 HTTP 응답으로 전송한다.
2.6 인프라스트럭처의 개요
- 인프라스트럭쳐는 표현, 응용, 도메인 영역들을 지원한다. DIP 내용대로 도메인 영역과 응용 영역에서 인프라스트럭처의 기능을 직접 사용하는 것보다 이 두 영역에서 정의한 인터페이스를 인프라스트럭처 영역 내에서 구현하는 것이 시스템을 유연하고 테스트도 용이해진다.
- 무조건적인 인프라스트럭처에 대한 의존성을 없앨 필요는 없다.(@Transactional)
2.7 모듈 구성
- 적정 수준에 맞춰 도메인들을 패키지로 묶는다.
참고 : 도메인 주도 개발 시작하기(최범균님 지음)