지금 다시 보니, 너무 어그로성 발언이라고 생각함.
QueryDSL의 문제점을 인식할 필요는 있지만, QueryDSL을 그만 사용해야 하는건 아니다.
결론부터 말하면, QueryDSL은 거의 죽은 프로젝트이다.
신규 프로젝트를 개발한다면, Spring에서 지원도 하고 유지보수도 활발한 JOOQ를 사용하자.
JPA + JOOQ를 사용한 개발도 가능하다.
최근 오픈소스 프로젝트에 관심을 가지고 여러 오픈소스를 둘러보던 중, QueryDSL이 생각나서 둘러보았다.
그러나 프로젝트 운영이 잘 되지 않는 모습을 보여주었다.
이슈 페이지를 확인해보면, 많은 버그 라벨이 붙은 이슈들이 최근 몇 달간 해결되지 않고 있다.
최근 이슈를 보니 velo라는 사람이 OpenFeign/querydsl로 프로젝트를 포크해서 유지보수하고 있는 모습을 볼 수 있다.
왜 이런 상태가 되었는지 찾아보고 간단하게 정리해보았다.
그래서 querydsl/querydsl은 새로운 프로젝트에서 도입하기에는 부정적으로 보인다.
그럼 QueryDSL을 사용하지 않으면, 어떤 것을 사용해야 할까?
내 생각에는 크게 두 가지 방법이 있을 것 같다.
아직까지 velo가 유지보수에 적극적인 만큼, 유지보수와 기능 추가 등 활발한 활동을 기대해볼 수 있을 것 같다.
다만 현재 OpenFeign/querydsl은 Star가 200도 넘지 않는다.
사용자들이 많아야 유지보수가 잘 이루어질 텐데, 앞으로 잘 운영될지는 의문이다.
내가 찾아본 대체제 중에서는 JOOQ이 제일 낫다고 생각한다.
현재 관리도 잘 되고 있고, JPA나 SQL도 호환되는 등 QueryDSL과 비슷하게 사용할 수 있기 때문이다.
(querydsl-jpa보다는 더 어려워 보인다.)
심지어 Spring을 사용한다면, Spring Boot에서 제공하는 Starter를 사용할 수도 있다.
또, 인터넷에서 'Spring, JPA, JOOQ' 키워드로 검색하면, QueryDSL을 대체하기 위해 JOOQ을 사용했다는 글이 몇 개 보인다. JOOQ가 QueryDSL의 대체제로서 부족하지는 않아보인다.
(2024. 6. 6. 추가)
JOOQ 공식문서에 따르면, JOOQ는 JPA와 함께 사용하는 것보다는 JOOQ의 고급 기능을 사용하는 것을 권장한다.
하지만 QueryDSL도 고급 기능 사용에 제약이 있고, 복잡한 JPQL을 코드로 관리하기 위해 사용되었던 목적을 고려하면, JOOQ의 고급 기능을 사용하지 못하는 것은 큰 문제가 되지 않는다고 생각한다.
QueryDSL은 이제 새로운 프로젝트에서 사용하기에는 적절하지 않은 선택이 되었다.
대신 유지보수가 잘 되고 있는 JOOQ를 사용하는 것이 더 나은 선택이라고 생각한다.
JPA와의 호환성도 좋고, Spring에서의 지원도 받으니 더욱 신뢰할 수 있다.
다만 나는 아직까지 JOOQ를 사용해본 적이 없다. 🫠
만약 새로운 토이 프로젝트를 시작한다면, JOOQ를 사용할 생각은 있다. (QueryDSL을 사용하지는 않을 계획이다.)혹시 사용해 본 사람이 있으면 댓글에 JOOQ에 관해서 의견을 나눠주면 감사하겠다.
(2024. 06. 14. 추가) 최근 인프런에 JOOQ 강의를 출간하신 설동민 님이 JOOQ를 추천하는 이유에 대한 글을 작성하였다.
JOOQ에 관심이 생긴다면 한 번 읽어보는걸 추천한다.