개발바닥

1장 도메인 모델 시작하기 본문

도메인 주도 개발 시작하기

1장 도메인 모델 시작하기

라이언 2022. 10. 16. 21:33
반응형

매주 회사에서 "도메인 주도 개발 시작하기" 라는 책으로 스터디를 진행하고 있다.

스터디에서 진행했던 내용들을 기록하고자 한다.

 

1장에서는 도메인 주도 개발 시작하기 위해서 사용하는 개념들에 대해서 정의를 내리고 있다.

 

1.1 도메인이란?

도메인이라는 용어는 다양한 곳에서 사용하고 있다. 이 책에서는 도메인에 대한 정의를 "소프트웨어로 해결하고자 하는 문제 영역"이라고 정의를 내렸다. 또한, 도메인에는 하위 도메인을 가질 수 있다.

책에서는 온라인 서점 도메인으로 주문, 카탈로그, 회원, 결제, 배송 등을 도메인으로 정의하고 있다.

즉, 어떤 문제 영역을 해결할려고 하느냐에 따라서 도메인이 달라진다. (정답은 없다.)

 

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

프로젝트를 진행하다보면 가장 중요한 부분은 요구사항을 파악하는 것이다. 요구사항을 제대로 파악하지 못하고 있다면, 개발이 완성됐을 때 엉뚱한 기능이 완성될 수 있기 때문에 기획자(도메인 전문가)와 개발자는 회의를 통해서 요구사항을 제대로 분석해야 된다.

 

1.3 도메인 모델

1.3에는 도메인 모델에 대해서 설명하고 있다.

도메인 모델을 정의하기로 "특정 도메인을 개념적으로 표현한 것"이라고 정의를 내리고 있다. 처음에는 정의가 안 와닿았다...

책에서는 특정 도메인 모델에 대해서 객체 모델 구성을 통해서 도메인을 이해하도록 도와주고 있다.

객체 모델로 구성하게 되면 "도메인이 제공하는 기능"과 "도메인의 주요 데이터 구성"으로 구성되어 있다.

객체 모델만 잘 정의 내려도 충분히 코드를 작성할 수 있게 된다.

 

1.4 도메인 모델 패턴

일반적인 애플리케이션의 아키텍처는 네 개의 영역으로 구성되어 있다.

표현, 응용, 도메인, 인프라스트럭쳐 이번장은 도메인 계층에 대해서만 확인하고 넘어간다.

도메인 계층에서는 시스템이 제공할 "도메인 규칙"을 구현한다. 여기서 도메인 규칙은 핵심 규칙으로 도메인에서 기능을 제공하는데 있어서 반드시 필요한 규칙들이다.

책에서는 주문 도메인에 대한 예시로 "출고 전에 배송지를 변경할 수 있다." 처럼 배송지 변경은 출고 전에만 가능하도록 핵심 규칙을 가지고 있기 때문에 기능 제공시 체크를 해야 된다. 

핵심 규칙은 도메인 계층에서만 구현을 하게 되면 핵심 규칙이 변경되더라도 다른 코드에 영향을 덜 주고 변경 내역을 반영할 수 있다.

왜? 다른 코드에 영향을 덜주게 될지는 2장에 자세히 나온다.

 

NOTE 부분에 개념 모델과 구현 모델에 대해서 설명하고 있다.

개념 모델은 순수하게 문제를 분석한 결과물이다. 즉, 간단하게 핵심적인 내용만 정의를 내린 상태인다. 디테일은 숨기는 거다.

프로젝트를 진행할 때 중요한 부분인거 같다. 처음부터 완벽하게 잡고 가면 좋겠지만, 그렇게 되면 회의에만 상당한 시간이 걸리거다.(진척도가 상당히 뎌디게 될 것이다.)

아직 도메인에 대한 이해도 잘 안된 상태에서 완벽하게 잡는 것보다는 핵심적인 내용들만 간단하게 정리하고 코드를 작성하는게 좋다.

개발을 계속 진행하다보면 도메인에 대한 전문적이 지식이 쌓이게 되고 모델을 보완하거나 변경하는 일이 발생한다.

그때 개념 모델을 구현 모델로 점진적으로 발전시켜 나가면 된다.

 

 

1.5 도메인 모델 도출

도메인 모델 도출하기 위해서 기획서, 유스케이스, 사용자 스토리와 같은 작업을 통해서 도메인을 이해하고 도메인 모델 초안을 만들게 되면 비로소 코드를 작성할 수 있게 된다.

도메인 모델링할 때 기본이 되는 작업은 모델을 구성하는 핵심 구성요소, 규칙, 기능을 찾는 것이다.

필자도 프로젝트 진행 시 기획자가 없었기 때문에 유스케이스 와 사용자 스토리를 통해서 도메인 모델을 도출하고 비로서 코드를 작성했던 경험이 있다. 무작정 코드를 작성하지 말고 반드시 도메인 모델 도출 후 작성하기를 추천한다.

그리고 도메인 모델에 대해서 정리한 내용들은 문서화하는 작업이 반드시 필요하다. 이것은 지식 공유 및 히스토리 추적을 위해서 상당히 중요하기 때문이다.

 

1.6 엔티티와 밸류

엔티티는 식별자를 가지고 있다.

식별자라는 것은 유니크한 값이고 책에서는 식별자 생성을 위해서 여러가지 방법을 제안하고 있다.

밸류는 비슷한 개념을 가진 필드들을 하나로 묶어서 표현하는 것을 말한다.

 

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

도메인에서 사용하는 용어를 코드에 반영하지 않으면 그 코드는 개발자에게 코드의 의미를 해석해야 하는 부담을 준다.

코드에서 enum을 사용하여 도메인에서 사용하는 용어를 최대한 코드에 반영하는 것을 권장한다.

 

 

반응형

'도메인 주도 개발 시작하기' 카테고리의 다른 글

3장 애그리거트  (0) 2022.10.22
2장 아키텍처 개요  (0) 2022.10.19
Comments