inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

default_batch_fetch_size, @BatchSize 가 동작하지 않습니다.

1279

roman14

작성한 질문수 3

0

강의 내용 중 N+1, 페이징 등의 복합적인 문제를 해결하기 위해 BatchSize 기능을 이용하는데 해당 기능이 동작하질 않아 질문을 드립니다.

 

# application.yml
spring:
  jpa:
    hibernate:
      ddl-auto: create
      properties:
        hibernate:
          default_batch_fetch_size: 30
          jdbc:
            batch_size: 100

 

2022-11-15 05:11:32.146  INFO 19268 --- [io-49445-exec-5] p6spy                                    : 2022-11-15T05:11:32.146352400 / time:0ms / 
    select
        order0_.order_id as order_id1_10_0_,
        member1_.member_id as member_i1_6_1_,
        delivery2_.delivery_id as delivery1_4_2_,
        order0_.delivery_id as delivery4_10_0_,
        order0_.member_id as member_i5_10_0_,
        order0_.order_date as order_da2_10_0_,
        order0_.status as status3_10_0_,
        member1_.add_time as add_time2_6_1_,
        member1_.city as city3_6_1_,
        member1_.street as street4_6_1_,
        member1_.zipcode as zipcode5_6_1_,
        member1_.description as descript6_6_1_,
        member1_.name as name7_6_1_,
        delivery2_.city as city2_4_2_,
        delivery2_.street as street3_4_2_,
        delivery2_.zipcode as zipcode4_4_2_ 
    from
        orders order0_ 
    inner join
        member member1_ 
            on order0_.member_id=member1_.member_id 
    inner join
        delivery delivery2_ 
            on order0_.delivery_id=delivery2_.delivery_id limit 50 offset 1
2022-11-15 05:11:32.147  INFO 19268 --- [io-49445-exec-5] p6spy                                    : 2022-11-15T05:11:32.147842300 / time:0ms / 
    select
        orderitems0_.order_id as order_id5_9_1_,
        orderitems0_.order_item_id as order_it1_9_1_,
        orderitems0_.order_item_id as order_it1_9_0_,
        orderitems0_.count as count2_9_0_,
        orderitems0_.item_id as item_id4_9_0_,
        orderitems0_.order_id as order_id5_9_0_,
        orderitems0_.order_price as order_pr3_9_0_ 
    from
        order_item orderitems0_ 
    where
        orderitems0_.order_id=11
2022-11-15 05:11:32.148  INFO 19268 --- [io-49445-exec-5] p6spy                                    : 2022-11-15T05:11:32.148833600 / time:0ms / 
    select
        item0_.item_id as item_id2_5_0_,
        item0_.name as name3_5_0_,
        item0_.price as price4_5_0_,
        item0_.stock_quantity as stock_qu5_5_0_,
        item0_1_.author as author1_0_0_,
        item0_1_.isbn as isbn2_0_0_,
        item0_2_.actor as actor1_7_0_,
        item0_2_.director as director2_7_0_,
        item0_3_.artist as artist1_8_0_,
        item0_3_.etc as etc2_8_0_,
        item0_.dtype as dtype1_5_0_ 
    from
        item item0_ 
    left outer join
        book item0_1_ 
            on item0_.item_id=item0_1_.item_id 
    left outer join
        movie item0_2_ 
            on item0_.item_id=item0_2_.item_id 
    left outer join
        music item0_3_ 
            on item0_.item_id=item0_3_.item_id 
    where
        item0_.item_id=9
2022-11-15 05:11:32.149  INFO 19268 --- [io-49445-exec-5] p6spy                                    : 2022-11-15T05:11:32.149825900 / time:0ms / 
    select
        item0_.item_id as item_id2_5_0_,
        item0_.name as name3_5_0_,
        item0_.price as price4_5_0_,
        item0_.stock_quantity as stock_qu5_5_0_,
        item0_1_.author as author1_0_0_,
        item0_1_.isbn as isbn2_0_0_,
        item0_2_.actor as actor1_7_0_,
        item0_2_.director as director2_7_0_,
        item0_3_.artist as artist1_8_0_,
        item0_3_.etc as etc2_8_0_,
        item0_.dtype as dtype1_5_0_ 
    from
        item item0_ 
    left outer join
        book item0_1_ 
            on item0_.item_id=item0_1_.item_id 
    left outer join
        movie item0_2_ 
            on item0_.item_id=item0_2_.item_id 
    left outer join
        music item0_3_ 
            on item0_.item_id=item0_3_.item_id 
    where
        item0_.item_id=10

 

 

 

전체 프로그램 소스코드 다운로드) https://drive.google.com/file/d/1Q0XQFEBGpAVi0xYhEZgr8qME4rebI39q/view?usp=share_link

spring-boot spring JPA java

답변 1

2

김영한

안녕하세요. roman14님

application.yml에서 띄어쓰기가 잘못되어 있습니다. (이게 은근 실수가 많습니다^^)

기존에는 spring.jpa.hibernate.properties.hibernate로 되어 있었는데요.

원본

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/test
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
      properties:
        hibernate:
          default_batch_fetch_size: 30
          jdbc:
            batch_size: 100

 

다음과 같이 spring.jpa.properties.hibernate 이렇게 들어가야 합니다.

수정본

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/test
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        default_batch_fetch_size: 30
        jdbc:
          batch_size: 100

감사합니다.

0

roman14

이 문제 해결한다고 며칠을 헤맸는데, 굉장히 한심한 실수였네요... 피드백 감사합니다!

0

roman14

설정이 제대로 적용되지 않아서 동작하지 않았으리라는 추측도 해보았었지만, 런타임에서 설정된 값을 호출하는 방법을 몰라서 확인을 해보지 못했던 것이 기억나는데 혹시 위와 같이 yml, properties를 통한 JPA, 하이버네이트 설정 값을 런타임에서 확인할 방법은 없을까요?

0

김영한

안녕하세요. roman14님

스프링 부트 actuator에 env라는 항목을 찾아보시면 도움이 되실거에요.

감사합니다.

강의 관련 외 질문입니다.

0

69

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

1

92

1

BeanCreationException

0

91

3

Update 후 UpdateMemberResponse 매핑할 때

0

50

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

101

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

84

1

루트 쿼리라는것은

0

60

1

메서드를 분리하는 기준

0

67

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

113

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

86

2

fetch join과 영속화와 OSIV의 관계

0

87

2

Distinct 사용 전 결과에 대한 의문

0

117

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

60

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

60

1

뷰템플릿 사용 시

0

78

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

86

1

DTO 대신 Form 사용은 안되나요?

0

138

1

OSIV ON 상태일 때

0

96

1

fetch join VS fetch join 페이징 궁금증

0

187

2

양방향 연관관계 알아보는 법?

0

107

1

16강 17강 간단 정리 이게 맞을까요 ?

0

166

2