batch_fetch_size 지정 (지연로딩)

Codren·2021년 10월 6일
0

구매 내역 조회 최적화 작업

  • Spring Boot 쇼핑몰 프로젝트중 구매 내역을 조회하는 부분에서 application.properties 파일에 batch_fetch_size 설정 지정 시 최적화되는 원리에 대한 궁금증




최적화 적용 전



1. 최적화 필요 부분

  • order 객체들을 조회하여 order List에 저장한 다음에 order 객체 안에 존재하는 orderItem 객체들을 사용하는 상황

  • order - orderItem 연관 관계는 지연로딩 (fetch = FetchType.LAZY) 이므로 order 를 조회할 때는 orderItem 이 조회 되지 않음
  • order.getOrderItems() 메소드가 수행될 때, order 객체 안에 존재하는 orderItem 객체들이 조회됨
  • 결과적으로 orders List 에 존재하는 order 객체만큼 쿼리문이 추가적으로 수행됨 -> 성능 저하
  • 2개의 구매 이력이 존재할 때 (orderId = 44, 46), for 문으로 order.getOrderItems() 메소드를 수행할 때마다 각 주문을 참조하는 주문 상품을 조회




최적화 적용

  • application.properties 파일에 batch_fetch_size 설정 지정 (배치 처리)




최적화 적용 후

  • in() 쿼리를 이용하여 첫 번째 for 문의 order.getOrderItems() 메소드를 수행할 때 한 번에 조회함




결론

  • 객체 간의 연관 관계를 지연로딩으로 설정하면 참조하는 객체는 사용될 때 조회된다.
  • 참조하는 객체가 사용될 때 하나씩 조회문을 수행하지 않고 한 번에 수행하기 위해서 application.properties 파일에 batch_fetch_size 설정을 지정한다.

0개의 댓글