도메인 모델

도메인에 대해 알아보자

Posted on 2019-06-18

도메인 모델


도메인

  • 소프트웨어로 해결하고자 하는 문제 영역이 도메인에 해당한다.
  • 도메인은 여러 하위 도메인으로 구성된다.
  • 하위 도메인을 어떻게 구성할지 여부는 상황에 따라 달라진다.
    • 결제, 배송, 리뷰 등

도메인 모델

  • 특정 도메인을 개념적으로 표현하는 것이다.
  • 도메인을 이해하는 데 도움이 된다면 표현 방식이 무엇인지는 중요하지 않다.
    • 클래스 다이어그램, 상태 다이어그램, 수학 공식 등
  • 도메인 모델은 기본적으로 도메인 자체를 이해하기 위한 개념 모델이다. 개념 모델과 구현 모델은 서로 다른 것이지만 구현 모델이 개념 모델을 최대한 따르도록 할 수는 있다.

하위 도메인과 모델

도메인은 다수의 하위 도메인으로 구성된다. 각 하위 도메인이 다루는 영역은 서로 다르기 때문에 같은 용어라도 하위 도메인마다 의미가 달라질 수 있다. 예를들어, 카탈로그 도메인의 상품이 상품 가격, 상세 내용을 담고 있는 정보를 의미한다면 배송 도메인의 상품은 고객에게 실제 배송되는 물리적인 상품을 의미한다.
모델의 각 구성요소는 특정 도메인을 한정할 때 비로소 의미가 완전해지기 때문에, 각 하위 도메인마다 별도로 모델은 만들어야 한다.


도메인 모델 패턴

  • 일반적인 애플리케이션의 아키텍처는 표현 - 응용 - 도메인 - 인프라스트럭처 네 개의 계층으로 구성된다.
  • 도메인 모델은 아키텍처상의 도메인 계층을 객체 지향 기법으로 구현하는 패턴을 말한다.
  • 핵심 규칙을 구현한 코드는 도메인 모델에만 위치하기 때문에 규칙이 바뀌거나 규칙을 확장해야 할 때 다른 코드에 영향을 덜 주고 변경 내역을 모델에 반영할 수 있게 된다.

아키텍처 구성

계층 설명
표현 사용자 혹은 외부 시스템의 요청을 처리하고 사용자에게 정보를 보여준다.
응용 사용자가 요청한 기능을 실행한다.
업무 로직을 직접 구현하지 않고 도메인 계층과 조합한다.
도메인 시스템이 제공할 도메인의 규칙을 구현한다.
인프라스트럭쳐 데이터베이스나 메시징 시스템과 같은 외부 시스템과 연동을 처리한다.

도메인 모델 도출

  • 구현을 시작하려면 도메인에 대한 초기 모델이 반드시 필요하다.
    • 기획서나 유스케이스 같은 요구사항을 토대로 모델 초안 생성
  • 도메인 모델링시 핵심 구성요소, 규칙, 기능을 찾는 것이다.
  • 도메인을 구현하다 보면 특정 조건이나 상태에 따라 제약이나 규칙이 달리 적용되는 경우가 많다.
    • 출고를 하면 배송지 정보를 변경할 수 없다.
    • 출고 전에 주문을 취소할 수 있다.

문서화

문서화를 하는 주된 이유는 지식을 공유하기 위함이다. 모든 것은 코드를 보면 알 수 있지만 코드는 상세한 모든 내용을 다루므로 전반적인 기능 목록이나 모듈 구조 등은 정리한 문서를 참조하는 것이 빠르게 이해하는 데 도움이 된다.
도메인 관점에서 코드가 도메인을 잘 표현해야 비로소 코드의 가독성이 높아지며 문서로서 코드가 의미를 갖는다.


도메인 용어

  • 도메인에서 사용하는 용어를 최대한 코드에 반영하면 코드를 도메인 용어로 해석하거나 도메인 용어를 코드로 해석하는 과정이 줄어든다. 이는 코드의 가독성을 높여서 코드를 분석하고 이해하는 시간을 절약한다.
    • STEP1, STEP2, STEP3 -> PAYMENT_WAITING, PREPARING, SHIPPED
  • 도메인 용어에 알맞은 단어를 찾는 시간을 아까워하지 말자.


Reference
  • DDD START!