TIL_20250422_Aggregate pattern

Kim jisu·2025년 4월 22일

TIL

목록 보기
35/43

✅ Aggregate 패턴이란?

Aggregate는 관련 있는 객체들을 하나의 군(Cluster)으로 묶고, 일관성을 보장해야 할 경계를 정의하는 개념입니다.

  • 이 묶음의 루트 엔티티를 Aggregate Root라고 부릅니다.
  • 외부에서는 이 Aggregate Root를 통해서만 내부 엔티티에 접근하거나 변경할 수 있습니다.
  • 즉, 트랜잭션 단위, 불변성(Consistency) 보장 범위로도 자주 쓰입니다.

🔧 예시로 이해하기

class Order { // Aggregate Root
    private Long id;
    private List<OrderItem> items;

    public void addItem(Product product, int quantity) {
        items.add(new OrderItem(product, quantity));
    }
    
    // 외부에서 OrderItem에 직접 접근/수정 금지
}

class OrderItem { // 내부 엔티티 (Aggregate 내부)
    private Product product;
    private int quantity;
}
  • Order는 Aggregate Root.
  • OrderItem은 외부에서 직접 조작하지 않고, 항상 Order를 통해서만 수정.

🧩 왜 중요한가요?

  1. 도메인 모델의 일관성 유지: Aggregate 내부 상태를 통제하기 좋습니다.
  2. 트랜잭션 경계를 명확히 함: 하나의 Aggregate는 하나의 트랜잭션에서만 변경.
  3. 동시성 제어 쉬움: 각 Aggregate는 독립적으로 버전 관리 가능 (Optimistic Lock 등).
  4. 이벤트 기반 시스템과 잘 어울림: 이벤트를 Aggregate 단위로 발행하기 좋음.

🚫 주의할 점

  • Aggregate는 너무 크면 안 됨 → 트랜잭션이 무거워지고 성능 저하.
  • 응집성과 일관성의 균형이 중요.
profile
Dreamer

0개의 댓글