인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

정윤성님의 프로필 이미지
정윤성

작성한 질문수

실전! 스프링 데이터 JPA

@Query, 리포지토리 메소드에 쿼리 정의하기

Query관련으로 질문이 있습니다 !!

작성

·

171

0

위와같이 Product, Restaurant 두개의 엔티티를 만들었는데

Product엔티티자체가 Restaurant엔티티에 포함된다고 생각해서 Product엔티티의 삭제 및 생성의 관해선 Restaurant이 관할해야한다고 생각해 cascade와 Repository도 Restaurant만 만들었는데요 이러한 방식이 괜찮을까요 ?

정리하면

1.Restaurant를 애그리거트 루트로 보고 Product에 접근하기위해선 항상 Restaurant을 거쳐야된다고 생각해 위와같은 구조로 만들었습니다 괜찮을까요 ?

2.

(실제 테스트는 해보지않은 부분이라 틀릴 수 있습니다 ㅠㅠ 의미만 봐주세요 )

1번에서 이어지는 부분인데 RestaurantRepository에서 Product의 Id를통해 Restaurant엔티티를 가져오는 부분입니다 이러한 코드는 어떻게 생각하시나요 ?

- Restaurant엔티티를 통해 Product에 접근해야된다고 생각해서 ProductRepository를 만들지 않았습니다

- 그렇기때문에 1:N 중 1쪽에서 탐색하고있는데 괜찮을까요 ?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 정윤성님

Restaurant, Product 정도의 관계는 사실 둘다 각각의 AggregateRoot로 봐야 합니다.

그런데 학습용이라고 가정하면 나머지 질문하신 내용들은 대부분 맞습니다.

감사합니다.

정윤성님의 프로필 이미지
정윤성
질문자

만약 위처럼 루트엔티티와 노드엔티티의 관계가 있을때 2번 질문처럼 노드엔티티에 접근하려면 루트엔티티를 먼저 가져온 뒤 엔티티그래프를 통해 노드엔티티에 접근하는것이 맞는걸까요 ? 성능적인 부분에서도 조인을 사용하기에 떨어질 수 있는데 아니라면 혹시 어떠한 방식으로 접근해야할지 간략하게만 부탁드리겠습니다 !!

+ 추가적으로 애그리거트를 나누실때 선생님은 어떠한 기준으로 나누는지에 대해 조언좀 부탁드리겠습니다 !!

김영한님의 프로필 이미지
김영한
지식공유자

만약 위처럼 루트엔티티와 노드엔티티의 관계가 있을때 2번 질문처럼 노드엔티티에 접근하려면 루트엔티티를 먼저 가져온 뒤 엔티티그래프를 통해 노드엔티티에 접근하는것이 맞는걸까요 ? 

->애그리거트의 개념적으로는 루트 엔티티를 통해서 조회하는 것이 맞지만 성능 최적화를 위해서는 직접 조회하거나 다른 방법도 함께 고려할 수 있습니다.

애그리거트를 나누는 기준은 딱 정답은 없지만 다음을 읽어보시면 도움이 되실거에요.

https://www.inflearn.com/questions/232252

감사합니다.

정윤성님의 프로필 이미지
정윤성

작성한 질문수

질문하기