[Java] QueryDSL(1) | QueryDSL이란? 설정 방법부터 기본 예제까지

Photo of author
Written By 완두콩

3년차 웹 개발자.
만 28세.
화이팅!

쿼리 DSL(QueryDSL)은 자바 기반 오픈 소스 프레임워크로, SQL 쿼리를 더욱 쉽고 편리하게 작성할 수 있도록 도와주는 라이브러리입니다. 특히 Java와 Spring Boot 프레임워크를 사용하는 개발자들에게 강력한 쿼리 기능과 유연성을 제공합니다. 이번 포스팅에서는 QueryDSL의 기본 개념부터 Java Spring Boot 예제를 통해 사용법을 자세히 알아보겠습니다.

 




 

QueryDSL이란?

QueryDSL은 SQL과 JPQL(JPA Query Language)을 Java 코드로 작성할 수 있게 도와주는 동적 쿼리 빌더입니다. Java 코드로 쿼리를 작성하므로 IDE의 자동완성 기능과 컴파일 시점에 오류를 체크할 수 있다는 장점이 있습니다. 또한, 문자열로 쿼리를 작성하는 것보다 문법 오류가 줄어들어 안정성이 향상됩니다.

 

장점

QueryDSL을 사용하면 복잡한 동적 쿼리를 간결하게 표현할 수 있습니다. 또한, 쿼리를 작성할 때 오타나 문법 오류가 발생할 확률이 줄어들어 생산성을 높여줍니다. 또한 QueryDSL은 JPQL과 SQL을 완벽하게 지원하므로, 데이터베이스 특성에 따라 유연하게 대응할 수 있습니다.

 

주요 기능

QueryDSL은 다음과 같은 주요 기능을 제공합니다.

 

정적 타입 지원

Java 코드로 쿼리를 작성하므로 컴파일 시점에 오류를 확인할 수 있습니다. 이는 런타임 시점에 발생할 수 있는 오류를 사전에 방지하는 데 도움이 됩니다.

 

JPQL, SQL 지원

QueryDSL은 JPQL과 SQL을 모두 지원하므로 JPA를 사용하는 프로젝트에서도 유용하게 활용할 수 있습니다. 또한, 각 데이터베이스 특성에 맞는 쿼리를 생성하여 성능을 최적화할 수 있습니다.

 

코드 재사용성

QueryDSL은 쿼리를 Java 코드로 작성하기 때문에 메서드를 활용하여 쿼리를 재사용할 수 있습니다. 이는 유지보수를 용이하게 만들어줍니다.

 

동적 쿼리 지원

QueryDSL은 동적 쿼리 작성을 지원하므로 사용자의 입력이나 상황에 따라 유연하게 쿼리를 생성할 수 있습니다. 이는 검색 기능과 같이 다양한 조건으로 데이터를 조회해야 하는 상황에서 매우 유용합니다.

 

이로써, QueryDSL의 특징을 살펴보았습니다. 이제 QueryDSL을 설정하는 방법을 자세히 알아보겠습니다.



 

설정

먼저, 프로젝트에 QueryDSL을 추가하고 데이터베이스 설정을 해야 합니다.

 

프로젝트에 QueryDSL 추가하기

프로젝트에 QueryDSL을 추가하려면 빌드 파일에 아래의 의존성을 추가합니다.

// build.gradle

dependencies {
    // Other dependencies...

    implementation 'com.querydsl:querydsl-core:4.4.0'
    implementation 'com.querydsl:querydsl-jpa:4.4.0'
}

 

데이터베이스 설정

QueryDSL은 데이터베이스와 함께 사용되므로 프로젝트에서 사용하는 데이터베이스에 맞는 설정이 필요합니다.

 

설정 파일 작성하기

QueryDSL 설정 파일을 작성하여 QueryDSL을 사용할 수 있도록 설정해야 합니다. 설정 파일은 보통 QClasses 라는 패키지에 생성되며, 이는 QueryDSL이 엔티티 클래스를 기반으로 쿼리를 생성하는 데 사용됩니다.

// QClasses.java

package com.example.project.qclasses;

import com.querydsl.core.annotations.QueryEntities;

@QueryEntities // QueryDSL이 사용할 엔티티 클래스 목록을 자동으로 스캔합니다.
public class QClasses {
    // 이곳에 아무 내용도 작성하지 않습니다.
}

이로써, QueryDSL의 설정이 완료되었습니다. 이제 기본 쿼리 작성에 대해 설명해보겠습니다.



 

기본 쿼리 작성

QueryDSL을 사용하여 기본 쿼리를 작성하는 방법을 살펴보겠습니다. 기본적으로 JPQL과 비슷한 구문을 사용하여 쿼리를 작성할 수 있습니다. 하지만 QueryDSL은 Java 코드로 쿼리를 작성하므로 IDE의 도움을 받을 수 있어 더욱 편리합니다.

 

JPQL vs. QueryDSL

먼저, JPQL과 QueryDSL의 차이점을 이해해봅시다. JPQL은 문자열로 쿼리를 작성하는 언어이기 때문에 오타가 발생하거나 문법 오류가 날 수 있습니다. 또한, 컴파일 시점에 오류를 확인할 수 없어 런타임 시에 문제가 발생할 수 있습니다. 하지만 QueryDSL은 Java 코드로 쿼리를 작성하기 때문에 컴파일 시점에 오류를 확인할 수 있어 안정성이 향상됩니다.

 

쿼리 타입 선언하기

QueryDSL을 사용하려면 쿼리 타입을 먼저 선언해야 합니다. 쿼리 타입은 QueryDSL이 엔티티와 관련된 쿼리를 생성하는 데 사용됩니다. 쿼리 타입은 QClass라는 클래스로 생성되며, 엔티티 클래스의 필드와 연관된 쿼리 조건을 정의합니다.

// 쿼리 타입 선언 예제
QUser qUser = QUser.user;

기본 쿼리 작성 예제

이제 간단한 기본 쿼리를 작성해봅시다. 예를 들어, 사용자 중에서 특정 이름을 가진 사용자를 검색하는 쿼리를 작성해보겠습니다.

// QueryDSL을 사용하여 사용자 중에서 특정 이름을 가진 사용자를 검색하는 쿼리 예제
Lis<User> users = queryFactory
    .selectFrom(qUser)
    .where(qUser.name.eq("홍길동"))
    .fetch();

위의 예제에서 qUser.name.eq(“홍길동”) 부분은 사용자의 이름이 “홍길동”과 일치하는지 검사하는 조건을 의미합니다. 이렇게 간단하게 쿼리를 작성할 수 있으며, 동적 쿼리를 작성하는 데에도 QueryDSL이 매우 유용합니다.

 

지금까지 QueryDSL이 무엇인지와 특징 그리고 기본 쿼리 작성에 대해 알아보았습니다. 다음 포스팅에서는 조금 더 심화된 내용으로 조건문, 정렬 등의 기능에 대해서 포스팅해보겠습니다.

 

다음 글 :

 



Leave a Comment