본문 바로가기
JAVA/Spring

[JAVA / Spring] - Domain와 Entity의 차이

by nam_ji 2024. 3. 4.

Domain와 Entity의 차이

  • Domain과 Entity의 차이를 알아보기 전에 Layered Architecture에 대해서 알아보겠습니다.

1. Layered Architecture (계층화 아키텍쳐)

  • DTO는 계층간 데이터 교환을 위해 사용되는 객체로, 계층으로 이루어진 아키텍쳐인 Layered Architecture에서 사용됩니다.
  • Layered Architecture도 아키텍쳐 스타일 중 하나로, 비슷한 기능의 모듈과 컴포넌트를 수평한 레이어로 구성하여, 각 레이어는 애플리케이션에서 특정할 역할을 수행합니다. 각 레이어별로 관심사를 분리하는데 목적이 있습니다. 
    관심사 분리를 통해 각 레이어간 독립적 개발을 용이하게 하고, 설계의 유연성을 높일 수 있습니다.

2. 클린 아키텍쳐도 Layered Architecture인가?

  • Layered Architecture는 3-tier 아키텍처로 Presentation Layer, BusinessLogic Layer, Data Access Layer 3개의 레이어로 구성된 아키텍쳐입니다.

  • 클린 아키텍쳐도 Layered Architecture를 구현한 아키텍쳐 중 하나입니다.
  • 그러나 3-tier와는 다르게 DomainLayer(Entity)를 계층의 중심에 두고 있는 형태입니다.


3. Domain

  • 도메인은 일반적인 요구사항, 전문 용어, 그리고 컴퓨터 프로그래밍 분야에서 문제를 풀기 위해 설계된 어떤 소프트웨어 프로그램에 대한 기능성을 정의하는 연구의 한 영역입니다.
    즉, 도메인은 기획의 요구사항을 구현하고, 문제를 풀기 위해 설계된 소프트웨어 프로그램의 기능성을 정의하는 영역이라고 설명합니다.
    * 도메인이란 사용자가 이용하는 앱 기능, 회사의 비즈니스 로직을 정의하는 영역이라고 이해해 볼 수 있습니다. *

4. Entity

  • Entity는 일반적으로 존재하는 것, 즉 실체를 의미합니다.
  • 다양한 컨텍스트에서 Entity의 의미는 다양하게 구체화 되어 사용됩니다.
    즉, 사용되는 상황에 따라 다른 의미를 갖고 있습니다.

5. 차이점

  • Domian은 비즈니스 영역을 추상적으로 나타내는 개념이고, Entity는 Domain 내에서 실제 개별 객체나 개념을 나타냅니다.
    즉, Domain은 서비스를 대표하는 개념이고 Entity는 Domain 내에 식별 가능한 객체를 뜻합니다.

 

6. Entity in DTO

  • 실제 DB의 테이블과 매핑되는 객체, identifier로 구분됩니다. (DB관련 영속성 엔티티)
  • 비즈니스 로직을 포함하는 도메인 엔티티
  • DTO는 Entity의 변경을 최소화 하기 위해 탄생했습니다. 따라서 DTO에서 Entity를 사용할 때, 도메인 엔티티가 될 수도, DB의 영속성 엔티티가 될 수도 있습니다.

7. Entity in 클린 아키텍쳐

  • 전사적 비즈니스 규칙을 캡슐화합니다. 메서드를 가지는 객체가 될 수도 있고, 데이터 구조체, 함수가 될 수도 있습니다.
    가장 높은 수준의 규칙을 캡슐화 하고 외부 변화에 의해 가장 변하지 않는 부분입니다.
  • 비즈니스 로직을 캡슐화한 객체라는 의미로 사용됩니다.