1. Aggregate, Domain, Entity의 관계
어그리게이트, 도메인 객체, JPA 엔티티는 도메인 주도 설계(DDD)와 헥사고날 아키텍처에서 각각 중요한 역할을 하며 서로 다른 책임과 기능을 가지고 있습니다. 각 개념의 관계를 설명하겠습니다.
어그리게이트(Aggregate)
- 정의: 어그리게이트는 비즈니스 로직에서 일관성을 보장하기 위해 여러 엔티티와 값 객체(Value Object)를 하나의 단위로 묶은 개념입니다【313†source】.
- 어그리게이트 루트(Aggregate Root): 어그리게이트의 중심 엔티티로, 외부와의 유일한 상호작용 지점입니다. 모든 상태 변경과 비즈니스 로직은 어그리게이트 루트를 통해 이루어집니다【313†source】【310†source】.
- 역할: 어그리게이트는 비즈니스 트랜잭션의 경계를 설정하고, 데이터 일관성을 유지합니다. 하나의 트랜잭션은 한 번에 하나의 어그리게이트에 대해서만 수행됩니다【309†source】【310†source】.
도메인 객체(Domain Object)
- 정의: 도메인 객체는 시스템의 비즈니스 로직을 구현하는 객체입니다. 도메인 모델의 일부로, 비즈니스 규칙과 로직을 캡슐화하여 시스템의 핵심 개념을 구현합니다【311†source】.
- 역할: 도메인 객체는 비즈니스 로직을 처리하며, 데이터의 저장 방식과는 무관하게 비즈니스 규칙을 표현합니다. 이는 값 객체나 다른 도메인 모델과 결합하여 사용됩니다【311†source】【309†source】.
- 특징: 도메인 객체는 반드시 식별자(ID)를 가질 필요는 없으며, 필요에 따라 여러 엔티티의 데이터를 결합하여 복잡한 비즈니스 로직을 구현할 수 있습니다【310†source】.
JPA 엔티티(JPA Entity)
- 정의: JPA 엔티티는 데이터베이스 테이블과 매핑되어 데이터의 영속성을 관리하는 객체입니다.
@Entity
어노테이션을 사용하여 정의됩니다【313†source】.
- 역할: 엔티티는 데이터의 저장, 조회, 수정, 삭제 등의 작업을 담당하며, 영속성 컨텍스트와 상호작용합니다【310†source】.
- 특징: JPA 엔티티는 고유 식별자(ID)를 가지며, 데이터베이스와의 상호작용을 통해 객체의 상태를 영속화합니다【311†source】.
어그리게이트, 도메인 객체, JPA 엔티티의 관계
- 어그리게이트는 도메인 모델의 일부: 어그리게이트는 여러 도메인 객체와 엔티티를 포함하여 비즈니스 로직을 처리하는 단위로 작동합니다. 어그리게이트 루트를 통해 상태를 관리하고 일관성을 유지합니다【313†source】.
- 도메인 객체와 엔티티의 구분: 도메인 객체는 비즈니스 로직을 캡슐화하고, 엔티티는 데이터의 영속성을 관리합니다. 이는 비즈니스 로직과 데이터 저장 로직을 명확히 분리하여 시스템의 유지보수성과 확장성을 높입니다【311†source】【310†source】.
- JPA 엔티티의 역할: 어그리게이트의 상태는 JPA 엔티티로 변환되어 데이터베이스에 저장됩니다. 어그리게이트 루트의 ID는 JPA 엔티티의 식별자로 사용되며, 이를 통해 저장소에서 어그리게이트를 식별하고 관리할 수 있습니다【309†source】【313†source】.