Cascade 질문 드립니다.
556
작성한 질문수 75
영한님 안녕하세요.
영한님 책과 강좌를 통해서 JPA 학습에 몰입 중인데 DDD, Spring Data JPA 개념과 함께 학습을 하려고 하니
생각보다 배워야 할 내용들이 너무 많네요.. 질문 드릴 분이 영한님 밖에 없어서 한번 더 문의를 드립니다.
DDD 책을 보면 Aggregate 의 리파지토리를 만들 때, Aggregate root 에 대해서만 제공하라고 하고 있습니다.
영한님 책의 예제에서 보면 Order, OrderItem, Delivery 같은 Entity 를 하나의 Aggregate 으로 묶을 수가 있고
Order 를 Aggregate Root 를 볼 수 있을 거 같은데요.
이 경우 Order 에 대해서만 Repository 를 제공할 경우, Cascade 를 사용하지 않고서는
Order, OrderItem, Delivery 를 한번에 저장할 수 있는 방법이 없을 거 같은데요..
(OrderItem 이니 Delivery 는 Repository 가 없으므로)
이렇게 Aggregate Root 에 대해서만 Repository 를 제공할 때, 혹시 Cascade 를 활용하지 않고
저장할 수 있는 방법이 있나요?
만약 Cascade 가 유일하다면 이러한 구조로 개발을 하는 것이 가장 보편적이 방법인지도 알고 싶습니다.
답변 1
4
안녕하세요. 아리마님^^ 좋은 질문입니다.
우선 답변부터 드리면
이렇게 Aggregate Root 에 대해서만 Repository 를 제공할 때, 혹시 Cascade 를 활용하지 않고 저장할 수 있는 방법이 있나요?
-> 하나의 Repository 안에서 Aggregate Root 엔티티와 거기에 딸려있는 엔티티들을 한번에 저장하도록 구현하면 됩니다. em.persist()를 여러 엔티티에 걸쳐서 하는 것이지요. Cascade는 그러한 방법중 조금 편리한 방법일 뿐입니다.
자 그럼 답변을 떠나서, 지금 정말 중요한 것이 무엇인지 말씀드리겠습니다.
DDD라는 것은 결국 좋은 설계를 위해 지향해야할 방향인 것이지, 현실과 이상 사이에는 균형이 필요하다 생각해요. 그리고 DDD라는 것이 보편적이냐? 라고 질문하시면 저는 아니라고 답을 드리겠습니다.
저는 사실 처음 실무에 JPA를 사용하신다면 DDD의 Aggregate Root 개념을 가지고 오기 보다는, 그냥 엔티티 하나에 리포지토리를 하나씩 달아서 사용하는 것을 권장합니다. 이렇게하면 Cascade가 없어도 아무런 문제가 없습니다.
이렇게 가볍에 JPA로 프로젝트를 진행해보고, 도메인 주도 설계 등을 공부하다보면, 자연스럽게 Cascade, Aggregate Root 등을 어떻게 적용해야할지 조금씩 보입니다.
참고로 저도 실무에서 JPA로 프로젝트를 진행하고, Aggregate Root 개념을 기본으로 설계를 가져가고, Cascade도 사용하지만, 리포지토리를 항상 AggregateRoot에 맞추어서 하나씩 만들지는 않습니다. 필요하면 Aggregate Root가 아니어도 엔티티에 리포지토리를 만듭니다.
그리고 모든 프로젝트에 DDD 개념을 녹일 필요도 없습니다. 저는 보편적인 구조는 DDD의 개념을 도입한 프로젝트 보다는 그냥 단순하게 엔티티당 하나의 리포지토리를 가져가는 것이 더 보편적인 구조라 생각합니다. (물론 이것은 정답이 있는 것은 아닙니다.)
저희 생각을 쭉 나열했는데, 확실히 단순한 것이 가장 좋습니다^^!
도움이 되셨길 바랍니다. 감사합니다^^
inheritance startegy 선택시 고려사항
0
1
0
Entity 동등성 비교
0
10
1
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
51
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
52
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
89
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
90
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
83
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
90
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
136
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1





