1장) 도메인 주도 설계란?
도메인 주도 설계
"이용자의 세계와 소프트웨어 구현을 연결 짓는 것"
유용한 소프트웨어를 만들려면 이용자의 문제가 무엇인지 파악하고, 이를 해결할 수 있는 최선의 수단을 생각해야 한다.
도메인 지식에 초점을 맞춘 설계 기법
도메인은 영역이라는 뜻이며,
도메인이 무엇인지보다는 도메인에 포함되는 것이 무엇인가 하는 것이 더 중요하다.
예를 들어,
회계 시스템에선 금전, 장부 등이 도메인에 속하는 개념이다.
물류 시스템에선 화물, 창고, 고객사, 주문, 운송방법, 재고 등이 도메인에 속하는 개념이다.
"지식에 초점을 맞춘다" ??
: 도메인에 속하는 개념과 사건을 이해하고, 그 중에서 문제 해결에 유용한 것을 뽑아낸 지식을 소프트웨어에 반영하는 과정
이용자들의 문제를 정확히 이해하지 않고 최신 기술을 중시하는 개발자는 기술적 접근법으로만 문제를 해결하려 들기 쉽다. 그 결과, 목적 없는 소프트웨어가 만들어질 수 있다.
따라서, 도메인 지식에 초점을 맞춰 소프트웨어를 개발해야 한다.
도메인 모델링이란 무엇인가?
- 모델: 현실에 일어나는 사건 혹은 개념을 추상화한 개념
- 추상화: 현실의 모든 것을 반영하는 것이 아닌 여러 개념에서 공통적인 것을 뽑아 파악하는 것
- 상황에 따라 취사선택이 필요
- ex) 소설가의 관점에서 본 펜은 도구이며 글자를 쓸 수 있다는 것이 중요한 성질이며, 반면 문구점 관점에서의 펜은 상품이다.
- 모델링의 결과
- 모델링: 사건 혹은 개념을 추상화하는 작업
- 도메인 모델: 도메인 개념을 모델링한 모델
지식을 코드로 나타내는 도메인 객체
도메인 객체: 도메인 모델을 소프트웨어 형태의 동작하는 모듈로 나타낸 것
소프트웨어 이용자가 처한 세계는 항상 같은 상태로만 존재하지 않는다.
시간에 따라 변화하는 데, 이럴 때 도메인 객체가 도메인 모델을 충실히 반영하고 있다면 도메인의 변화를 코드로 쉽게 옮길 수 있다.
도메인 개념과 도메인 객체는 도메인 모델을 통해 연결되며, 서로 영향을 주고받는 반복적 개발로 실현된다.
도메인 개념이 투영된 도메인 모델은 이 변화를 충실히 반영할 수 있다.
도메인 객체는 도메인 모델이 구현된 표현이므로 변화한 도메인 모델과 아직 변화하지 않은 도메인 객체를 비교하면 어디를 고쳐야 할지 알 수 있다.
도메인 주도 설계가 필요한 이유
종전에는 서비스를 하루라도 빨리 출시하는 것이 가장 중요시됐다. 현재는 그렇지 않다.
소프트웨어는 항상 진화하는 존재다. 소프트웨어가 변화에 제대로 대응하려면 개발자가 지속해서 소프트웨어를 수정해야 한다.
지금 당장 동작하는 프로그램을 만드는 것은 어렵지 않다. 그러나 앞으로도 계속 동작할 프로그램을 만들기는 어렵다.
시스템을 장기적으로 운영하기를 원한다면, 도메인 주도 설계를 익혀야 한다.