ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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불가 단점을 보완한다.(정적타입 이므로)
        코드라인수가 길어진다.



    한계점 

    • 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

    https://kkambi.tistory.com/193

    https://velog.io/@seungho1216/Querydsl%EA%B2%80%EC%83%89-%EC%86%8D%EB%8F%84-%EA%B0%9C%EC%84%A0%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%85%B8%EB%A0%A5

Designed by Tistory.