DDD (Domain Driven Design) 도메인 주도 설계

도메인 모델

도메인 모델은 사용 관점에따라 헷갈릴수 있습니다.
도메인 모델이란 특정 문제와 관련된 모둔주제의 개념 모델로서, DB관점이 아닌 현실 세계에 빗대어 정의할수 있는 객체들간의 모델이라고 의미 할 수 있을것 같습니다.

도메인모델을 구성하기위해서는 핵심 구성요소들을 정의하고 도메인들간의 규칙과 기능들을 찾아야 합니다.
예를들어, ‘사람의 행동’에대한 도메인 모델을 구성해보도록 하겠습니다.

핵심 구성요소 (도메인)

  • 사람
  • 행동

도메인들간의 규칙

  • 모든사람들은 한가지의 행동을 한다.
  • 사람들은 두가지 이상의 행동을 동시에 할 수 있다.
  • 사람들은 행동을 변경 할 수 있다.

기능

  • 사람에게 행동을 주입
  • 사람에게 행동을 변경

도메인 주도 설계

위와같은 조건들을 통해 도메인 모델 패턴으로 구현을 해본다면 다음과 같을 것입니다.

public class Human{
    private int id;
    private String name;
    private List<BehaviorState> behavior;
}
 
 
public class Behavior{
    private Human human;
    private BehaviorState;
 
 
    public doSomething(Human human, List<BehaviorState> behavior){
        Human.setBehavior(human,behavior);
    }
    public changeBehavior(Human human, List<BehaviorState> behavior){
        Human.setBehavior(human,behavior);
    }
}
 
 
public enum BehaviorState{
    WAIT;
    PLAY;
    SLEEP;
    STAY;
}

위의 정의한 도메인들은 DB에 정의되는 데이터와 같을수도 있지만, 반드시 같아야하는 모델이아닌, 조금더 개념적인 상위 모델로써 정의되어야 하며 이를 도메인이라고 칭할 수 있으며 각 도메인들간의 관계를 정의해주는것을 도메인 모델이라고 합니다.

해당 모델 주도로 설계하고 개발을 진행하는것을 DDD(Domain driven design)라고 칭합니다.
해당내용을 통해 정의된 도메인모델은 주로 요구사항 분석 과정부터 구축하여 개발자 뿐만 아니라 개발과정 전체적인 과정에서유즈 케이스 및 유저 스토리를 통해 모든 참여자들에게 도메인들의 동적 구조를 파악하게끔 할수 있는것과 함께 도메인 모델을 통해서 도메인의 정적 구조를 파악할수 있도록 해줍니다.