-
QueryDsl을 살짝 뜯어보자개념 Self Study📝/Java 2023. 4. 28. 23:03
개요- 이번 final project간 JPQL을 통한 QueryDsl을 사용하였으나, 어떻게 사용하는지는것에 대해서만 파악하였고 장,단점,한계점 을 파악하지는 못하였다. 게시물을 통해서 장,단점, 한계점등을 파악해보자
장점
- JPA의 JPQL을 만들어주는 빌더이며, 더 자세하게 JPA를 사용할수 있다.
생성하기 어렵거나 복잡한 상황에서 쿼리를 작성하고 데이터를 영속하게 된다. - 코딩 과정에서 문법에러를 미리 알 수 있어며 상황에 따라 유동적인 쿼리를 작성할수 있다.
- 많은 경우의수의 쿼리를 작성하여야할때 QueryDsl을 통해 변수값을 활용한 간략한 동적쿼리를 만들수 있다.
※주의점 존재: 가독성이 떨어질수 있다.
단점
- JPA를 이용한 JPQL
- JPQL은 문자열 형태이기 때문에 개발자 의존적 형태이다.
- Compile 단계에서 Type-Check가 불가능하다.
- RunTime단계에서 오류 발견이 가능하다.
- QueryDsl- onlyQueryDsl
- JPQL단점인 문자열 형태로 쿼리작성된것에 의한 Type-Check불가 단점을 보완한다.(정적타입 이므로)
코드라인수가 길어진다.
- JPQL단점인 문자열 형태로 쿼리작성된것에 의한 Type-Check불가 단점을 보완한다.(정적타입 이므로)
한계점- Spring Data JPA가 자동으로 구현체를 만들어주는 메소드와 Entity만 사용할 경우
- 직접적인 연관관계를 맺지않는 Entity의 Join이 어렵다.
- Entity들중 원하는 필드만 가져올수 없다.
성능향상 측면
- 기존 JPQL을 활용하여 페이징 처리를 하게 된다면 풀스캔하면서 조건에 맞는 값을 찾아오는거에 반면, QueryDsl을 사용하게 되면 필요조건에 맞는 정보들만을 찾아온다 QueryDsl을 이용하면 시간적 단축을 할수 있다.
Util클래스는 무엇인가?
- 보안, 문자열처리, 날짜 처리 등등 특정 비즈니스 로직과 독립적인 기능들은 Util패키지에 넣고 Util클래스를 사용한다.
- 프로젝트 전역에서 사용될 수도 있는 기능
- 특정 로직이나 독립적인 기능
- 가능하면 어떤 상태를 가지지 않는 기능
※주의할 점
- 잦은 수정이 필요하다면 내가 잘못 설계했거나 Util성 클래스가 아니다.
- MVC와 같은 특정계층에 있지 않고 어디서든 사용가능해야한다.
- 만약 수정이 된다면 파급력이 강하기 때문에 수정을 지양한다.
결론
- QueryDsl은 조건 검색등 다양한 변수를 적용하는 동적쿼리를 사용할때 사용해야하며, 검색시에 기본 JPA보다 빠른 속도로 찾아올수있다.
참고https://velog.io/@ozragwort/Util-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%ED%82%A4%EC%A7%80
https://abbo.tistory.com/206'개념 Self Study📝 > Java' 카테고리의 다른 글
QueryDsl과 JPQL어떤것을 써야할까? (0) 2023.05.01 Exception Handler and Validate는? (0) 2023.04.29 Spring Boot JPA Update 방법은 다양하다? (0) 2023.04.27