QueryDSL 엔티티 변경 시 빌드 오류 해결 방법

2025. 3. 1. 20:22DataBase/JPA


QueryDSL 엔티티 변경 시 빌드 오류 해결 방법

🚀 들어가며

QueryDSL을 활용해 쿼리를 작성할 때, 엔티티의 필드(테이블 변수)를 수정하면 기존의 QClass에서 해당 필드를 찾지 못해 빌드가 실패하는 문제가 발생할 수 있다.

이 문제를 해결하려면 변경된 엔티티 필드를 반영한 QClass를 새로 생성해야 하지만, 빌드 과정에서 기존 QClass가 남아 있어 오류가 발생하는 경우가 많다.

기존 방식대로라면, 해당 쿼리들을 주석 처리 → 빌드 진행 → QClass 갱신 → 주석 해제 후 수정이라는 번거로운 과정이 필요하다. 하지만, 이를 자동화하면 불필요한 수작업을 줄이고 더 효율적으로 개발할 수 있다.

이번 글에서는 Gradle 설정을 통해 QClass를 자동으로 갱신하는 방법을 정리해보았다.


1. Gradle 설정 (build.gradle)

(1) 플러그인 및 의존성 추가

다음과 같이 build.gradle에 QueryDSL 관련 의존성을 추가한다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.0' // 프로젝트 버전에 맞게 수정
    id 'io.spring.dependency-management' version '1.1.0'
}

dependencies {
    implementation 'com.querydsl:querydsl-jpa:5.0.0' // 최신 버전 사용
    annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api:3.1.0' // JPA 관련 설정
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api:2.1.1' // @Generated 어노테이션 지원
}

(2) QClass 자동 생성 디렉토리 지정

QueryDSL의 QClass가 자동 생성될 디렉토리를 명확하게 지정해준다.

tasks.withType(JavaCompile).configureEach {
    options.annotationProcessorGeneratedSourcesDirectory = file("$buildDir/generated/sources/annotationProcessor/java/main")
}
  • 기본적으로 $buildDir/generated/sources/annotationProcessor/java/main 경로에 QClass가 생성됨.
  • 프로젝트가 변경될 때마다 QClass를 자동 갱신하도록 설정하여 빌드 오류를 최소화할 수 있다.

2. clean 시 기존 QClass 자동 삭제

기존 QClass가 남아 있어서 빌드 시 오류가 발생하는 경우를 방지하기 위해, 빌드 전에 자동으로 QClass를 삭제하는 작업을 추가한다.

tasks.register('cleanGenerated', Delete) {
    delete file("$buildDir/generated")
}

clean.dependsOn cleanGenerated
  • clean 실행 시 기존 QClass가 삭제되므로, 최신 엔티티 정보를 반영한 QClass가 생성된다.

3. IntelliJ 설정 (QClass 인식 문제 해결)

위 설정을 적용한 후에도 IntelliJ에서 QClass를 인식하지 못하는 경우가 있다. 이를 해결하려면 다음 단계를 수행한다.

🛠 IntelliJ 설정 방법

  1. File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors
    • Enable annotation processing 체크
  2. Build > Rebuild Project 실행
  3. build/generated/sources/annotationProcessor/java/main 폴더를 Mark as Generated Sources Root로 설정

이 설정을 통해 IntelliJ가 자동 생성된 QClass를 정상적으로 인식할 수 있다.


4. 빌드 및 QClass 확인

이제 QClass가 정상적으로 생성되는지 확인해보자.

./gradlew clean build

 

이후 build/generated/sources/annotationProcessor/java/main 경로에 QClass가 생성되었는지 확인하면 된다.


🎯 마무리

이번 설정을 통해 QueryDSL 엔티티 변경 시 발생하는 빌드 오류 문제를 해결할 수 있었다.
기존에는 엔티티 변경 후 쿼리를 주석 처리하고 빌드한 뒤 다시 수정해야 하는 번거로움이 있었지만,
Gradle 설정을 통해 QClass를 자동으로 갱신함으로써 이런 불편함을 제거할 수 있었다.

이 방법을 적용하면 더 효율적으로 QueryDSL을 활용하여 개발할 수 있을 것이다. 🚀

 

'DataBase > JPA' 카테고리의 다른 글

[JPA]@Transactional이란  (0) 2024.09.24
[ETC] Fetch 옵션  (0) 2023.08.28
[JPA] 엔티티 매핑  (0) 2022.12.21
[JPA] 영속성 관리  (0) 2022.12.19