QueryDSL의 최신 버전(2021.07.22 release)인 5.0 버전을 사용했습니다. 블로그 자료들에는 outdated된 것들이 많아서 최대한 공식 문서와 github을 참조하려고 했습니다. QueryDSL의 github에는 데이터 타입 별 튜토리얼도 있습니다. 저도 언젠가는 이런 오픈소스에 기여할 수 있는 개발자가 되고 싶습니다. 제가 개발자라는 직업에 매력을 느끼는 이유기도 합니다.
QueryDSL 도입 이유
현재 JPQL을 사용하고 있는데 3가지 문제점을 발견하였습니다.
- 문자열(String)로 처리가 되다 보니 띄어쓰기 하나에도 오류가 날 수 있음
- Compile 단계에서 오류 체크가 불가능함
- Runtime 단계에서 오류를 발견할 수 있어 비효율적임
포트폴리오적으로도, 새로운 기술을 써본다는 측면으로도 QueryDSL를 사용해보고 싶었지만 위에 말한 3가지 문제를 해결할 수 있어서 QueryDSL를 도입하기로 결정했습니다. QueryDSL은 아래와 같은 장점을 가지고 있습니다.
- QueryDSL은 모든 쿼리에 대한 내용이 함수 형태로 제공 됨
- 위의 이유 덕분에, complie 단계에서 오류 체크(Type-check)가 가능함
- 커스터마이징하기 쉽고 유연한 코드를 작성할 수 있음
QueryDSL의 단점은 코드 라인 수가 길어진다는 것이 있지만, 함수 형태이기 때문에 가독성이 좋고 IDE의 도움(코드 자동완성)을 받을 수 있다는 게 장점입니다. 2번 이유에 대해서 멘토님께 발표할 때 human error라고 했는데 무슨 말인지 못알아들으셔서 "오타요!" 라고 외치고 말았습니다.
build.gradle 설정하기
buildscript {
ext {
queryDslVersion = "5.0.0"
}
}
plugins {
...
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
...
}
...
dependencies {
// querydsl 추가
implementation "com.querydsl:querydsl-jpa:5.0.0"
implementation "com.querydsl:querydsl-apt:5.0.0"
...
}
// Qtype 생성 경로
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
최신 버전인 5.0.0 버전을 사용하기로 했습니다. 다른 블로그를 참조하실 때 조심하세요! 버전이 다 다릅니다. 저는 지마켓 기술 블로그를 참조했습니다.
낮은 버전이라도 버전 숫자만 바꾸면 되겠지 하다가 엄청 해맸습니다. 기술에 대해서 완전히 이해하고 코드 쓰기로 다짐했으면서 바로 질러버리는 행동을 해서 반성합니다....
Q 클래스
QueryDSL로 쿼리를 작성할 때에는 QType을 이용해서 쿼리를 Type-safe하게 작성합니다.
사이드 바에 있는 Gradle을 클릭하면 아래처럼 윈도우가 열립니다.
Tasks-> other -> complieQuerydsl 을 실행합니다.
Q클래스가 생성된 것을 확인 할 수 있습니다.
Configuration 설정하기
@Configuration
public class QuerydslConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
JPAQueryFactory를 Bean으로 등록해서 프로젝트 전역에서 QueryDSL을 작성할 수 있습니다.
참조문서
'TIL' 카테고리의 다른 글
TIL QueryDSL 마스터가 되다 (조회, 수정, 삭제, Optional) 230208 (0) | 2023.02.10 |
---|---|
TIL JPQL을 QueryDSL로 변경하기 Repository 들 230207 (0) | 2023.02.08 |
TIL WIL 일주일 남음 230205 (0) | 2023.02.06 |
TIL 멘토링 230204 (0) | 2023.02.06 |
TIL 모든 건 개발자 맘대로 230203 (1) | 2023.02.04 |