[TIL] DDD 적절한 Entity 위치- domain.model / infra.entity

Soeng_dev·2025년 1월 6일

Domain Model에 Entity를 정의할 때의 기준과 Best Practice

1. Domain Model에 모든 Entity를 정의하지 않는 이유

  • Domain Model은 도메인 로직과 비즈니스 규칙을 중심으로 설계된다.
  • 도메인 로직에 관여하지 않는 데이터(예: 생성 시간, 수정 시간)는 Domain Model에 포함하지 않고 infra.entity에 정의한다.
  • 도메인 로직과 무관한 데이터를 Domain Model에 포함하면 응집도가 낮아지고 관리가 어려워진다.

2. Domain Model과 Infra Entity의 주요 차이

구분Domain ModelInfra Entity
역할비즈니스 로직 표현, 핵심 데이터 관리DB와 매핑된 구조 관리, 영속성 처리
포함 데이터도메인에서 중요한 데이터와 로직만 포함DB의 모든 컬럼과 관계 매핑 포함
관심사비즈니스 중심기술적 세부사항 중심
위치domain.model 패키지infra.entity 패키지

3. Domain Model에 Entity를 정의할 때 기준

  • 도메인 로직에 중요한 데이터만 Domain Model에 정의.
  • 도메인 로직과 무관한 데이터(예: 생성 시간, 수정 시간)는 Infra Entity에 정의.
  • Aggregate Root 중심으로 설계하며, 핵심 비즈니스 로직을 포함.

4. 실무에서의 Best Practice

4.1. Entity를 분리 설계

  • 도메인 로직에 필요한 데이터는 Domain Model에 정의.
  • 영속성 관리, 메타데이터 등 도메인 로직과 무관한 데이터는 Infra Entity에 정의.
// domain.model.Order
public class Order {
    private OrderStatus status;  // 도메인 핵심 로직
    private List<OrderItem> items;

    public void changeStatus(OrderStatus newStatus) {
        // 상태 변경 로직
    }
}

// infra.entity.OrderEntity
@Entity
public class OrderEntity {
    @Id
    private Long id;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    private String status;  // DB 매핑용
}
profile
Software Engineer

0개의 댓글