[정리] QueryDSL이 뭐람?

Wook _·2023년 8월 16일
0

정리

목록 보기
2/13

QueryDSL!?

QueryDSL은 하이버 네이트 쿼리 언어(HQL:Hibernate Query Language)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임워크이다.

QueryDSL은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있게 해준다.

Query 빌더로 JPA의 JPQL을 만들어 주는 빌더다.

보통 JPA Repository에서 자동으로 만들어주는 매핑 메소드를 생성하기 어렵거나 복잡한 상황에서 쿼리를 작성하고 데이터를 영속화하게 된다. 이때 사용하는 쿼리가 JPQL이다. 일반 SQL을 사용할 수 있다. 하지만 OOP의 특성을 가져가면서 객체 중심의 DB연결 문제를 해결할 수 있는 JPA는 JPQL이 매우 중요한 요소이다. JPQL은 실제 생성한 엔티티객체를 이용하여 쿼리를 작성하기 때문이다.

QueryDSL은 이런 문제를 해결하기 위해 JPQL을 코드를 이용하여 작성한다. 코딩 과정에서 문법에러를 알 수 있고, 상황에 따라 유동적인 쿼리를 작성할 수 있는 장점이 있다. 개발자 입장에서도 불확실한 String 형태의 쿼리보다 안정적으로 쿼리를 작성할 수 있다.

다음은 JPQL과 QueryDSL을 비교한 것이다.

JPQL

String username = "java";
String jpql = "select m from Member m where m.username = :username";

List<Member> result = em.createQuery(query, Member.class).getResultList();

QueryDSL

String username = "java";

List<Member> result = queryFactory
        .select(member)
        .from(member)
        .where(usernameEq(username))
        .fetch();

QueryDSL 장점

  • 문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에서 문법 오류를 확인할 수 있다.
  • 인텔리제이와 같은 IDE 자동 완성 기능의 도움을 받을 수 있다.
  • 복장한 쿼리나 동적 쿼리 작성이 편리하다.
  • 쿼리 작성 시 제약 조건 등을 메소드 추출을 통해 재사용할 수 있다.
    JPQL 문법과 비슷한 형태로 작성할 수 있어 쉽게 적응할 수 있다.

왜 QueryDSL을 찾아보게 되었는지

필자는 JPA를 통해 개발을 하면서 많은 수정 작업을 거치게 되었던 적이 있었다.

그때마다 "이젠 잘못된 곳이 없겠지? -> 오류 -> 수정" 이라는 무한굴레에 빠져 많은 시간을 컴퓨터의열기 속에서 보내게 되었다.

여름이었다..

아무튼 이참에 쓸데없는 시간을 허비하는 것보다 새로운 방법을 찾아 적응하는것이 더 낫겠다는 뒤늦은 생각에 호다닥 찾아보게 되었다.

간단하게나마 정리를 해보았지만, 이 또한 단점이 존재할 거 같아서 무작정 맹신하지는 하지 않으려고 한다.

지금 눈에 보이는 것으로는.. SQL을 안쓰게 될 거 같다는 점..?

해서 적절히 쓰되 남용하지는 말아야겠다.

끝!


출처
https://studio108.tistory.com/26
https://ittrue.tistory.com/292

profile
책상 위에 있는 춘식이 피규어가 귀엽다.

0개의 댓글