All New QueryDSL - OpenFeign QueryDSL

Drumj·2025년 5월 21일

QueryDSL의 업데이트 상태가??

기존에 공부하고 사용하던 com.querydsl5.1.0 버전도 한 3년만에 업데이트가 되긴 했는데 이마저도 24년이 마지막 업데이트다..

implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

오랜만에 프로젝트를 생성하고 QueryDSL을 사용하기 위해 찾아보니 업데이트가 끊기고 보안 이슈가 생기고 (사실 예전부터 들었던 말이긴 했다. 처음 QueryDSL을 공부했을때가 22-23년도 였으니...) 여튼 난리도 아니다.

jOOQ가 또 떠오르고 있다고 하고 흠... QueryDSL을 대체할 수 있나??? 했더니

jOOQSQLQueryDSLJPQL을 자바 코드로 편리하게 다루는 기술이라고 하니 완벽한 비교는 아닌 것 같다..!! 그래서 그냥 QueryDSL을 계속 사용하기로 결정!!

인프런의 영한님 답변 참고


그래서 OpenFeign QueryDSL은 어떻게 쓰는데?

어... 깃헙에 들어가서 예제를 봤는데 Maven 형식의 예제만 있고 내가 사용하는 Gradle에 대한 예제는 없었다 ㅠㅠ issue에 하나 있긴 했는데 그건 또 코틀린 사용자 기준이고.. 흑흑 ㅠㅠ

결국 Maven 형식의 예제를 찾아보고 막히는 것은 ChatGPT와 함께 해결하기로 했다.

안종혁님의 블로그에 각 모듈의 역할까지 설명이 되어 있어서 아주 수월하게 작업할 수 있었다.

내가 필요한 의존성은 querydsl-jpa,querydsl-apt 이 두 가지!

// OpenFeign QueryDSL
implementation 'io.github.openfeign.querydsl:querydsl-jpa:6.11'
annotationProcessor 'io.github.openfeign.querydsl:querydsl-apt:6.11:jpa'

이 두가지 의존성만 추가해줘도 corecodegen, codegen-utils 도 쏙 들어온다!!

querydsl-aptannotationProcessor로 한 이유는 기존 com.querydsl을 사용할 때도 그렇게 주입을 받았기도 하고 블로그 글을 읽어보니 APT 모듈을 위한 플러그인 추가 부분에 AnnotationProcessor 라고 적혀있길래... ㅎ;; 어라? 그럼 그냥 implementation 하지 말고 AnnotationProcessor 를 사용하면 되지 않을까? 하고 해본 것이다.. ㅎ

그 결과!!

드디어~!! QClass 들이 생성 되었다.

물론 ChatGPT에게도 물어본 결과

// OpenFeign의 QueryDSL (JPA 모듈)
implementation 'io.github.openfeign.querydsl:querydsl-jpa:5.1.0'

// Annotation Processor (JPA용)
annotationProcessor 'io.github.openfeign.querydsl:querydsl-apt:5.1.0:jpa'

요렇게 알려주길래 좀 못 미덥긴 하지만.. 코드 한 번 돌린다고 돈이 드는건 아니잖아??

근데 generated [test] 는 왜 저런거지??? 옛날에는 그냥 generated 로 되어있었는뎅... 흐으음....

추가로 더 구글링 해본 결과

한윤재님 벨로그

를 찾을 수 있었고 해당 글에서 보여주는 코드 역시 나와 거의 동일 하다.


annotationProcessor 가 좀 줄어든 것 같은데?

이전 com.querydsl을 사용할 때는 annotation-apipersistence-api가 있었는데??

io.github.openfeign.querydsl를 사용할때는 해당 코드가 없다! 뭐야뭐야?? 뭔가 업데이트가 있었나??

ChatGPT에게 물어본 두 의존성의 의미와 왜 이제는 추가하지 않아도 되는지에 대한 답변이다.

야! 내가 너 한 번 믿어도 되겠냐???

??? : 응~ 안 믿으면 너가 어쩔건데~

오호라 이거봐라?? annotation-apipersistence-api가 들어있긴 하네??

근데 이게 정확하게 querydsl을 추가할 때 자동으로 들어온건지는 모른다..
혹시 몰라서 querydsl 의존성을 모두 제거하고 확인해봐도 그대로 남아있어서... 흐으음...

여튼 일단 들어와있으니 추가 안해도 되겠지??

지금은 querydsl 세팅만 했으니 추후에 사용중에 문제가 생기면 다시 확인해보자!


설정 끝

이제 업데이트가 꾸준히 이루어지는 안정적인 QueryDSL을 사용할 수 있게 되었다.

관련 라이브러리들이 다 추가되고 QClass 까지 생성된 것을 확인했으니 세팅은 끝이라고 봐도 되겠지..??

이제 다음에 실제로 QueryDSL을 사용하면서 기록을 남겨보도록 하자!


최종 코드

dependencies {
    //...중략

    // OpenFeign QueryDSL
    implementation 'io.github.openfeign.querydsl:querydsl-jpa:6.11'
    annotationProcessor 'io.github.openfeign.querydsl:querydsl-apt:6.11:jpa'
}

def querydslSrcDir = 'src/main/generated'

sourceSets {
    main {
        java {
            srcDirs += querydslSrcDir
        }
    }
}

tasks.withType(JavaCompile) {
    options.annotationProcessorGeneratedSourcesDirectory = file(querydslSrcDir)
    options.compilerArgs += [
            "-Aquerydsl.entityAccessors=true",
            "-Aquerydsl.excludedPackages=java,javax"
    ]
}

0개의 댓글