-
QueryDsl과 JPQL어떤것을 써야할까?개념 Self Study📝/Java 2023. 5. 1. 17:50
개요
- 최근 프로젝트간 대량의 데이터 조회에 대해서 많은 고충이 있었다. 우선적으로 검색 조건이 많다보니 어떻게 설정해주어야 할지 감이 오지 않았고 데이터 정렬은 잘될지 걱정하게 되었는데 QueryDsl과 JPQL두가지 방법이 있다는것을 알게되어 정리를 한번 해보자
JPQL이란?
- 객체지향 쿼리언어이다.-> 주로 정적쿼리를 작성한다.
- 엔티티 객체를 대상으로 쿼리를 작성한다.
- 문자열로 쿼리를 작성하므로, 쿼리의 오타나 문법 오류를 런타임 시점에 발견할수 없는 단점이 있다.
- JPA의 내부적 기능으로 지원된다.
QueryDsl이란?
- 자바코드로 쿼리를 작성하는 방법이다.
- 컴파일 시점에 쿼리 작성 오류를 검출할수 있다.
- IDE자동완성 기능을 사용할 수 있어 개발 편의성이 높다
- 라이브러리를 추가해주어야한다.
성능적인 측면
- JPQL은 JPA내부적으로 동적쿼리를 생성하기 때문에 쿼리의 실행 계획을 최적화하기 어렵다. 반면, QueryDsl은 쿼리를 자바코드로 작성하기 때문에 쿼리 실행 계획을 더욱 최적화 할수 있다.
- 조건이 많은 경우
- JPQL은 문자열로 쿼리를 작성한 후 실행하므로 쿼리가 길어지게 되고 이는, 유지보수성 저하 및 디버깅이 어려워진다.
- QueryDsl은 자바코드로 쿼리를 작성하므로, 조건들을 체이닝 현태로 메서드를 연결하여 쿼리 작성이 가능하고 이를 통해 가독성과 유지보수성을 높일수 있다.
- 데이터 검색할 경우
- JPQL은 쿼리를 실행하기 전에 객체 모델과 매핑된 SQL쿼리를 동적으로 생성하며, 이후에 쿼리를 실행하게된다. 따라서, JPQL은 모든 데이터를 검색한 후에 해당하는 조건의 데이터를 찾아오는 방식이다. 이렇게 되면 쿼리의 실행시간이 길어지게 되고 대량의 데이터 처리시 성능이슈 발생한다.
- QueryDsl은 쿼리를 생성할 떄 컴파일러 수준에서 타입체크를 수행하여 오류를 미리 검출하고, 쿼리 작성 오류를 줄이는데 도움을 준다. QueryDsl은 쿼리를 실행하기전에 해당하는 조건의 데이터를 바로 찾아와서 실행하는 방식이다.
'개념 Self Study📝 > Java' 카테고리의 다른 글
Exception Handler and Validate는? (0) 2023.04.29 QueryDsl을 살짝 뜯어보자 (0) 2023.04.28 Spring Boot JPA Update 방법은 다양하다? (0) 2023.04.27