2024.07.02.화.TIL 내일배움캠프 54일차 <QueryDSL>

김기남·2024년 7월 2일
0

안녕하세요, 오늘은 JPA 심화 강의를 수강하며 핵심 내용으로 다루고 있는 QueryDSL 에 대해 알아보았습니다.

QueryDSL이란?

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

장점

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

주요 기능

  • 정적 타입 지원
    Java 코드로 쿼리를 작성하므로 컴파일 시점에 오류를 확인할 수 있습니다. 이는 런타임 시점에 발생할 수 있는 오류를 사전에 방지하는 데 도움이 됩니다.
  • JPQL, SQL 지원
    QueryDSL은 JPQL과 SQL을 모두 지원하므로 JPA를 사용하는 프로젝트에서도 유용하게 활용할 수 있습니다. 또한, 각 데이터베이스 특성에 맞는 쿼리를 생성하여 성능을 최적화할 수 있습니다.
  • 코드 재사용성
    QueryDSL은 쿼리를 Java 코드로 작성하기 때문에 메서드를 활용하여 쿼리를 재사용할 수 있습니다. 이는 유지보수를 용이하게 만들어줍니다.
  • 동적 쿼리 지원
    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을 사용하여 기본 쿼리를 작성하는 방법을 살펴보겠습니다. 기본적으로 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이 매우 유용합니다.

출처 : https://wdkong.com/blog/it/programming/java-querydsl1-querydsl%EC%9D%B4%EB%9E%80-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95%EB%B6%80%ED%84%B0-%EA%B8%B0%EB%B3%B8-%EC%98%88%EC%A0%9C%EA%B9%8C%EC%A7%80/

profile
새로운 시작~!

0개의 댓글