본문 바로가기
Back-End/도메인 주도 개발 시작하기

[DDD] 도메인 주도 개발 시작하기_Ch1

by ChaSso 2023. 3. 11.

Chapter 1 도메인 모델 시작하기

1.1 도메인이란?

∘ 도메인 : 소프트웨어로 해결하고자 하는 문제 영역

∘ 한 도메인은 하위 도메인으로 나눌 수 있음

∘ 한 하위 도메인은 다른 하위 도메인과 연동해서 완전한 기능 제공

∘ 소프트웨어가 도메인의 모든 기능을 제공하는 것은 아님. 외부 시스템과 기능 연동해서 제공하기도 함.

∘ 상황을 고려해서 하위 도메인이 구성됨

 

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

∘ 개발자가 기능 구현을 위해 코드를 작성할 때 맨 첫 단계는 요구사항 분석

∘ 요구사항을 올바르게 이해하기 위해서 개발자는 전문가와 직접 대화해야 함

 

1.3 도메인 모델

∘ 도메인 모델 : 특정 도메인을 개념적으로 표현한 것. 도메인 자체를 이해하기 위한 개념 모델.

∘ 개념 모델인 도메인 모델에 구현 모델을 추가해야 함

∘ 각각의 하위 도메인마다 별도로 모델을 만들어야 함

 

1.4 도메인 모델 패턴

∘ 애플리케이션의 아키텍처는 사용자 인퍼테이스(UI) 또는 표현(Presentation), 응용(Application), 도메인, 인프라스트럭처(Infrastructure)로 구성됨

∘ 도메인 모델 : 아키텍처 상의 도메인 계층을 객체 지향 기법으로 구현하는 패턴

∘ 도메인 계층은 도메인의 핵심 규칙을 구현

∘ 도메인 모델 패턴 : 도메인 규칙을 객체 지향 기법으로 구현하는 패턴

∘ 핵심 규칙을 구현한 코드가 도메인 모델에만 위치하기 때문에 나중에 규칙을 변경할 때 다른 코드에 가는 영향이 줄어듦

 

1.5 도메인 모델 도출

도메인 모델링의 기본 작업은 모델을 구성하는 핵심 구성요소, 규칙, 기능을 찾는 것

 

1.6 엔티티와 밸류

∘ 도출한 모델은 엔티티와 밸류로 구분됨

 

1.6.1 엔티티

∘ 각각의 엔티티는 고유의 식별자를 가짐

∘ 엔티티 객체 : 주문, 엔티티의 식별자 : 주문 번호

∘ 엔티티 생성 후 삭제할 때까지 엔티티의 식별자는 유지됨

 

1.6.2 엔티티의 식별자 생성

∘ 식별자 생성 방식

 - 특정 규칙에 따라 생성 ex. 주문번호, 운송장번호, 카드번호

 - UUIDNano ID와 같은 고유 식별자 생성기 사용

 - 값을 직접 입력 ex. 회원 아이디, 이메일

 - 일련번호 사용(시퀀스나 DB의 자동 증가 칼럼 사용) ex. 데이터베이스가 제공하는 자동 증가 기능 사용

자동 증가 칼럼을 사용할 경우 리포지터리는 DB가 생성한 식별자를 구해서 엔치치 객체에 반영

 

1.6.3 밸류 타입

∘ 밸류 타입은 완전한 하나를 표현할 때 사용 ex. receiverName 필드와 receiverPhoneNumber 필드는 서로 다른 두 데이터를 갖지만 개념적으로는 둘 다 받는 사람을 의미함

∘ 밸류 타입을 이용하면 코드의 의미를 더 잘 이해할 수 있음

∘ 안전한 코드 작성을 위해 밸류 타입을 불변으로 정하기도 함

 

1.6.4 엔티티 식별자와 밸류 타입

∘ 식별자의 도메인에서의 의미를 드러내기 위해 밸류 타입을 사용할 수 있음

 

1.6.5 도메인 모델에 set 메서드 넣지 않기

∘ 도메인 모델에 get/set 메서드를 무조건 추가하는 것은 좋지 않음

∘ set 메서드는 도메인의 의도가 코드에서 드러나지 않게 만들기도 하고, 도메인 객체가 불완전한 상태로 사용되도록 할 수 있음

 

1.7 도메인 용어와 유비쿼터스 언어

∘ 도메인에서 사용하는 용어를 코드에 반영해야 함

∘ 개발에 관여하는 사람들이 공통으로 사용할 수 있는 언어