05AM

DDD에서 Model, Domain, Entity의 의미와 차이점 본문

1 week 1 conquer

DDD에서 Model, Domain, Entity의 의미와 차이점

_05AM 2024. 3. 3. 22:55

DDD(도메인 주도 설계)와 스프링 프레임워크를 사용하는 프로젝트 구조에서 "model", "domain", "entity"는 각각 다른 의미를 가지고 있으며, 특정한 종류의 클래스들을 포함합니다. 이 용어들은 종종 서로 교차하여 사용되기도 하지만, 각각의 역할과 책임이 있습니다.

Domain

  • 정의: 도메인은 소프트웨어로 해결하고자 하는 문제 영역입니다. DDD에서는 이 문제 영역을 중심으로 모델링을 진행합니다. 도메인 내에서 비즈니스 로직과 애플리케이션의 핵심 기능이 정의되고 구현됩니다.
  • 패키지 구성: domain 패키지는 다음과 같은 클래스들을 포함할 수 있습니다.
    • Entity: 도메인 내의 핵심 개념을 나타내는 객체로, 식별자(ID)에 의해 구별됩니다. 엔티티는 비즈니스 로직을 포함하며, 도메인의 상태를 관리합니다.
    • Value Object (VO): 엔티티와 달리 식별자를 가지지 않는 불변 객체입니다. VO는 도메인의 특성이나 속성을 나타내며, 로직을 포함할 수 있습니다.
    • Domain Service: 도메인 로직 중 엔티티나 VO에 속하지 않는 로직을 처리합니다. 여러 엔티티 간의 관계나 도메인 특정 작업을 수행합니다.
    • Repository: 엔티티의 지속성을 관리하는 인터페이스를 정의합니다. 구현체는 인프라스트럭처 계층에 위치합니다.
    • Aggregate: 관련 엔티티와 VO를 하나의 단위로 묶는 개념입니다. Aggregate root는 집합의 대표 엔티티로, 외부에서는 aggregate root를 통해 집합과 상호작용합니다.

Model

  • 정의: "모델"은 데이터 구조와 비즈니스 로직을 나타내는 광범위한 개념입니다. MVC(Model-View-Controller) 패턴에서 모델은 애플리케이션의 데이터와 그 데이터를 처리하는 비즈니스 로직을 포함합니다.
  • 패키지 구성: 일반적으로 model 패키지는 애플리케이션에서 사용하는 데이터 모델과, 때로는 비즈니스 로직을 포함할 수 있습니다. 이는 엔티티, VO와 같은 도메인 모델을 포함할 수도 있고, DTO(Data Transfer Object) 같은 데이터 전송 객체를 포함할 수도 있습니다.

Entity

  • 정의: 엔티티는 도메인 모델의 핵심 구성 요소로, 도메인 내에서 유일한 식별자(ID)를 가지며, 시간에 따라 상태가 변할 수 있는 객체입니다.
  • 패키지 구성: entity 패키지는 도메인의 핵심 개념을 나타내는 클래스들을 포함합니다. 이들은 주로 데이터베이스 테이블에 매핑되어 지속성을 가지며, 비즈니스 로직을 포함할 수 있습니다.

정리

  • Domain: 비즈니스 로직과 도메인의 핵심 개념을 포함하는 넓은 범위입니다.
  • Model: 데이터와 데이터를 처리하는 로직을 포함하는 넓은 개념으로, 도메인 모델 뿐만 아니라 다양한 모델(DTO 등)을 포함할 수 있습니다.
  • Entity: 도메인의 핵심 구성 요소로, 유일한 식별자를 가지고 시간에 따라 상태가 변할 수 있는 객체입니다.

DDD와 스프링 프로젝트에서 이 용어들은 서로 밀접하게 연관되어 있으며, 특히 domain과 model은 상황에 따라 서로 교차하여 사용될 수 있습니다. 중요한 것은 프로젝트의 일관성을 유지하고, 팀 내에서 이 용어들의 정의에 대해 명확한 합의를 이루는 것입니다.

 

[출처] ChatGPT 답변

 

결론

이해한바로는 Model > Domain > Entity 순으로 포함 관계를 갖고 있는 것 같다.

 

데이터와 데이터를 처리하는 처리하는 `Model`

비즈니스 로직과 도메인의 핵심 개념을 포함하는 `Domain`

도메인의 구성 요소인 `Entity`

Comments