Repository navigation
perf: 지연 로딩 연관을 배치로 읽어 회원 목록의 N+1 쿼리를 없앤다 - #150
Conversation
hibernate.default_batch_fetch_size가 없어, 회원 명부처럼 목록을 돌며 직책(@manytomany)·트랙을 읽는 곳이 회원마다 쿼리를 하나씩 더 보냈다. 회원 21명 관리자 명부 조회가 SQL 40개에서 10개로 준다.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
요약
hibernate.default_batch_fetch_size가 설정돼 있지 않아, 목록을 돌며 지연 로딩 연관을 읽는 곳마다 행 수만큼 쿼리가 더 나갔다(N+1). 대표적으로 회원 명부는 회원마다 직책(@ManyToMany) 쿼리를 하나씩 보냈다. 클라이언트가size=2000도 보낼 수 있어 회원 수가 늘수록 커진다.변경
spring.jpa.properties.hibernate.default_batch_fetch_size: 100— 같은 종류의 지연 로딩을 최대 100개씩IN쿼리 하나로 묶는다. 응답·트랜잭션 동작은 그대로이고 쿼리 수만 줄어든다. 멘토·모집 이력·관리자 배정 목록·커리큘럼 트리 등 같은 패턴의 다른 목록에도 함께 적용된다.측정
MemberDirectoryQueryCountIntegrationTest— 회원 21명(직책·트랙 포함)을 관리자 명부로 조회할 때 Hibernate가 준비한 SQL 수:테스트는 15개 미만을 요구해, 회원마다 쿼리가 늘어나는 회귀를 막는다.
테스트
./gradlew test: 536건 중 535 통과, 1 스킵.Summary by CodeRabbit