Spring & Spring boot

[Spring Boot] JPA - 6. QueryDSL 설정

jh4dev 2024. 8. 11. 16:05
<목차>
아래 환경에서 QueryDSL을 사용하기 위한 설정 방법에 대해 알아보자.
IntelliJ
Springboot 2.7.18
Maven

1. QueryDSL ?
2. QueryDSL 설정 방법 (QDomain)

 

[QueryDSL ?]

JPQL의 경우, 쿼리 메소드 외에도 @Query 어노테이션을 사용하여 직접 쿼리를 작성할 수 있으나, 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고, 런타임 에러가 발생하여 실제 애플리케이션 배포 후 오류가 발견되는 리스크를 수반한다.

QueryDSL 은 이같은 JPQL의 단점을 보완하기 위하여 개발된 라이브러리이다.

 

QueryDSL 은 정적 타입을 사용하여, SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크이다.

문자열이나 XML 파일을 통하여 쿼리를 작성하는 대신, QueryDSL 이 제공하는 Fluent API 를 활용하여 쿼리를 생성할 수 있다.

 

QueryDSL 을 사용함으로써 아래와 같은 이점을 얻을 수 있다.

  • IDE가 제공하는 코드 자동완성 기능을 사용할 수 잇다.
  • 문법적으로 잘못된 쿼리를 허용하지 않기에, 구현 단계에서 점검할 수 있다.
  • 동적으로 쿼리를 생성할 수 있다.
  • 코드로 작성하므로, 가독성 및 생산성이 향상된다.
  • 도메인 타입과 프로퍼티를 안전하게 참조할 수 있다.

[QueryDSL 설정 방법 (QDomain)]

 

1. 의존성 추가

  • QueryDSL 의존성 추가 및, APT 플러그인 설정을 해준다 
  • pom.xml
    <!-- QueryDSL -->
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
    </dependency>
    <!-- APT Plugin -->
    <plugin>
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.1.3</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <outputDirectory>target/generated-sources/java</outputDirectory>
                    <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                    <options>
                        <querydsl.entityAccessors>true</querydsl.entityAccessors>
                    </options>
                </configuration>
            </execution>
        </executions>
    </plugin>
  • outputDirectory : Q도메인 클래스가 생성될 경로
  • processor : JPAAnnotationProcessor 가 @Entity 어노테이션으로 정의된 엔티티 클래스를 찾아 쿼리 타입(Q도메인)을 생성
APT?
Annotation Processing Tool 의 약자로, 어노테이션으로 정의된 코드를 기반으로 새로운 코드를 생성하는 기능이다.

 

2. Maven compile

maven compile

 

3. Q도메인 클래스 생성 확인

 

 

** 잘 생성되지 않는다면, 다음과 같은 시도를 해볼 수 있다.

  • 프로젝트 우클릭 -> Maven -> Generate Sources and Update Folders

 

  • 만약 Q도메인을 구현하는 소스에서 인식하지 못한다면, IDE 설정을 조정해야 한다.
    메뉴 -> File -> Product Structure -> Modules -> Mark as -> Sources 선택

 


 

QueryDSL 을 사용하기 위한 설정에 대해 알아보았다.

다음 포스팅에서는, 실제 QueryDSL 을 사용하는 여러 방법에 대해 알아보자.