Hibernate의 default_batch_fetch_size는 한 번에 로드되는 엔티티나 컬렉션의 크기를 지정
이 설정은 지연 로딩(LAZY) 상태의 엔티티나 컬렉션을 가져올 때 최소한의 SELECT 쿼리를 사용하도록 도움
application.yml 또는 application.properties에 설정
spring:
jpa:
properties:
hibernate:
default_batch_fetch_size: 100
default_batch_fetch_size는 다음 경우에 적용
@OneToMany (예: Post -> Image)@ManyToOne (예: Image -> Post)@ManyToManyHibernate는 연관된 엔티티를 배치로 로딩하여 N+1 문제를 완화
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@OneToMany(mappedBy = "post", fetch = FetchType.LAZY)
private List<Image> images;
}
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String url;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
private Post post;
}
List<Post> posts = queryFactory
.selectFrom(post)
.where(post.createdDate.before(LocalDateTime.now()))
.fetch();
// 연관된 이미지 가져오기 (배치 페치 적용)
for (Post post : posts) {
List<Image> images = post.getImages(); // 여기에 배치 페치 적용
}
Hibernate는 default_batch_fetch_size에 따라 Post와 관련된 Image를 한 번에 가져옴
default_batch_fetch_size: 100 설정은 성능 최적화에 유용하며,
특히 연관 관계가 많은 경우 N+1 문제를 줄이는 데 효과적
다만, 배치 크기를 적절히 설정해야 하며, 실제 데이터에 따라 쿼리 로그를 확인하면서 성능 테스트를 진행하는 것이 좋음.