애그리거트와 애그리거트 루트는 도메인 주도 설계(DDD)의 핵심 개념으로, Spring Data JPA에서도 이를 구현할 수 있습니다.
애그리거트는 비슷한 업무 도메인의 묶음으로, 비슷한 범주의 업무들을 그룹화 해놓은 것으로 볼 수 있습니다.
예를 들어, '주문' 애그리거트는 주문 정보, 배송 주소, 주문 항목 등을 포함할 수 있습니다.
애그리거트 루트는 애그리거트 안에서 대표하는 애그리거트라고 볼 수 있습니다. 이 때 외부에서는 애그리거트 루트를 통해서만 애그리거트 내부에 접근할 수 있습니다. 즉, 애그리거트 루트의 기본키 정보를 다른 도메인들이 외래키 형식으로 가지고 있다고 볼 수 있습니다.
이러한 애그리거트 및 애그리거트 루트를 사용하는 이유는 ORM 기반의 Spring Data JDBC가 DDD와 밀접한 관련이 있기 때문입니다.
Spring Data JPA에서 이를 구현할 때는 주로 다음과 같은 방식을 사용합니다:
- 애그리거트 루트를 @Entity로 매핑하고, 내부 객체들은 @Embeddable로 매핑합니다.
- 애그리거트 간의 참조는 ID를 통해 이루어지도록 합니다.
- 애그리거트 내부의 엔티티나 값 객체는 애그리거트 루트를 통해서만 접근하고 수정하도록 설계합니다.
예를 들어, '주문' 애그리거트에서 '주문' 엔티티가 애그리거트 루트가 되고, '배송 주소'나 '주문 항목'은 @Embeddable로 구현할 수 있습니다.
이렇게 구현하면 데이터의 일관성을 유지하기 쉽고, 비즈니스 로직을 중앙화할 수 있으며, 복잡한 도메인을 더 잘 표현할 수 있습니다. 하지만 설계가 복잡해질 수 있고, 때로는 성능 이슈가 발생할 수 있다는 점을 고려해야 합니다.
'면접준비' 카테고리의 다른 글
JPA의 영속성 컨텍스트에 대해서 설명해주세요. (0) | 2024.08.11 |
---|---|
JPA에서 의미하는 Persist에 대해 설명해주세요. (0) | 2024.08.11 |
ORM이 무엇인지 설명해주세요 (0) | 2024.08.11 |
Spring MVC 에서의 예외 처리 기법에 대해서 설명해주세요. (0) | 2024.08.11 |
Spring JDBC, Spring Data JDBC, Spring Data JPA 의 차이점을 설명해 주세요. (0) | 2024.08.11 |