
batch size는 ORM의 기능 중 하나로 여러 연관된 엔터티를 한 번의 쿼리로 로딩할 수 있게 해주는 설정이다.
A 엔터티와 연관된 여러 B 엔터티들이 있을 때 각 A를 조회할 때마다 연관된 B들을 로딩하는 것이 아니라 설정된 batch size만큼의 B를 한 번에 로딩한다.
결과적으로 쿼리 수를 줄일 수 있다.
두 기능 모두 N+1 문제를 완화하는 방법이지만 사용하는 상황과 특성이 다르다
=> batch size를 사용한다고 fetch join의 필요성이 사라지는 것은 아니다.
각 상황에 맞는 전략을 선택해야 한다.
batch size = 10일때
조건
member 100 명 조회
member은 team 보유
100명의 Member 엔터티를 조회한다.
처음 Member 100명을 select로 조회하면서 각 Member의 team_id를 확보한다.
이후 특정 Member의 Team 정보가 필요하게 되면 현재 로딩이 필요한 Member로부터 batch size로 설정된 수 (=10) 만큼의 team_id에 해당하는 Team 엔터티들을 한 번의 쿼리로 조회한다.
그 후 영속성 컨텍스트를 확인하여 필요한 Team 엔터티가 없으면 다음 batch size만큼의 Team 엔터티들을 다시 조회한다.
이 과정이 반복된다.
IN 절을 활용해 한 번의 쿼리로 여러 Team을 조회하므로 N+1 문제를 효과적으로 완화할 수 있다.