kongkong.note
[도메인 주도 개발 시작하기] 4. 리포지터리와 모델 구현 본문
4.1 JPA를 이용한 리포지터리 구현
리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라 스트럭처 영역에 속한다.
리포지터리 구현 클래스를 인프라 스트럭처 영역에 위치시켜서 인프라 스트럭처에 대한 의존을 낮춰야 한다.
리포지터리 인터페이스는 애그리거트 루트를 기준으로 작성
4.3 매핑 구현
밸류는 불변타입이므로 set 메서드를 제공하지 않아 기본 생성자가 불필요하지만, JPA에서는 protected 기본 생성자를 추가해줘야 한다.(JPA 기술 제약 - JPA는 public 또는 protected 기본 생성자 지원)
AttributeConverter : 밸류 타입과 DB 컬럼 데이터 간의 변환을 처리
식별자 의미를 강조하기 위해서 밸류 타입으로 지정하기도 하며, 이 장점은 식별자에 기능을 추가할 수 있다는 점
애그리거트에서 루트 엔티티를 뺀 나머지 구성요소는 대부분 밸류
4.4 애그리거트 로딩 전략
개념적 : 조회 시점에 애그리거트는 완전한 상태여야 하므로, 애그리거트 루트에서 연관 매핑 조회 방식은 즉시로딩(FetchType.EAGER)
애그리거트가 완전해야 하는 이유
1. 상태를 변경하는 기능을 실행할 때 애그리거트 상태가 완전해야 함
: 즉시로딩보다, JAP는 트랜잭션 범위 내 지연로딩을 허용하기 때문에 상태를 실제 변경하는 시점에 필요한 구성요소만 로딩하면 된다.
2. 애그리거트의 상태 정보를 보여줄 때 필요
: 즉시로딩보다, 별도의 조회 전용 기능과 모델을 구현하는 방식이 더 좋다.
즉, 애그리거트 내의 모든 연관을 즉시로딩으로 설정할 필요는 없다.
'DDD' 카테고리의 다른 글
| [도메인 주도 개발 시작하기] 6. 응용 서비스와 표현 영역 (0) | 2025.12.25 |
|---|---|
| [도메인 주도 개발 시작하기] 5. 스프링 데이터 JPA를 이용한 조회 기능 (0) | 2025.12.25 |
| [도메인 주도 개발 시작하기] 3. 애그리거트 (0) | 2025.12.21 |
| [도메인 주도 개발 시작하기] 2. 아키텍처 개요 (0) | 2025.12.15 |
| [도메인 주도 개발 시작하기] 1. 도메인 모델 시작하기 (0) | 2025.11.16 |