일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- http 완벽가이드
- 백준
- 우분투
- 도메인 주도 개발
- 백준 12761
- 파이썬
- 12761 돌다리
- hadoop
- 자바 디자인 패턴
- golang struct
- 정렬
- 고 배열
- 백준 12761번
- 자바 디자인패턴
- 하둡
- 트리 순회
- flask
- MongoDB Realm
- go
- golang
- 백준 파이썬
- 도메인 주도 개발 시작하기
- 백준 사이트
- 몽고디비 렘
- http 개념
- 자바
- String 함수
- ddd
- 12761번 돌다리
- domain driven develop
- Today
- Total
개발바닥
3장 애그리거트 본문
3.1 애그리거트
3.1장에서는 애그리거트 개념에 대해서 설명하고 있다.
애그리거트는 관련된 객체를 하나의 군으로 묶어서 상위 수준에서 도메인 간의 관계를 파악할 수 있도록 도와준다. 뿐만 아니라 일관성을 관리하는 데 도움을 준다.
복잡한 도메인간의 관계를 상위 수준으로 묶게 되면 큰 틀에서 볼 수 있기 때문에 도메인 간의 관계를 파악할 수가 있고,
애그리거트에 속해 있는 객체들을 관리하는 애그리거트 루트를 통해서 상태나 기능들을 제공하기 때문에 일관성을 유지할 수 있다.
책에서는 애그리거트 집합을 정의할 때 어디에 속해야 되는지에 대해서 너무 신경 쓸 필요 없다고 한다.
처음에는 도메인 모델을 크게 잡고 개발하면서 도메인에 대한 이해와 전문성이 생기면 애그리거트를 크기를 줄이면 된다.
여기서 주의할 점으로는 한 애그리거트에는 2개이상의 엔티티가 존재하게 되면 잘못 구성을 한 것이다.
3.2 애그리거트 루트
애그리거트 루트는 애그리거트에 속해 있는 객체들을 관리한다.
흔히 개발하면서 쉽게 유혹에 빠질 수 있는 부분이 외부에서 애그리거트에 속한 객체를 변경하는 것이다.
외부에서 변경하는 순간 일관성이 깨진다.
당연한 소리다. 여기저기서 변경을 하게 되면 관리가 쉽지도 않고 확장하는데도 힘들다.
그리고 책에서는 밸류에 대해서 불변 타입으로 관리하는 것을 추천하고 있다.
그 이유로는 추적이 쉽고 되돌리기 쉽기 때문이다. 밸류를 변경하기 위해서는 새로운 밸류 객체를 만들어야 되기 때문에 히스토리 추적이 쉽고 롤백하기 쉽기 때문이다.
이번 장을 요약하자면 외부에서 애그리거트에 속한 객체를 변경하면 안되며, 애그리거트 루트라는 주체를 통해서 상태나 기능들을 관리를 통해서 일관성을 유지해야 된다.
3.3 리포지토리와 애그리거트
객체의 영속성을 처리하는 리포지토리는 애그리거트 단위로 존대한다. 트랜잭션을 사용하여 ACID를 관리한다.
3.4 ID를 이용한 애그리거트 참조
다른 애그리거트를 참조하기 위해 다른 애그리거트의 루트를 참조한다는 것이다.
애그리거트를 직접 참조하게 되면 3가지 문제를 야기할 수 있다.
1. 편한 탐색 오용
2. 성능에 대한 어려움
3. 확장 어려움
가장 큰 문제는 편리함을 오용할 수 있다는 것이다.
이 문제를 해결하기 위해 ID 참조를 사용하면 된다.
ID 참조는 모든 객체가 참조로 연결되지 않고 한 애그리거트에 속한 객체들만 참조로 연결된다.
ID 참조를 통해서 결합도를 낮추고 응집도를 높인다.
하지만, ID 참조가 마냥 좋은 점만 있는것은 아니다.
조회시 N+1 조회 문제를 야기한다. N+1 조회 문제를 발생하지 않도록 조인이나 조회 전용쿼리를 사용한다.
'도메인 주도 개발 시작하기' 카테고리의 다른 글
2장 아키텍처 개요 (0) | 2022.10.19 |
---|---|
1장 도메인 모델 시작하기 (0) | 2022.10.16 |