도메인 주도 개발 시작하기

2023. 7. 11. 09:54스터디/DDD 스터디

728x90

네 개의 영역

 

표현 영역 

사용자 요청을 받아 응용 영역에 전달, 응용 영역의 처리 결과를 다시 사용자에게 전달

응용 영역

시스템이 사용자에게 제공해야할 기능을 구현

응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임

도메인 모델

도메인 핵심 로직을 구현

 

인프라스트럭처 영역

구현 기술에 대한 것을 다룸 

DB 연동, 메시징 큐 송수신

 

계층 구조 아키텍처

 

계층 구조는 상위 계층에서 하위 계층으로 의존만 존재

하위 계층은 상위 계층에 의존하지 않음

구현의 편리함을 위해 계층 구조를 유연하게 적용하기도 함

인프라 스트럭처에 의존하면 test와 기능 확장에 어려움을 가짐 : DIP로 해결

 

DIP

상위 모듈은 하위 모듈에 의존해서는 안 됨.

변하지 않는 것에 의존 -> 추상화에 의존 -> 인터페이스, 추상 클래스에 의존

궁금한 점 :  패키지 구조 어떻게 가져가야 좋은가 

DIP를 항상 적용할 필요는 없다. 사용하는 구현 기술에 따라 완벽한 DIP를 적용하기 보다는 구현 기술에 의존적인 코드를 도메인에 일부 포함하는 게 효과적일 때도 있다. 

 

도메인 영역의 주요 구성 요소

 

엔티티 ENTITY

 

고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 갖음.

도메인의 고유한 개념을 표현

도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공

 

벨류 VALUE

고유의 식별자 없이 주로 개념적으로 하나의 값을 표현할 때 사용

엔티티의 속성으로 사용할 뿐만 아니라 다른 벨류 타임의 속성으로도 사용할 수 있음

 

에그리커트 AGGREGATE

연관도니 엔티티와 벨류 객체를 개념적으로 하나로 묶은 것

 

리포지터리 REPOSITORY

도메인 모델의 영속성 처리, DB 연동

애그리거트 단위로 저장/조회

 

도메인 서비스

특정 엔티티에 속하지 않은 도메인 로직 제공

여러 엔티티와 벨류 연동

 

애그리거트

관련 객체를 하나로 묶은 군집. 도메인 모델에서 전체구조를 이해하는데 도움이 됨

애그리거트는 군집에 속한 객체를 관리하는 루트 엔티티를 가짐

간접적으로 애그리거트 내의 다른 엔티티나 벨류 객체에 접근(Order를 통하지 않고는 ShippingInfo를 변경할 방법이 없음)

요청 처리 흐름

 

인프라스트럭처 개요

 

무조건 인프라스트럭처에 대한 의존을 없앨 필요는 없다.

구현의 편리함은 DIP가 주는 다른 장점(변경의 유연함, 테스트가 쉬움)만큼 중요함

DIP의 장점을 해치지 않는 범위에서 응용 영역과 도메인 영역에서 구현 기술에 대한 의존을 가져가야

 

모듈 구성

 

영역 별로 모듈이 위치할 패키지를 구성할 수 있음

 

도메인이 크면 하위 도메인으로 나누고 각 하위 도메인 마다 별도 페키지를 구성 

도메인 모듈은 도메인에 속한 애그리거트를 기준으로 다시 패키지를 구성

한 패키지에 가능하면 10~15개 미만으로 타입 개수 유지

728x90

'스터디 > DDD 스터디' 카테고리의 다른 글

응용 서비스와 표현 영역  (0) 2023.08.12
스프링 데이터 JPA를 이용한 조회 기능  (0) 2023.08.05
리포지터리와 모델 구현  (0) 2023.07.28
애그리거트  (0) 2023.07.19
도메인 모델 시작하기  (0) 2023.07.06