-
2025 - QueryDSL 근황Spring Boot/JPA 2024. 8. 22. 22:24
QueryDSL은 동적 쿼리를 type-safe하게 작성할 수 있도록 도와주는 오픈소스 JPQL 쿼리 빌더이다.
3년 전부터 큰 릴리스가 없어, 해외에서는 JOOQ라는 기술보다 사용 선호도가 낮으나,
우리나라에서는 채용 시장과 기업에서 주류로 자리 잡고 있다.
그 이유로는,
인프런 김영한 님의 인터넷 강의로 QueryDSL의 입문 문턱이 상대적으로 낮고,
대기업에서 수백만 트래픽도 안정적으로 운영할 수 있다는 검증과 노하우가 세미나로 공유되어
Java/Spring/JPA를 사용하고 있다면 필수 기술로 여겨지고 있다.
그런데
- 최근 주변에서 QueryDSL 이외의 쿼리빌더를 도입하며 트러블슈팅 문의가 오픈카톡에 채팅으로 올라오곤 한다.
- 현재 QueryDSL에 어떤 일이 벌어지는지 알아본다.
[JOOQ, vs QueryDSL 검색 비교]
미국 한국 [Hibernate 커미터로 유명한 Vladmihalcea의 유튜브에 QueryDSL 관련 문답]
https://www.youtube.com/watch?v=uR0zgQs4Uhc&t=45s - 최근 QueryDSL이 3년 이상 업데이트가 안되어 죽었다고 평가 됨 (- minor 패치만 뜨문뜨문 진행중)
- 최신 hibernate 버전과 호환이 되지 않는 이유로 여러 회사에서 대안 찾음
- OpenFeign팀에서 fork 떠서 직접 업데이트 진행중 (https://github.com/OpenFeign/querydsl)
- 우아한형제들 손권남 님이 해당 프로젝트 fork한 것 포착됨 (https://kwonnam.pe.kr/wiki/java/querydsl)
- OpenFeign팀에서 fork 떠서 직접 업데이트 진행중 (https://github.com/OpenFeign/querydsl)
- 코틀린 + Spring 조합으로 QueryDSL하면 Qclass때문데 kapt라는 플러그인을 써야하는데 kapt가 maintenance 모드에 들어감 (참고 - https://kotlinlang.org/docs/kapt.html)
- 위의 이유로 몇몇 회사에서 미리 대안 찾는 움직임 보임
- JOOQ 도입 - 카카오 개발자가 현업에 JOOQ 도입하고 인터넷 강의 출시 (https://www.inflearn.com/course/실전-jooq-타입세이프-쿼리)
- JDSL(라인에서 제작한 오픈소스) 도입 -(https://spoqa.github.io/2024/05/03/transfer-jdsl.html) / https://www.youtube.com/watch?v=-Kdr6qq6uJI)
- Entity는 Java로 만들어 Kotlin과 혼용하는 정책 : 인프런 - https://tech.inflab.com/20240110-java-and-kotlin/
- 위의 이유로 몇몇 회사에서 미리 대안 찾는 움직임 보임
2025.01
- Spring에서 공식적으로 OpenFeign QueryDsl 지원을 결정 (참고: https://github.com/spring-projects/spring-data-jpa/issues/3335#issuecomment-1914385242) - 아직 지원한다고 했지 적용된 것은 아님
- 현재 QueryDsl 5.1 버전은 CVE-2024-49203 취약점이 있는데 고칠 생각이 없어서, 서비스 중단에 영향 줄 수 있음 (https://github.com/advisories/GHSA-6q3q-6v5j-h6vg)
- OpenFeign QueryDsl 지원을 결정의 결정적인 이유
- SQL/HQL Injection 공격에 취약 - 사용시 order by 절 들어가는 데이터 검증 잘해야 됨
- infobip-spring-data-querydsl도 고려했으나 spring data 팀을 따르며 팀에서 openFeign 기반으로 이동하면 이동할 예정이라고함 (https://github.com/infobip/infobip-spring-data-querydsl/issues/100)
2024.11
- OpenFeign 팀에서 Kapt를 KSP로 할 수 있게 6.9버전부터 시도중 (https://github.com/OpenFeign/querydsl/issues/638)
결론
- 새로 진행하는 프로젝트면 OpenFeign팀 querydsl 사용 해보자!
- 코프링이면 kapt 어떻게 해결되나 유심히 살펴보자- 시간이 허락하면 JOOQ나 blaze persistence를 사용해보자
(단, JOOQ는 무료 버전을 사용하면 build script에서 Datasource에 접근해야하는 부담이 있다. 유료 버전 덕분에 QueryDSL처럼 프로젝트가 사장되지 않는다고 한다.)
- QueryDSL은 JPQL을 대체하고 JOOQ는 SQL을 대체한다는 것을 기억해야한다. QueryDSL의 대체가 되지는 못한다.
반응형'Spring Boot > JPA' 카테고리의 다른 글
QueryDsl projections 자바 Record에 적용하기 (1) 2024.04.23 JPA 주의점 (1) - OSIV false 설정 (open-in-view) (0) 2024.04.19 [JPA] 간단하게 OneToMany 데이터 API 구현하기 - @Embeddable, @Embedded, @ElementCollection 활용하기 (1) 2023.10.15 [JPA] Repository단에 Transactional을 선언하는 이유 (0) 2023.10.05 JPA 애플리케이션 데이터베이스 초기화 (0) 2023.09.17