Aggregate

topics 300-백엔드개발
types 레퍼런스

 ---
created: 2025-12-24 04:30
updated: 2025-12-25 02:00
author: Jeon MinJi
topics:
- "300-백엔드개발"
types:
- "이론"
tags:
- ddd
- aggregate
- 도메인주도설계

Aggregate란 무엇인가

도메인 주도 설계(DDD)에서 관련된 객체들을 하나의 단위로 묶어 관리하는 개념

왜 필요할까

비즈니스 로직을 처리할 때 여러 테이블이 연관되는데, 이들을 어떻게 묶어서 관리할지가 중요하다. Aggregate는 트랜잭션의 경계를 명확히 하고 데이터 일관성을 보장하기 위한 개념이다.

Aggregate 설계 패턴 비교

Aggregate-1749754173915.png

1. 유즈케이스 단위에 관여된 모든 테이블을 Aggregate로 묶는 경우

문제점:
포인트 적립 시스템의 로직에 오류가 있을 경우 주문 자체가 이루어지지 못함

고객 입장에서 생각해보라. 배가 고픈데, 포인트 적립에 문제가 생겨 주문이 롤백된다. 얼마나 슬픈 일인가!

교훈: 핵심 비즈니스 로직과 부가 기능을 하나의 트랜잭션으로 묶으면 안된다.

2. 모든 테이블을 하나의 Aggregate로 정의한 경우

문제점:

  • 전체 주문금액과 주문 내역이 일치하지 않음
  • 주문 내역 일부가 누락 혹은 중복 입력 가능
  • (1 Submit = 1 Aggregate Operation)

빵과 우유를 먹고 싶었는데, 우유가 누락됐다면 목이 메인다. 얼마나 슬픈 일인가!

교훈: Aggregate 범위가 너무 넓으면 데이터 정합성을 보장하기 어렵다.

3. 불변식(Invariant) 범위만을 Aggregate로 잡은 경우 (권장)

핵심 원칙:

  • 불변식: "주문 총량과 주문 내역 합산은 같아야 한다"
  • ACID 트랜잭션이 필요한 최소한의 Entity(테이블) 묶음만 포함
  • Point는 천천히 처리되어도 괜찮다 (Eventual Consistency)

왜 이렇게 했냐면:

  • 주문과 주문 내역은 반드시 동시에 일관성을 유지해야 함
  • 포인트는 나중에 적립되어도 비즈니스에 큰 영향이 없음
  • 트랜잭션 범위를 최소화해서 성능과 안정성을 모두 확보

결론

Aggregate 설계 시 핵심은 "불변식을 보장해야 하는 최소 범위"를 찾는 것이다. 너무 크면 성능 문제가 생기고, 너무 작으면 데이터 정합성이 깨진다.

관련 문서: 핵사고날아키택처, 이벤트 기반 아키텍처(EDA)의 정합성