batch_fetch_size 지정 (지연로딩)
- 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 설정을 지정한다.