0. 관련 포스팅
- QueryDSL 설정하기 <현재 포스팅>
- QueryDSL DTO 반환 방법
- QueryDSL 동적 쿼리 적용
- QueryDSL 사용자 정의 레포지토리 적용
- QueryDSL 페이징 적용
1. 개요
QueryDSL 설정하면서 생겼던 오류와 해결 방법에 대해서 적은 포스팅이다.
QueryDSL에 대한 설명은 따로 정리할 생각이고
SpringBoot 2.6, 3.0 버전으로 바뀌면서 생겼던 부분에 대한 내용이다.
현재 기준(23.10.16) QueryDSL 은 5.0 버전이 최신이고,
Java 8 이상 부터 작동한다. (이전 버전의 경우 4.x 버전의 QueryDSL을 사용하면 된다.)
2. build.gradle
아래 gradle 파일은 필요 외 설정은 빼두었으니 QueryDSL에 해당하는 부분만 옮겨 적으면 된다.
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.4'
id 'io.spring.dependency-management' version '1.1.3'
//querydsl plugin 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
...
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// querydsl
// 2.6 under
// implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
// > spring boot 2.6 over 3.0 under
// implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
// implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
//spring boot 3.0 over > querydsl 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
...
}
...
//------- querydsl 추가 설정 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
//------- querydsl 추가 설정 끝
a. 공통
QueryDSL 은 SpringBoot Starter 패키지에 포함되어있지 않아서 Plugin을 추가해준다.
plugins {
...
//querydsl plugin 추가
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
QueryDSL 사용에 있어서 Q도메인 파일이 생성이 되야 하는데,
아래 설정은 Q도메인 파일을 어디에 생성할건지와 기타(Complie 등) 설정에 대한 부분이다.
// 선택사항
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
//------- querydsl 추가 설정 시작
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
//------- querydsl 추가 설정 끝
- querydsl : 추가 설정 옵션(JPA 사용여부, 파일 디렉토리 설정)
- sourceSets : 빌드 시 사용될 SourceSet 위치
- configuration : compileCalsspath를 상속하도록 설정
- compileQuerydsl : QueryDSL 컴파일 시 사용할 설정
컴파일 옵션 관련 내용은 아래 ComplieOptions 클래스 파일을 확인해보면 좋을듯 하다.
b. Spring Boot 2.6 이상
2.6 버전 이상부터는 APT(Annotation Processing Tool) 을 추가하게 되었다.
APT는 한국어로 번역하면 주석처리기라고 하는데 Complie 시점에서 Annotation 코드를 생성하는 기능을 한다고 보면 된다.
우리가 주로 사용되는 Lombok의 @Getter, @Setter, @Builder 등을 생각하면 된다.
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
c. Spring Boot 3.0 이상
Spring Boot 버전이 바뀌어가면서 JPA를 사용할 때도 jakarta 로 바뀐걸 경험이 있을것이다.
QueryDSL 도 마찬가지로 변경이 되었는데 뒤에 부분에 jakarta를 붙여주면 된다.
//spring boot 3.0 over > querydsl 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
여담이지만,
jakarta로 바뀐 이유가 Java가 Oracle에서 Eclipse 제단으로 바뀌면서
기존 JavaEE가 JakartaEE로 변경이 되었다고
JPA도 비지니스 명칭이 Jakarta Persistence Application 으로 바뀌면서 적용된 부분이라고 한다.
3. 마무리
이전에 왜 jakarta로 바뀌었나 의문이었는데,
다른 공부하면서 찾게되어서
원인과 결과가 확실히 있구나 하는 생각이 들었다
Hibernate나 Jooq는 사용해본적이 있는데,
QueryDSL은 이번에 공부해보기로 해서
앞으로 공부하면서 정리된 내용을 조금씩 포스팅해보려한다.
4. 참고자료
Querydsl - Unified Queries for Java
5.0 5.0.0 (22.7.2021) This release of QueryDSL targets Java 8 minimally and comes with various improvements to make QueryDSL ready for the modern Java ecosystem. This version also removes joda-time:joda-time, com.google.guava:guava and com.google.code.find
querydsl.com
[Querydsl] 프로젝트 설정 및 테스트
스프링 부트 2.6 이상은 아래 글을 참고해주세요. 2022.08.23 - [Querydsl] - 스프링부트 2.6 이상 버전에서 Querydsl 설정 방법 모든 소스 코드는 여기 있습니다. Querydsl을 사용하기 위해 프로젝트 설정부터
jaime-note.tistory.com
JPA - QueryDSL
QueryDSL이란? 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이고, Type-safe한 쿼리를 위한 Domain Specific Language이다.즉, QueryDSL은 SQL, JPQL을 코드로 작성할 수 있도록 도
velog.io
Jakarta Persistence & JPA
굳이 알아야 할 필요는 없다. 하지만, 알고 있으면 내가 그만큼 이 기술에 관심이 많다는 뜻이다.외국의 다양한 레퍼런스를 검색하는 도중 J2EE로 구현한 기술들을 발견하게 되었고, 그 기술에서
velog.io
애노테이션 프로세서(Annotation processor)
Annotation Processor란? Annotation Processor는 컴파일 단계에서 Annotation에 정의된 일렬의 프로세스를 동작하게 하는 것을 의미합니다. 컴파일 단계에서 실행되기 때문에, 빌드 단계에서 에러를 출력하게
roadj.tistory.com
'DEV > Spring' 카테고리의 다른 글
[JPA] QueryDSL 동적 쿼리 적용 (0) | 2023.10.26 |
---|---|
[JPA] QueryDSL DTO 반환 방법 (0) | 2023.10.23 |
[JPA] JoinColumns 조회 방식 (0) | 2023.10.12 |
[JPA] Fetch Join 활용 (1) | 2023.10.11 |
[JPA] Fetch Join (0) | 2023.10.05 |