관리 메뉴

밤 늦게까지 여는 카페

도메인 주도 개발 시작하기 - 1. 도메인 모델 시작하기 본문

리뷰

도메인 주도 개발 시작하기 - 1. 도메인 모델 시작하기

Jㅐ둥이 2022. 11. 15. 03:18

안녕하세요! 오늘은 도메인 주도 개발 시작하기의 첫번째 챕터인 도메인 모델 시작하기를 공부하려고 합니다.

 

도메인 주도 개발 시작하기는 Domain Driven Development(DDD)를 처음 공부할 때 읽기 좋은 것 같습니다.

  • 저부터 DDD를 이렇게 직접적으로 공부해본 적은 처음입니다! ㅋㅋㅋ

한번 내용을 살펴볼까요?


요약

  • 도메인 전문가, 이해관계자, 개발자와의 소통이 중요하다.
  • 코드와 도메인을 최대한 가깝게 유지하자.

 

1.1 도메인이란?

대체 도메인이 뭘까요? 왜 공부해야 하는 걸까요?

 

도메인이란 바로 소프트웨어로 해결하고자 하는 문제 영역입니다.

 

유지보수성 좋은 소프트웨어를 만들기 위해서는 좋은 구조와 모듈화가 필수적으로 요구됩니다.

도메인을 자세히 파악할수록 소프트웨어의 구조를 어떻게 설계할지, 어느 부분의 모듈화가 필요한지 알 수 있게 됩니다.

  • 개념적으로던지 구현적으로던지 경계를 파악할 수 있게 되는 것이죠.

저는 이 책을 읽으면서 DDD의 장단점, 개발 방식 등 DDD에 대한 일반적인 내용들을 알아보려고요!

 

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

도메인을 파악한다는 말은 요구사항을 분석한다는 것과 동치입니다.

그러면 어떻게 해야 요구사항을 잘 분석할 수 있을까요?

 

바로 도메인 전문가와 직접 대화하는 것입니다.

 

좋은 도서 대출 시스템을 만들기 위해서는 도서관 사서분들의 의견을 들어야 하는 것처럼

해결하려는 영역의 전문가와 대화하며 도메인을 이해하는 것이 중요합니다.

 

혹시 "개발자가 무슨 대화야! 코드로 얘기해야지!" 와 같은 위험한 생각을 하고 계신 것은 아니죠?

 

"Garbage in, Garbage out" 이라는 말처럼

요구사항 분석단계가 제대로 이뤄지지 않았다면 좋은 소프트웨어가 나올 수 없다는 것을 명심하세요.

 

1.3 도메인 모델

도메인 모델은 여러 정의가 존재하지만 일반적으로 특정 도메인을 개념적으로 표현한 것을 의미합니다.

 

도메인 모델을 사용하면 얻을 수 있는 장점이 무엇일까요?

바로 이해관계자들과 개발자들이 동일한 내용을 이해하기 쉬워진다는 것입니다.

 

수많은 이해관계자가 얽혀 있을수록 불명확한 용어 하나 때문에 큰 문제가 발생할 수 있는데

이런 문제를 예방하기 쉬워지는 것이죠!

 

한가지 더! 도메인에는 하위 도메인이 존재하는데 각각의 하위 도메인에 존재하는 모델들을 분리해야 합니다!

예시)

구매 도메인의 사용자 모델, 판매 도메인의 사용자 모델 (o)

구매 도메인의 구매자 모델, 판매 도메인의 판매자 모델 (x)

 

1.4 도메인 모델 패턴

여기서 소개해주는 도메인 모델 패턴 아키텍처를 보고 놀랐습니다.

제가 생각하는 일반적인 소프트웨어 아키텍처와 크게 다른 점이 없었기 때문입니다.

 

DDD는 완전히 다른 소프트웨어를 만드는 것이 아니라

어떻게 하면 소프트웨어를 더 잘 나눌 수 있는지

그리고 나눠진 것들을 어떻게 하면 잘 개발할 수 있는지 연구한 방법론이라고 이해했습니다.

 

1.5 도메인 모델 도출

도메인 전문가와 대화를 했으면 무슨 일이 남았을까요?

바로 도메인 모델을 만드는 것이죠 ㅎㅎ

 

아쉽게도 책에서는 도메인 모델을 "잘" 만들 수 있는 방법에 대해서는 다루지 않고 있습니다...

그래서 패스~!

 

1.6 Entity와 Value Object

DDD를 공부하셨다면 Entity와 Value Object에 대해서 많이 들어보셨을 거에요!

 

책에서는 Entity의 가장 큰 특징이 식별자가 있다는 것이고,

Value Object는 개념적으로 완전한 하나를 뜻한다고 설명하고 있습니다만...

 

도무지 이해가 되지 않아서 다른 설명들을 참고하면서 제 방식대로 이해해봤습니다.

 

Entity는 우리가 설계한 도메인 모델을 실제 데이터입니다.

  • Class와 Instance 같은 관계라고 생각하면 이해하기 편할 것 같습니다.

 

그렇다면 Value Object는 뭘까요?

 

프로그래밍 언어는 1차적으로 int, char, float, byte와 같은 Primitive Type들만 지원해줍니다.

이런 타입으로는 도메인 모델의 속성을 설명하기 적절하지 않습니다.

이럴 때 Value Object를 사용하면 도메인에 알맞게 속성을 표현할 수 있습니다.

 

책에서는 Value Object의 불변성에 대해서도 설명하고 있는데

DDD와 직접적으로 연관된 내용은 아니라고 판단되어 패스~

 

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

1.3 도메인 모델에서 도메인 모델 사용의 장점을 언급했었죠?

여기서는 그 중요성이 더욱더 강조됩니다.

 

도메인에 알맞는 용어를 찾아서 프로젝트 전반적으로 사용해야 한다고 강조합니다.

  • 대화, 문서, 코드 모든 곳에서 적합하고 통일된 도메인 용어를 사용해야 한다!
반응형