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

기팝님의 프로필 이미지
기팝

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 2 - 한계

배치사이즈

작성

·

253

1

안녕하세요
배치사이즈 설정 후
( <property name="hibernate.default_batch_fetch_size" value="100"/>)
 
쿼리를보면 N+1 을 해결하는데
 
최대100개 in(1,2,3,4,...100) 쿼리가 날라가는건가요 ? [파랑색 밑줄 봐주세요]
 
=======================================
두번째 질문
데이터 뻥튀기 때문에 페치조인-> 페이징 불가라고 말씀해주셨는데
이전에 배운 distinct 를 사용해도 왜 안되는건지 모르겠습니다.
 
[데이터 뻥튀기는 distinct 로 커버가 되나, 메모리에 데이터를 다 애플리케이션에 퍼올리는 문제 때문인가요 ??]
 

답변 1

1

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

안녕하세요. 기팝님^^

Q: 최대100개 in(1,2,3,4,...100) 쿼리가 날라가는건가요 ? [파랑색 밑줄 봐주세요]

제가 직접 정답을 알려드릴 수 도 있지만, 그러면 더 많은 것을 얻어가지 못합니다^^

개발자는 궁금한 부분을 직접 코드로 테스트 해볼 때 가장 많이 배울 수 있습니다.

해당 부분을 코드로 직접 테스트해보시고, 그 결과를 공유해주세요. 그러면 함께 공부하는 분들께도 큰 도움이 될거에요. 그럼 테스트 해보시고 결과도 정리해서 공유 부탁드립니다.

 

Q: 두번째 질문

데이터 뻥튀기 때문에 페치조인-> 페이징 불가라고 말씀해주셨는데

이전에 배운 distinct 를 사용해도 왜 안되는건지 모르겠습니다.

[데이터 뻥튀기는 distinct 로 커버가 되나, 메모리에 데이터를 다 애플리케이션에 퍼올리는 문제 때문인가요 ??]

이 부분은 일대다 관계를 조인할 때 왜 페이징이 안되는지가 핵심입니다.

관계형 데이터베이스에서 일대다 조인을 하게 되면 원하는 데이터를 정확하게 페이징 할 수 없습니다.

왜냐하면 1을 기준으로 페이징을 해야 하는데, 1을 N과 조인하게 되면 데이터가 N만큼 늘어나기 때문입니다. 따라서 원하는 데이터를 페이징 하는 것이 불가능합니다.

테이블을 만들어서 SQL로 일대다를 조인하고 페이징 쿼리를 만들어서 SQL 쿼리 결과를 확인하면서 테스트 해보시면 더 명확하게 이해하실 수 있을거에요.

감사합니다.

기팝님의 프로필 이미지
기팝
질문자

감사합니다 ^^ 첫번째 질문은 간단히 배치사이즈만 줄여보면 확인해볼수있었네요 ㅎㅎ

저의 첫 질문대로 배치사이즈 만큼 in(?...) 숫자가 나가네요 ㅎㅎ[그만큼 데이터를 불러올때]

 

두번째 질문은 다시 한번더 드리겠습니다..

 

그리고 두번째는  조금 햇갈리는게  1을 N과 조인하게 되면 데이터가 N만큼 늘어나기 때문입니다. 따라서 원하는 데이터를 페이징 하는 것이 불가능합니다. -이 부분입니다

 

이 부분은 아래와 같이 데이터가 나와서 그런간가요 ?

 

 

이부분은  jpa  distinct  옵션으로 N만큼 늘어나는(뻥튀기현상)을 제어 해줄수 있는거 아닌가요?

 

 

기팝님의 프로필 이미지
기팝

작성한 질문수

질문하기