Jpa Batch Size 전역 설정하기

유알·2024년 3월 7일
0

Jpa에서 N + 1 문제를 해결하기 위해서 많이 사용되는 @BatchSize 를 전역적으로 적용시킬 수는 없을까?

@BatchSize

이 어노테이션을 사용하면, N + 1 쿼리를 SELCT , IN 쿼리 두개로 대체 할 수 있다.
이 어노테이션에 명시된 숫자 만큼 IN 쿼리가 발생한다. 즉 100개가 설정되었는데, 200개의 레코드를 조회한다면 IN 쿼리가 두번 발생한다.

결과적으로 서버의 메모리 사용량은 같으나, 데이터 베이스의 부하를 제어할 수 있다.

기본적으로는 다음과 같이 필드에 적용할 수 있다.

@BatchSize(size = 100)
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();

하지만 전역적으로 적용할 수도 있는데

# application.yml
spring:
  jpa:
    hibernate:
  	  default_batch_fetch_size: 100

이렇게 적용해도 된다.

보통 100 ~ 1000개 정도를 지정하라는 가이드가 있긴 하다.

profile
더 좋은 구조를 고민하는 개발자 입니다

0개의 댓글