본문 바로가기

프로젝션2

프로젝션, 인덱스로 조회 성능 개선하기(feat.ngrinder) 이전 일대다 페이지네이션 최적화하기에서 애니프렌즈 프로젝트의 코드 일부를 예로 들며 BatchSize와 프로젝션을 이용한 일대다 컬렉션 페이징 쿼리를 최적화하였습니다. 이후 QA를 진행하던 중 보호 동물 목록 조회에서 1000ms 이상의 시간이 소요되는 것을 인지하였습니다. 보호 동물 서비스는 애니프렌즈 프로젝트에서 메인에 노출되는 기능이기 때문에 사용자에게 최대한 빠른 응답을 돌려줄 수 있어야 합니다. public record FindAnimalResponse( Long animalId, String animalName, String shelterName, String shelterAddress, String animalImageUrl ) { public static FindAnimalResponse .. 2023. 12. 16.
일대다 페이지네이션 최적화하기 일대다 컬렉션에 대한 페치 조인과 페이지네이션을 함께 사용하는 경우 다음과 같은 로그를 확인할 수 있습니다. 일대다 조인을 수행하는 경우 다 쪽의 데이터만큼 결과 row가 증가하기 때문에 DB에서 페이지네이션을 수행할 수 없습니다. 하이버네이트는 메모리 상에서 페이징을 시도하게 되면서 applying in memory라는 경고 로그를 남깁니다. 이러한 페이지네이션을 개선하기 위해서는 다음 2가지 방법을 사용할 수 있습니다. BatchSize 프로젝션 + IN절 쿼리 -> 애플리케이션 상에서 조인 수행 BatchSize BatchSize를 사용하기 위해서는 hibernate.default_batch_size를 이용해 글로벌로 설정하거나 @BatchSize를 일대다 컬렉션에 추가하여 개별적으로 설정할 수 있.. 2023. 12. 13.