[DDD(Domain Driven Design)]
: 도메인 주도 설계라고 부르며, 도메인 위주의 설계 기법을 의미
- Spring Data JDBC와 DDD는 밀접한 관련이 있기 때문에 DDD 자체의 개념을 완전히 이해하는 것은 어렵지만 Spring Data JDBC에서 사용하는 DDD 기본 개념은 이해해야 함
[Domain]
: 용어 자체는 한 마디로 우리가 실제로 현실 세계에서 접하는 업무의 한 영역을 의미
[리포지토리(Repository)]
: 데이터 엑세스 게층에서 DB와 상호작용 하는 역할을 하는 인터페이스
[애그리거트(Aggregate)]
: 비슷한 범주의 연관된 업무들을 하나로 그룹화 해놓은 그룹
: 애그리거트 내에는 해당 애그리거트를 대표하는 도메인이 존재하며, 하나 이상의 도메인이 있음
[애그리거트 루트(Aggregate Root)]
: 하나의 애그리거트를 대표하는 도메인
: 특정 집단이나 그룹의 대표
: 각 애그리거트 내의 도메인들 중에서 다른 모든 도메인과 직간접적으로 연관이 되어 있는 도메인이 애그리거트 루트
: DB 테이블 간 관계로 봤을 때, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인은 자식 테이블이 됨. 즉, 애그리거트 루트의 기본 정보를 다른 도메인들이 외래키 형태로 가지고 있음
* DB 테이블 간의 관계는 외래키를 통해 맺어지지만 클래스끼리 관계는 객체의 참조를 통해 관계가 맺어짐
[애그리거트 객체 매핑 규칙]
1) 모든 Entiry 객체의 상태는 애그리거트 루트를 통해서만 변경이 가능 (DDD에서 중요한 핵심 규칙)
- 도메인 규칙의 일관성을 유지하기 위함
2) 하나의 동일한 애그리거트 내에서의 엔티티간에 객체로 참조함
3) 애그리거트 루트 대 애그리거트 루트 간의 Entity 객체 참조
- 애그리거트 루트 간의 참조는 객체 참조 대신 ID로 참조함
- 1:N 관계일 때에는 AggregateReference 사용 가능 (테이블간 외래키 방식과 동일)
- N:N 관계일 때는 참조할 테이블에 해당되는 클래스의 @Id 필드를 멤버 변수로 가지는 별도의 참조 클래스 사용
'공부 자료 > Spring' 카테고리의 다른 글
[Spring MVC] 트랜잭션 기본 및 적용 (0) | 2022.11.04 |
---|---|
[Spring MVC] JPA / 영속성 컨텍스트 관련 JPA API (0) | 2022.11.01 |
[Spring MVC] About 'Spring Data JDBC' (0) | 2022.10.27 |
[Spring MVC] About JDBC(Java Database Connectivity) (0) | 2022.10.27 |
[Spring MVC] 체크 예외(Checked Exception), 언체크 예외(Unchecked Exception) (0) | 2022.10.26 |