<목차>
아래 환경에서 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
3. Q도메인 클래스 생성 확인
** 잘 생성되지 않는다면, 다음과 같은 시도를 해볼 수 있다.
- 프로젝트 우클릭 -> Maven -> Generate Sources and Update Folders
- 만약 Q도메인을 구현하는 소스에서 인식하지 못한다면, IDE 설정을 조정해야 한다.
메뉴 -> File -> Product Structure -> Modules -> Mark as -> Sources 선택
QueryDSL 을 사용하기 위한 설정에 대해 알아보았다.
다음 포스팅에서는, 실제 QueryDSL 을 사용하는 여러 방법에 대해 알아보자.
'Spring & Spring boot' 카테고리의 다른 글
[Spring Boot] JPA - 8. 연관관계 매핑 (Relation) (0) | 2024.08.13 |
---|---|
[Spring Boot] JPA - 7. QueryDSL 사용 방법 (0) | 2024.08.11 |
[Spring Boot] JPA - 5. JPQL Query Method 쿼리 메서드 (0) | 2024.08.10 |
[Springboot] 테스트 코드 - 8 - Repository Unit Test 리포지토리 단위 테스트 (0) | 2024.08.08 |
[Springboot] 테스트 코드 - 7 - Service Unit Test 서비스 단위 테스트 (0) | 2024.08.07 |