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

[도메인 주도 개발 시작하기] Chapter 1. 도메인 모델 시작하기

by 오오오니 2025. 3. 17.

1장 도메인 모델 시작하기

2024년 5월 12일 오후 5:29
비어 있음

도메인이란?

도메인 : 소프트웨어로 해결하고자 하는 문제 영역
도메인은 하위 도메인으로 나눌 수 있다.
ex ) 도메인 : 온라인 서점 , 하위 도메인 : 카탈로그, 회원, 정산 , 결제 등등
도메인마다 고정된 하위 도메인이 존재하는 것은 아니며, 상황에 따라 달라진다.

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

코딩에 앞서 요구사항을 올바르게 이해하는 것이 중요하다.
→ 방법 : 개발자와 전문가가 직접 대화하기
그래서 도메인 전문가 만큼은 아니지만 이해관계자와 개발자도 도메인 지식을 갖춰야 한다.

도메인 모델

특정 도메인을 개념적으로 표현한 것
도메인 모델을 사용하면 여러 관계자들이 동일한 모습으로 도메인을 이해하고 도메인 지식을 공유하는 데 도움이 된다.
온라인 쇼핑몰의 주문 모델을 객체 모델로 구성
상태 다이어그램으로 주문의 상태 전이를 모델링 한 것

도메인 모델 패턴

애플리케이션의 아키텍처

표현 영역 : 사용자의 요청 처리, 정보 보여줌
응용 계층 : 사용자가 요청한 기능 실행. 도메인 계층을 조합해서 기능을 실행
도메인 계층 : 시스템이 제공할 도메인 규칙을 구현한다.
ex) 주문 취소는 배송 전에만 할 수 있다.
인프라스트럭처 : 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다.
💡
개념 모델은 구현기술을 고려하고 있지 않기 때문에 실제 코드를 작성할 때 개념 모델을 있는 그대로 사용할 수 없다. 처음부터 완벽하게 도메인을 표현하는 모델을 만들기는 불가능하다. 시간이 지나 도메인이 다른 의미로 해석될 수도 있다. 모델을 변경하는 일도 발생한다. 프로젝트 초기에는 개념모델로 도메인에 대한 전체 윤곽을 이해하는 데 집중하고, 구현과정에서 구현모델로 점진적으로 발전시켜 나가야 한다.

도메인 모델 도출

구현을 시작하기 전에 기획서, 유스케이스, 사용자 스토리를 통해 도메인을 이해하고 도메인 모델 초안을 만드는 과정이 필요하다.
도메인 모델링에 기본이 되는 작업 : 핵심 구성요소, 규칙, 기능을 찾는 것
→ 요구사항으로부터 찾아간다.
‘주문할 때 배송지 정보를 반드시 지정해야 한다.’
→ Order를 생성할때 ShippingInfo도 함께 전달해야 한다.

엔티티와 밸류

도메인을 올바르게 설계하고 구현하기 위해서는 엔티티와 밸류를 구분하는 것이 중요하다.

엔티티

식별자를 가진다.
식별자는 바뀌지 않는다.
식별자가 같으면 같은 엔티티이다.

밸류

개념적으로 완전한 하나를 표현할 때 사용
Money, Address, ShippingInfo
코드의 의미를 더 잘 이해할 수 있게 한다.

식별자 생성

특정규칙에 따라 생상
UUID나 Nano ID와 같은 고유 식별자 생성기 사용
값을 직접 입력
일련번호 사용(DB의 자동 증가 칼럼)

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

set 메서드는 필드값만 변경하고 끝나기 때문에 상태 변경과 관련된 도메인 지식이 코드에서 사라지게 된다.

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

전문가, 관계자, 개발자가 도메인과 관련된 공통의 언어를 만들고 이를 대화, 문서, 도메인 모델, 코드, 테스트 등 모든 곳에서 같은 용어를 사용한다.
언어의 뉘앙스나 미세한 차이를 몰라서 고민되면 사진을 사용해서 도메인에 어울리는 단어를 찾자.
리스트 보기