QueryDsl만 이용 VS QueryDsl 과 JPA 기본 제공 api를 혼용
1406
작성한 질문수 9
다이나믹한 쿼리가 필요한 부분에서만 QueryDSL를 이용하고, 그 외에는 JPA에서 제공되는 기본 api(save 등)를 이용하고 있습니다.
그러다 아래와 같은 고민이 생겼습니다...
Q. 향후 어떻게 변할지 모를 "확장성"과 "일관성"을 위해, 처음부터 모든 쿼리를 QueryDsl을 이용하는게 좋을까요...?
그게 아니라면, 지금 처럼 JPA에서 제공되는 기본 api와 혼용하며 이용하다가 필요할 때마다, QueryDSL을 이용하여 다이나믹 쿼리를 생성하는게 맞을까요...
답변 1
1
안녕하세요, henry 님. 공식 서포터즈 y2gcoder 입니다.
Q. 향후 어떻게 변할지 모를 "확장성"과 "일관성"을 위해, 처음부터 모든 쿼리를 QueryDsl을 이용하는게 좋을까요...?
개인적인 의견에서 먼저 결론부터 말씀드리면 지금처럼 Spring Data JPA의 기본 기능과 QueryDsl을 혼용하시는 게 어떠신가 합니다. 최종적인 선택은 henry님께서 하시겠지만 제가 그렇게 생각하게 된 이유들을 적어보겠습니다.
첫번째로 현재 프로젝트의 상황에서 QueryDSL로 통일하는 과정에서 드는 비용을 감수할 가치가 있는지 따져봐야 할 것 같습니다. 먼저 save 를 언급하신 것으로 보아 Spring Data JPA의 기본 API들을 말씀해주시고 계신 것 같습니다. Spring Data JPA가 가지고 있는 강력한 편의 기능들을 포기하면서 QueryDSL로 직접 구현하는 비용과 QueryDSL로 통일했을 때 얻을 수 있는 실질적인 효용 사이에서 고민해보셨으면 합니다.
두번째로 프로젝트에 요구사항이 더 복잡해질수록 일관성을 지키기는 힘들 것 같습니다. 사실 QueryDSL-JPA 는 JPA의 JPQL을 자바 객체로 표현할 수 있는 라이브러리라고 생각합니다. 그래서 저는 해당 라이브러리가 JPA에 의존적이라고 생각합니다. 그런데 영한님께서도 강의나 질문마다 언급하시는 것처럼 실무에서 정말 복잡한 조회 쿼리를 만났을 때는 JPA만으로는 해결하기 어려울 수도 있습니다. 그 때는 JdbcTemplate이나 NativeQuery를 사용해야 하는데, 이런 부분에서 비용까지 지불하며 만들었던 일관성이 깨질 수 있지 않을까 생각합니다.
세번째로는 확장성에 대해서 henry님과 다르게 생각한 것 같습니다. 위에 말씀드렸듯이 QueryDSL-JPA는 JPA에 의존적인 라이브러리라고 생각합니다. 확장성에 대해서 어떤 정의를 내리셨는지 제가 감히 판단하기는 어렵기 때문에 제가 나름대로 생각해봤을 때, 나중에 기술 트렌드가 변화하거나 기존 기술로 요구사항의 변화에 대응하기 어렵게 되는 시기가 왔을 때 적게 변경할 수 있는 것이 확장성이라고 생각했습니다. 그러한 관점에서 QueryDSL-JPA는 결국 JPA에 의존적인 라이브러리이고 의존성이 있는 라이브러리는 그러한 변화로 인한 확장에 더 대응하기 어렵지 않나 생각합니다. JPA는 자바 표준이기 때문에 대체될 가능성이 극히 적다 해도, JPA와 관련한 획기적인 라이브러리가 나와서 QueryDSL-JPA를 대체할 가능성은 충분히 있을 수 있다고 생각합니다.
세가지 다 결국 제가 개인적으로 생각한 바를 말씀드린 것이기 때문에 틀린 정보가 너무 많을 것 같아 그저 참고만 해주셨으면 좋겠습니다:)
다른 것을 다 떠나서 YAGNI라는 유명한 말처럼 정말 필요한 것이 아니라면 좀 더 고민해보시는 게 어떤가 해서 조금 길게 답변을 드려봤습니다.
도움이 되셨으면 좋겠습니다.
감사합니다.
0
제 질문이 다소 난해하거나 추상적인 측면이 있었는데, 좋은 의견을 주시어 정말 감사드립니다!
의견 주신바와 같이, QueryDSL과 JPA의 기본 API를 필요에 따라 잘 혼용하여 이용하는 방식으로 결정하였습니다!!
SpringBoot 4.X에서의 Querydsl 설정
0
106
2
querydsl 오픈소스에 대한 질문
1
82
1
예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?
0
114
1
Querydsl 6.X버전에 대해서 어떻게 생각하시나요?
0
328
2
여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요
1
73
1
fetchResults()는 더이상 권장되지 않는다는데 맞나요?
0
164
1
querydsl sum() 메서드 없어요.
0
163
2
build 디렉터리 생성
0
142
2
자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?
0
116
2
현재 Querydsl에서 from절 서브쿼리를 지원하나요?
0
95
1
오타 제보 드립니다.
0
74
2
벌크 연산과 flush, clear
0
77
1
Run As Intellij 로 변경시 Q타입 import 불가
0
90
1
QHello import하기 문제 발생
0
150
2
등록된 함수 보는법(H2Dialect) 질문
0
70
2
5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의
1
201
2
[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??
1
204
1
querydsl 설정 문제
0
223
2
quey dsl 설정부분
0
159
2
count 쿼리 관련 질문입니다!
0
75
1
stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.
0
90
1
답변부탁드리겠습니다.
0
91
2
(OrderSpecifier)관련 내용 어디있을가요
0
67
1
중급문법 벌크연산에서
0
84
2





