[TIL] 51. QueryDSL 성능개선 방법

김지수·2024년 7월 5일

TIL

목록 보기
52/53

쿼리 최적화

QueryDSL을 사용할 때 생성되는 JPQL 또는 SQL 쿼리를 최적화하는 것이 중요합니다. 다음과 같은 점을 고려할 수 있습니다:

인덱스 활용

적절한 데이터베이스 인덱스를 추가하여 검색 속도를 개선할 수 있습니다.
조인 최적화: 필요한 경우 조인 방법을 검토하여 성능을 향상시킬 수 있습니다.
패치 조인 사용: 엔티티 그래프 패치(fetch join)를 사용하여 연관된 엔티티를 한 번에 로드할 수 있습니다. 이는 N+1 쿼리 문제를 해결하여 성능을 개선할 수 있습니다.

쿼리 캐시

반복적으로 실행되는 쿼리의 결과를 캐시하여 데이터베이스 부하를 줄일 수 있습니다. Hibernate의 레벨 2 캐시 또는 Spring의 캐시 추상화를 활용할 수 있습니다.

쿼리 로깅 및 모니터링

생성되는 실제 쿼리를 로깅하여 실행 계획을 확인하고, 느린 쿼리를 식별하여 최적화할 수 있습니다. Hibernate의 설정을 통해 쿼리 로그를 활성화할 수 있습니다.

페이징 처리 최적화

대용량 데이터를 조회할 때 페이징 처리를 효율적으로 하기 위해 OFFSET 대신에 Keyset 기반의 페이징을 고려할 수 있습니다.

성능 테스트 및 프로파일링

실제 데이터를 사용하여 성능 테스트를 수행하고, 프로파일링 도구를 사용하여 애플리케이션의 병목 현상을 찾고 개선할 수 있습니다.

쿼리DSL 코드 최적화

QueryDSL을 사용할 때 메서드 체인을 효율적으로 사용하고, 필요한 경우 쿼리 조건을 재구성하여 실행 계획을 최적화할 수 있습니다.


모든 정보를 리스트를 가져와서 size만 가져왔던 걸


만들어서 재사용하였다.

오늘의 회고


쿼리 DSL을 사용하여 쿼리를 효율적으로 줄였지만 리팩토링 과정에서 더 나은 최적화 방법을 생각해냈다. 특히 쿼리 조회 수를 줄이는 것이 성능 개선에 중요하다는 걸 깨닫고 똑같은 카운트를 가져오는 것도 메모리적으로 성능에 어떤게 더 효율적인지도 배웠다. 좀 더 생각을 하면서 최적화, 성능 개선, 가독성 높이는 방법을 생각해봐야겠다.

profile
서툴고 부족한 점이 많지만, 배우고 발전하며 성장하기 위해 노력하겠습니다.

0개의 댓글