Peony의 기록 창고 🌼
article thumbnail
반응형

QueryDSL은 SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 ✨빌더 오픈소스 프레임워크✨ 이다.

사실, QueryDSL 이 JPA 에서만 사용하는 프레임워크로만 알 수도 있지만, JPA 뿐만 아닌 다양한 언어에 대해서도 서비스를 제공한다.


공식사이트

 

Querydsl - Unified Queries for Java

Unified Queries for Java. Querydsl is compact, safe and easy to learn. <!-- Querydsl Unified Queries for Java Querydsl provides a unified querying layer for multiple backends in Java. Compared to the alternatives Querydsl is more compact, safer and easier

querydsl.com

 

QueryDSL JPA

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

자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결하기 위해 사용하는 것이 QueryDSL이다.

QueryDSL이 등장하기 전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성해, 컴파일 시에 오류를 발견하는게 불가능했다.
이전에는 어떻게 사용했길래 컴파일 시점에 오류를 찾는게 불가능한지 살펴보자.

 

JPQL 이란 ?

JPA 에서 지원하는 다양한 쿼리 방법 중 가장 단순한 조회 방법으로, SQL 의 경우에는 DB 테이블을 대상으로 쿼리를 질의하지만, JPQL 은 엔티티 객체를 대상으로 쿼리를 질의한다.

String jpql = “select m from Member m where m.name = :username”;
List<Member> result = em.createQuery(jpql, Member.class).getResultList();

이렇게만 봤을 때는 그냥 JPQL을 사용하는게 더 간단해보일 수 있지만, JPQL에는 다음과 같은 문제점이 존재한다.

 

JPQL 문제점

  1. 쿼리를 문자열로 입력한다.
    → 오타가 발생하거나, 관리하는데 어려움이 있고, type-check가 불가능하다.
  2. 컴파일 단계에서 오류를 확인할 수 없고 런타임에서 해당 쿼리가 실행되어야 오류를 발견할 수 있다.

QueryDSL은 자바 코드로 SQL문을 작성할 수 있어 컴파일 시에 오류를 발생하여 잘못된 쿼리가 실행되는 것을 방지할 수 있다.

 

QueryDSL 를 사용해야하는 이유

  1. 쿼리를 문자열로서가 아니라 코드를 통해서 작성하기 때문에 오타가 날 확률이 적어지고, 객체 지향적으로 개발할 수 있다.
  2. QueryDSL 은 코드로서 작성하기 때문에 컴파일 단계에서도 오류를 빠르게 발견할 수 있다.
  3. 복잡한 쿼리나 동적 쿼리 작성이 편리하다.
  4. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.

 

예를 들어, 위의 예시를 다시 가져와보자.
JPQL 의 경우에는

String jpql = “select m from Member m where m.name = :username”;
List<Member> result = em.createQuery(jpql, Member.class).getResultList();

 

이런식으로 쿼리를 작성해야 하지만,
QueryDSL 을 사용했을 때에는

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

이런 식으로 코드를 사용해서 나타낼 수 있다.

 

Reference

http://querydsl.com/
https://ittrue.tistory.com/292

반응형
profile

Peony의 기록 창고 🌼

@myeongju