[F-Lab 모각코 챌린지] 52일차 - 도메인 주도 설계란?

F-Lab 모각코 챌린지 - 52일차. 도메인 주도 설계에 대해 공부하였습니다.

[F-Lab 모각코 챌린지] 52일차 - 도메인 주도 설계란?

도메인 주도 설계란?

개발자가 이용자에게 유용한 소프트웨어를 개발하려면 가치있는 지식과 그렇지 않은 지식을 신중하게 구분해서 가치있는 지식만 코드에 녹여 넣어야 한다

여러 도메인 지식 중, 중요한 지식과 그렇지 않은 지식을 구분하기 위해서는 이용자의 세계를 이해하는 것이 필요하다

이용자의 문제가 무엇인지 파악하고, 이를 해결할 수 있는 최선의 수단을 생각해야 한다

도메인 주도 설계는 이러한 고찰을 반복하는 설계를 통해 이용자의 세계와 소프트웨어 구현을 연결짓는 것이 그 목적이다

도메인 지식에 초점을 맞춘 설계 기법

도메인 지식에 초점을 맞춘 설계 기법

도메인이란 무엇인가?

도메인은 영역 이라는 뜻이다. 소프트웨어 에서 말하는 도메인은 프로그램이 쓰이는 분야 라는 의미로 쓰인다

도메인에 포함되는 개념은 시스템의 대상 분야가 무엇인지에 따라 크게 달라진다

지식에 초점을 맞춘 설계 기법?

최신 프레임워크나 개발 기법, 최신 기술 등의 키워드는 개발자를 흥분시키는 단어다

기술적 접근이 아닌, 소프트웨어가 사용될 분야의 지식에 초점을 맞춰 개발해야 한다

도메인 모델링이란?

현실에 일어나는 사건 혹은 개념을 추상화한 개념

예를 들어, 소설가가 바라보는 펜은 글씨를 작성하는 것이 주된 기능이다

하지만 문구점에서의 펜은 글자를 쓸 수 있다는 기능 보다는 상품으로서의 가치가 더 중시된다

이처럼 특정한 시각에서 일어나는 사건 혹은 개념을 추상화 하는 작업을 모델링이라고 한다

그리고 모델링의 결과를 모델이라고 한다

도메인 주도 설계에서는 도메인 개념을 모델링한 모델을 도메인 모델이라고 한다

지식을 코드로 나타내는 도메인 객체

도메인 모델은 어디까지나 개념을 추상화한 것이다 도메인모델을 소프트웨어 형태의 동작하는 모듈로 나타낸 것이 도메인 객체다

유용한 모델과 그렇지 않은 모델을 구분해야 한다

쓸데 없는 도메인 객체를 구현하지 마라

개발자는 정말로 유용한 모델과 그렇지 않은 모델을 구분해야 한다. 오랜 시간을 들여 만든 도메인 모델이 있어도 해당 모델이 이용자의 문제를 해결하는 것과 관계가 없다면 이를 도메인 객체로 구현하는 것은 쓸데없는 작업일 뿐이다

도메인 객체는 도메인 을 충실히 반영해야 한다.

그렇게 한다면 도메인의 변화에 따른 사이드이펙트를 최소한으로 관리할 수 있다

소프트웨어 이용자가 처한 세계는 항상 같은 상태로만 존재하지 않는다. 사람이 하는 일은 바뀌기 쉽고, 시간에 따라 변화하기 쉽다. 그 대부분은 경미한 변화가 쌓인 것이지만, 때로는 상식조차 뒤바뀌는 경우도 있다.

이럴 때 도메인 객체가 도메인 모델을 충실히 반영하고 있다면 도메인의 변화를 코드로 쉽게 옮길 수 있다

어중간한 이해는 도리어 구현을 방해한다

이를 해결하려면 도메인 모델을 직시하고, 더 나아가 도메인의 개념을 추상화 하는 방법을 바꿔야 한다. 도메인에 대한 날카로운 통찰은 구현 과정에서도 얻을 수 있다

도메인 개념과 도메인 객체는 도메인 모델을 통해 연결되며 서로 영향을 주고받는 반복적 개발로 실현된다

이 책에서 설명하는 패턴

  • 지식 표현을 위한 패턴
  • 값 객체
  • 엔티티
  • 도메인 서비스
  • 애플리케이션을 구성하는 패턴
  • 리포지토리
  • 애플리케이션 서비스
  • 팩토리
  • 지식 표현을 위한 고급 패턴
  • 애그리게이트
  • 명세