티스토리 뷰

참조

해당 글은 아래 책 내용을 학습•기록한 내용입니다.

책에서 말하고자 하는 내용과 스스로 정리한 내용이 개인적인 견해가 섞여 다를 수 있기 때문에 자세한 내용은 책을 통해 확인 부탁드립니다.

도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지

 

도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지 - 교보문고

이 책은 도메인 모델을 이용하여 애플리케이션을 구현하는 데 필요한 내용을 다루며 전체 11 장으로 구성되어 있다. ★이 책의 내용 1장과 2장에서는 도메인 모델을 구현할 때 알아야 할 기본적

www.kyobobook.co.kr

 

 

도메인 이란?

🔥 소프트웨어로 해결하고자 하는 문제 영역으로 여러 하위 도메인으로 구성된다.

 

쇼핑몰 도메인과 그 하위 도메인

 

 

도메인 전문가

👉 각 도메인에는 전문가가 존재한다. 회계 도메인에는 회계 전문가가 광고 도메인에는 광고 전문가가 있다. 이러한 도메인 전문가와 개발자는 도메인 지식을 공유하고 요구사항을 분석하여 시스템을 만들어야 한다.

💡 도메인 전문가는 소프트웨어 전문가가 아니기 때문에 원하는 바를 언제나 정확히 표현하지는 못한다. 따라서 개발자는 소통을 하면서 상대가 원하는 것을 정확히 파악하고 제안할 수 있어야한다.

 

도메인 모델

 🔥  도메인 모델은 특정 도메인을 개념적으로 표현한 것을 의미한다. 이를 사용하면 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 된다. 이러한 도메인 모델을 표현하는 방법으로는 객체 모델(프로그래밍) 혹은 워크플로우(기획)등 여러 방법이 존재한다.

 

 

도메인 모델 패턴

일반적인 애플리케이션 아키텍처는 4가지 영역으로 나뉜다.
영역 설명
Presentation ( 표현 ) 클라이언트의 요청을 처리하고 응답을 보내주는 계층
Application ( 응용 ) 사용자 요청 기능을 실행 혹은 비즈니스 로직 구현 계층
Domain ( 도메인 ) 시스템이 제공할 도메인 규칙을 구현하거나 비즈니스 로직 구현 계층
Infrastructure ( 인프라스트럭처 ) 데이터베이스 혹은 메시징 시스템 같은 외부 시스템과 연동

 

 

 

도메인 모델 도출 과정

1️⃣  도메인 요구사항 파악

2️⃣ 도메인 행동 (행위) 결정

3️⃣ 행동을 메서드로 도메인 모델(객체 모델)에 추가

 

엔티티 ( Entity )와 밸류 ( Value )

엔티티 ( Entity )

💡 엔티티의 가장 큰 특징은 식별자를 가지고 있다는 것이다. 고유한 식별자는 엔티티 객체를 구분할 수 있도록 도와준다. 이 식별자는 두 엔티티 객체의 같고 다름을 구분할 수 있도록 해준다.
자바 에서 두 객체의 같고 다름은 eqauls() , hashCode() 메서드를 통해 판단하게 된다. 따라서 이 식별자를 바탕으로 해당 메서드를 오버라이딩 해주는 것이 좋다.

 

엔티티의 식별자 생성 방법

1️⃣ 특정 규칙에 따라 생성
  • ex) 주문 번호, 카드 번호, 운송장 번호 등.
2️⃣ UUID 나 Nano ID와 같은 고유 식별자 생성기 사용.
  • java.util.UUID 클래스를 통해 생성한 UUID
3️⃣ 값을 직접 입력한다.
  • ex) 유저가 입력하는 Email, 아이디
4️⃣ 일련번호 사용 ( 시퀀스나 DB의 자동 증가 칼럼을 사용한다. )
  • ex) MySQL의 auto increment 로 생성된 ID

 

 

밸류(Value) 타입

💡 개념적으로 하나로 표현할 수 있는 데이터를 하나의 값으로 묶어낸 것을 의미한다.
예를 들어 주소(Address)의 경우 상세주소, 우편번호등 다양한 데이터를 포함하여 개념적으로 하나의 데이터로 표현될 수 있고, 이런 경우 하나의 밸류 타입으로 묶어낼 수 있다.

 

 

특징
  • Immutable ( 불변 ) 하기 때문에 값의 변경이 있을 때 내부의 값을 변경하는 것이 아닌 새로운 Object를 생성하는 방식을 사용한다.
class Money { 
	private final int value;

	public Money add(Money money) {
		return new Money(this.value + money.value);
	}
}

 

장점
  • 여러 데이터를 개념적으로 묶음지어 두어 해당 데이터의 역할을 명확히 알 수 있다.
    • 자바의 record , 코틀린의 data class 등
  • 해당 밸류 타입을 위한 메서드를 추가하여 캡슐화 할 수 있다.

 

유비쿼터스 언어 ( ubiquitous language )

💡 도메인 전문가, 관계자 개발자가 도메인과 관련된 공통의 언어를 만들고 이를 대화, 문서, 도메인 모델, 코드 테스트등 모든 곳에서 같은 용어를 사용하여 소통 과정에 모호함을 줄인다.

 

느낀 점

🤔  1장에서 내용은 소프트웨어로 해결해야할 도메인 영역을 구분및 이해하고 도메인 전문가와 소통하는 과정에서 요구사항을 정확히 파악해 소프트웨어로서 그 문제를 해결하는 것이 개발자에게 필요한 역량 이라고 말하는 듯 하다.

 

1️⃣ 개인적으로 스스로 가장 부족했던 점은 유비쿼터스 언어 파트인듯 싶다. 나는 같은 도메인에 대해 프론트에서 사용하는 명칭과 백엔드에서 사용하는 명칭을 서로 다르게 가져가 대화 과정이 힘들어진 경험이 있다. 서로 도메인에 대한 명칭을 맞추는 과정이 필요했던 경험이 있다. 추후 작업에는 해당 내용의 유비쿼터스 언어를 맞추는 과정이 필요할 것이다.

댓글