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

dionisos198님의 프로필 이미지
dionisos198

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파

컬렉션의 필요성에 대해 질문 좀 드리겠습니다

작성

·

432

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예

[질문 내용]
먼저 다 대 다 관계라고 하겠습니다.

A라는 엔티티와 B라는 엔티티가 다대다로 묶여져 있고 그 중간테이블을 C라고 하겠습니다.

이럴 경우에 걍 컬렉션 배치size으로 하는게 아니라 중간 테이블 B로 하면 안되나요?

요약하면 강의에서는 페이징이 필요하지 않으면 join fetch로 페이징이 필요하다면 batch size를 활용하라 라고 되어있는데 역으로 @ManyToOne이 있는 다대 일의 다 쪽에서 jon fetch로 모든 것을 해결하면 안되는 건가요??

 

 

아 그리고 질문이 또 있는데 위에서 B에서 A와 C를 fetch join으로 모두 가져오게 설계해도 괜찮죠??

 

 

답변 2

1

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

안녕하세요. dionisos198님

생각하신 내용이 맞습니다. 중간 테이블을 중심으로 조회가 가능하다면 크게 문제가 없습니다. 하지만 때때로 중간 테이블을 중심으로 조회하기 어려운 경우들도 있습니다.

추가로 질문 주신 부분은 fetch join은 다대일 관계는 무제한으로 가능하고 일대다 관계는 하나 까지만 가능합니다. 대신 이 경우 강의에서 설명하는 것 처럼 페이징 부분을 고려해야 합니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

A와 B가 다대다 관계이고 중간 테이블이 C라고 하셨습니다. 그리고 B에서 A와 C를 가져오는 fetch join으로 모두 가져오는 것이 가능한지에 대한 질문이시죠.

일반적으로 다대다 관계에서는 컬렉션으로 연결해주는 것이 좋습니다. 중간 테이블을 직접 사용하는 것보다는 객체지향적인 접근 방식으로 컬렉션을 사용하면 코드의 가독성, 유지 보수성 등 여러 가지 측면에서 더 좋은 성능을 얻을 수 있습니다.

따라서, B에서 A와 C를 fetch join으로 모두 가져오는 것은 좋은 설계 방식이라고 볼 수 있습니다.

하지만, 각 상황에 따라 다를 수 있습니다. 예를 들어, 데이터 양이 많거나 특정 상황에서는 필요한 데이터만 가져와야 할 때 등에는 조인 보다는 다른 방법을 고려해야 할 수도 있습니다.

자세한 설명은 해당 강의의 내용과 관련된 질문이 아니기 때문에, 더 자세한 답변을 원하신다면 강의 Q&A나 관련된 포럼에 질문을 올려보시는 것이 좋을 것 같아요.

더 도움이 필요하시면 언제든지 물어보세요. 감사합니다.

dionisos198님의 프로필 이미지
dionisos198

작성한 질문수

질문하기