Spring Boot 3 + JPA/MongoDB + Querydsl 설정

KHS·2023년 5월 14일
0
post-thumbnail

본 글은 build.gradle의 Querydsl 설정에 대해 다룸

Spring Boot 3 주요 변경점

본 글의 주제에 맞는 부분만...

  • Java 17 공식 지원
  • javax 패키지 지원 종료 및 jakarta 패키지 지원 시작
  • Gradle 7.5 이상 지원

예제 프로젝트 구성

  • IDE - VSCode
  • Java 17
  • Spring Boot 3.0.6
    • Spring Web
    • DB 구성
      • Spring Data JPA
        • H2 Embedded
      • Spring Data MongoDB
        • MongoDB 5.0.16
  • Gradle 7.6.1
  • Spring OpenAPI WebMVC 2.1.0
  • Querydsl 5.0.0
    • Spring Boot의 javax 패키지 지원 종료로 jakarta 패키지를 명시해야 함
    • Querydsl MongoDB의 경우 그대로 사용

Gradle 설정

JPA

  • P6Spy의 경우 1.9.0 버전부터 Spring Boot 3 지원
    • 예제 프로잭트 내 P6SpyFormatConfig.java 설정으로 SQL 포맷팅
...
configurations {
  ...
  querydsl.extendsFrom compileClasspath
  ...
}
...
dependencies {
  ...
  implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
  annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
  annotationProcessor "jakarta.annotation:jakarta.annotation-api"
  annotationProcessor "jakarta.persistence:jakarta.persistence-api"
  implementation "com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0"
  ...
}
...

MongoDB

  • MongoDB 드라이버를 Spring과 Querydsl이 각각 가지고 있어 충돌을 방지하기 위해 한 쪽에서 제외해야 함
  • 본 예제에서는 Querydsl에서 제외
...
configurations {
  ...
  querydsl.extendsFrom compileClasspath
  ...
}
...
dependencies {
  ...
  implementation("com.querydsl:querydsl-mongodb:5.0.0") {
    exclude group: "org.mongodb", module: "mongo-java-driver"
  }
  annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
  annotationProcessor "jakarta.annotation:jakarta.annotation-api"
  annotationProcessor "jakarta.persistence:jakarta.persistence-api"
  ...
}
...

본 예제 프로젝트에서는 Gradle Querydsl 플러그인인 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"를 사용하지 않는다.

Querydsl의 Qclass 빌드는 compileQuerydsl 태스크 대신 Gradle dependencies에 정의된 2 개의 annotationProcessor로 진행한다.

이 과정은 프로젝트 빌드(Gradle build 태스크 아님)가 진행될 때 같이 진행되며 Qclass는 /bin/generated-sources/annotations/{프로젝트 패키지}/{Entity 클래스 패키지} 위치에 생성된다.

만약 예전의 방식대로 Querydsl 플러그인을 사용하고자 하는 경우에는 아래 2 개의 패키지를 제거해야한다.

annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

제거하지 않으면 Qclass 중복 생성 오류가 발생하여 빌드가 정상적으로 진행되지 않는다.

모든 소스 코드는 다음 링크에서 확인 가능하다.

JPA 예제 프로젝트

MongoDB 예제 프로젝트

  • MongoDB 프로젝트에는 트랜잭션 처리를 위한 Config와 Docker Compose 파일 및 설정 가이드가 포함되어 있음
profile
Java & Vue ...

0개의 댓글