문득 DDD에 대해 제대로 알고있는 게 맞는가? 라는 의구심이 들어 공부를 하던 중 aggregate 개념도 함께 정리하고 싶어 정리를 해봤습니다.
Aggregate(에그리거트)란?
- 소프트웨어 개발에서 관련된 객체들의 집합을 의미
- 보통 하나의 대상에 대해 여러 객체를 생성하여 각 객체들이 서로 상호작용하도록 구성할 때, 이를 하나의 애그리거트로 묶어서 처리하는 것이 일반적이다.
- 보통 특정 비즈니스 로직을 수행하는데 필요한 객체들을 모아서 관리하게 된다.
Aggregate 구현 방법
구현하는 방법은 특정되어있지 않고 다양하다.
일반적으로는 ‘객체 지향 프로그래밍에서 제공하는 클래스나 인터페이스를 이용하여 구현한다.’
에그리거트를 구성하는 객체들은 해당 클래스나 인터페이스를 구현하도록 만들어지며, 이를 하나의 애그리거트로 묶어서 사용하게 된다.
Aggregate 구현시 주의해야할 점
- 객체들 간의 상호작용 방식이 구현할 때 중요하게 생각해야할 부분이다.
- 보통 에그리거트를 구성하는 객체들은 서로 높은 결합도를 가지는 것이 일반적이다.
- 즉, 하나의 객체가 변경될 경우에는 연관된 객체들도 함께 변경되어야 한다.
- 이를 위해서 객체들 간의 상호 작용 방식을 정의하는 인터페이스를 제공하고, 이를 각 객체들이 구현하도록 하는 것이 일반적이다.
- 일관성 있는 상태관리가 필요하다.
- 에그리거트는 여러 객체를 관리하는 복잡한 시스템이므로 객체들의 상태를 일관성 있게 관리해야한다.
- 에그리거트의 상태를 변경하는 메서드는 일반적으로 하나의 트랜잭션 안에서 수행되도록 구현하며, 상태 변경중에 문제가 발생하면 롤백하여 이전 상태로 되돌릴 수 있도록 한다.
- 적절한 책임과 역할을 부여해야 한다.
- 각 객체는 자신이 수행할 책임을 가지고 있으며, 이에 따라 다른 객체와 상호작용하게 된다.
- 이를 통해 객체간의 의존성을 최소화하고 유지보수성을 높이는 것이 중요하다.
- 테스트 코드를 작성하자.
- 여러 객체가 복잡하게 상호작용하는 시스템이므로, 사전에 테스트하는 것이 중요하다.
- 에러를 사전에 방지하자.
Aggregate의 장단점
장점
- 여러 객체를 관리하는 복잡한 시스템에서 유용하다.
- 객체간의 의존성을 최소화할 수 있으며 일관성 있는 상태 관리가 가능하게 된다.
- 코드의 가독성과 유지보수성이 향상된다.
- 비즈니스 로직을 구현하는데 필요한 객체들을 모아 처리하기 때문에 코드의 가독성과 유지 보수성이 향상된다.
단점
- 객체 간의 상호작용이 복잡해질 수 있다.
- 너무 크거나 복잡한 경우에는 유지보수에 어려움이 있다.
참고자료
'공부' 카테고리의 다른 글
[JPA] JPA의 N + 1 문제 정리 (0) | 2025.03.27 |
---|---|
[JPA] FetchType 정리 (0) | 2025.03.27 |
JDBC, JPQL, QueryDSL etc (0) | 2025.03.27 |