강의

멘토링

커뮤니티

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

작성자 없음

작성자 정보가 삭제된 글입니다.

@BatchSize 관련 질문

작성

·

271

0

안녕하세요. 먼저 항상 좋은 강의 감사드립니다.

realworld라는 프로젝트를 JPA로 구현하는 도중에 궁금한 점이 생겨서 질문 드립니다.

@OneToMany
List<ArticleTagEntity> articleTags

ArticleEntity는 위의 ArticleTagEntity를 갖고 있습니다. (Lazy 설정 되어있습니다.) 저는 application.yml에 default_batch_fetch_size를 500으로 설정해놓고

... ArticleEntity 조회 로직 ...
List<ArticleTagEntity> articleTagList = articleEntity.getArticleTags();
articleTagList.forEach(articleTag -> ....);

다음 부분에서 WHERE IN 절 쿼리가 나가는데요, ArticleEntity 조회 로직에서 조회된 ArticleEntity의 개수는 총 12개입니다. 그렇다면 batch_size를 500으로 설정해놨으니 WHERE IN 절에서 article_id가 12개가 모두 바인딩되서 나가는 것을 기대했는데 실제로는 그렇지 않고 10개 나간뒤 반복문을 돌다가 2개가 다시 나가는 쿼리가 발생했습니다.

Hibernate: 
    select
        articletag0_.article_id as article_4_1_1_,
        articletag0_.uid as uid1_1_1_,
        articletag0_.uid as uid1_1_0_,
        articletag0_.created_at as created_2_1_0_,
        articletag0_.updated_at as updated_3_1_0_,
        articletag0_.article_id as article_4_1_0_,
        articletag0_.tag_id as tag_id5_1_0_ 
    from
        article_tag articletag0_ 
    where
        articletag0_.article_id in (
            ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
        )
....
....
... for문을 쭉 돌다가...
Hibernate: 
    select
        articletag0_.article_id as article_4_1_1_,
        articletag0_.uid as uid1_1_1_,
        articletag0_.uid as uid1_1_0_,
        articletag0_.created_at as created_2_1_0_,
        articletag0_.updated_at as updated_3_1_0_,
        articletag0_.article_id as article_4_1_0_,
        articletag0_.tag_id as tag_id5_1_0_ 
    from
        article_tag articletag0_ 
    where
        articletag0_.article_id in (
            ?, ?
        )

구글링을 해보니 batch_size를 큰 값으로 설정했어도 반드시 그 사이즈로 WHERE IN절에 데이터가 바인딩 되는 것이 아니라 하이버네이트 내부적으로 조정할 수도 있다고 하는데 해당 말이 맞는건지, 제가 무언가를 잘못한건지 궁금합니다.

 

  • TRACE 로그를 확인해봤는데 ArticleEntity 조회 로직에서

2022-09-17 22:38:32.511 TRACE 8458 --- [    Test worker] org.hibernate.type.CollectionType        : Created collection wrapper: [springboot.domain.entity.ArticleEntity.articleTagEntities#88]
..........................................
..........................................
2022-09-17 22:38:32.515 TRACE 8458 --- [    Test worker] org.hibernate.type.CollectionType        : Created collection wrapper: [springboot.domain.entity.ArticleEntity.articleTagEntities#1]

이러한 로그가 총 12개 찍혔는걸로 봐서는 조회 시점에 프록시 객체는 모두 정상적으로 만들어 진 것으로 보입니다.

 

이전 질문을 찾아보니 요분과 테이블 구조는 거의 같다고 보시면 될 것 같습니다. (https://www.inflearn.com/questions/591443)

 

감사합니다.

답변 1

0

인프런 상단 메뉴 커뮤니티에서 글 남기시면 영한님이 확인을 안하셔서 보실 수 없습니다~

image

강의와 관련된 질문은 해당 강의 게시판에 남겨주셔야 확인이 가능합니다

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기