티스토리 뷰
DDD Start 3,4장 학습
1~2장을 통하여 DDD와 관련된 주요 개념과 키워드들을 살펴보았고, 3장부터는 도메인의 영역을 큰 그림을 통하여 세부 그림을 이해하는 법부터 시작하여 애그리거트를 구성하는 방법과 주의해야 할 부분이 대하여 조금 더 깊게 볼 수 있어서 좋았다. 4장에서는 실제 JPA를 이용하여 엔티티 매핑과 벨류 매핑을 직접 실습 해볼 수 있었는데, 자바로 되어 있는 매핑 코드를 코틀린 베이스로 옮겨서 작성해야 하니 생각보다 걸리는 지점이 있어서 조금 시간을 소모 할수 밖에 없었다. JPA를 공부하고 바로 이 책을 봤었더라면 좀 더 업무 코드에서도 의미 있는 엔티티 구성과 로직을 만들어 낼 수 있었겠다는 아쉬움도 들긴 하지만, 지금이라도 모자란 부분이 무엇인지 확인해볼 수 있는 좋은 기회인거 같아 나름 수확이 있다고 할 수 있다.
- 3장
- 트랜잭션 범위 지정: 애그리거트 단위로 지정
- 레파지토리/애그리거트
- 레파지토리는
애그리거트
단위로 작성 - 레파지토리의 인터페이스는 도메인 레이어에 그리고 이를 구현하는 클래스는 인프라스트럭처 레이어로 배치
- 레파지토리는
- 애그리거트 간 연관 관계 참조 전략
- 필드 매핑의 경우, 경계가 애매해질 수 있음
- ID값을 매핑하는 전략을 사용할 경우 조금 더 명료해짐
- 애매한 경계에서의 요구사항일 경우, 별도의 조회 도메인을 작성하는 것도 좋다.
- 4장
- 루트 엔티티(애그리거트 루트) 매핑
- 레파지토리의 주요 역할
- 다양한 매핑 방법
- ID값 매핑(@EmbeddedId)
- 컬렉션 데이터 매핑(컬럼, 테이블)
- @Convert, AttributeConvert를 활용한 데이터 컨버터 생성 및 적용
- 벨류 객체에 대한 매핑 전략
- 같은 라이프사이클 내에 존재하는 연관 객체라면 벨류 객체 매핑을 통하여 충분히 해결이 가능하다.
@Embeddable
,@Embedded
을 사용한 불변 객체 활용 및@AttributeOverrides
,@AttributeOverride
를 활용한 컬럼 데이터 재지정 및 매핑- 도메인 상황에 따른 엔티티 객체로 매핑
- 연관 객체라고 하여 모든 것을 엔티티로 매핑 할 이유는 없다. 객체의 라이프사이클이 엔티티로 지정 해야 할 라이프사이클인지 그리고 확실하게 애그리거트내에 존재해야 하는지 도메인 상황에 맞는 정확한 판단을 해야 한다.
@ElementCollection
,@CollectionTable
을 별도 테이블 벨류 매핑
- 로딩 전략(Eager/Lazy)
- N+1
- Eager와 Lazy를 사용해야 할 시점에 대한 고민
- Lazy 사용 시, 트랜잭션 범위 내에서 사용
- 영속성 전파/식별자 생성 전략
- Cascade, orphanRemoval
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Package Control
- implicit prototype chain
- Squelize.js
- jade
- Express.js
- HTTP
- pm2
- RestTemplate
- HttpClient
- package.js
- Kotlin
- EJS
- Handlebars
- tomcat
- SideBarEnhancements
- 스프링
- node.js
- http method
- Spring MVC
- maven
- Spring
- cluster
- Sublime Text 3
- Prototype
- Sublime Text 2
- Til
- ecma
- springboot
- WebFlux
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함