QDSL로 복잡한 쿼리를 어느정도 커버 가능한가요?
3004
작성한 질문수 6
안녕하세요~
좋은 강의 감사합니다. SPRING DATA JPA 강좌 부터 듣고 있는데 JPA의 장점은 명확하게 알 것 같습니다.
간단하거나 조회조건이 단순할 경우에는 보다 쉽고 강력하게 느껴지는데요.
쿼리가 복잡할 경우 QDSL을 적극 권유 하시는데 QDSL이 커버 가능한 범위가 어디까지일까요?
일단 말로만 접했을 경우에는 기존에 정의한 ENTITY 클래스로 무언가 프로그래밍 방식으로 처리 한다고 생각했는데
별도의 컴파일 과정이 중간에 들어가는것 같습니다.
그리고 그 컴파일후 결과가 앞에 Q라는 접두어가 붙는데 약간의 혼란스러움이 느껴지네요.
그래서 그런지 실제 통계 또는 여러 테이블을 조인 하거나 조건처리가 많은 동적 쿼리같은 경우에는 오히려
MYBATIS처럼 네이티브쿼리 사용하는것이 결과에 대한 확인과 빠른 대응이 이루어 질 것 같은데요.
그부분에 대해서는 어떠한 생각인지 의견을 듣고 싶습니다.
개인적으로는 JAVA와 QUERY는 성격이 다르기 때문에 분리해야 한다는 생각이 강한 개발자인데요.
그래도 JPA의 장점을 알기에 학습을 하고 있는데 학습 하면 할수록 무언가를 결정하기가 어렵네요 ㅎㅎ.
현재 MYBATIS냐 JPA냐 결정해야 하는 상황이라서 질문드려 보았습니다.
답변 1
7
안녕하세요. techsupport2님 좋은 질문입니다^^
저도 SQL을 오래 사용했던 개발자여서 JAVA와 QUERY의 성격이 다르다고 말씀해주신 부분에 공감이 많이 되고, 그래서 저도 과거에 고민을 많이 했습니다.
실무에서 JPA를 사용하면 가장 골치가 동적 쿼리 문제 입니다. MyBatis는 동적 쿼리를 작성하는데 매우 유용한 기술이지요.
JPA로 동적쿼리를 해결하는 좋은 솔루션이 바로 Querydsl 입니다.
Querydsl은 동적쿼리 문제를 자바 코드로 작성할 수 있기 때문에 자바 코드로 할 수 있는, 공통 로직 추출(메서드 추출) 같은 부분이 매우 유연하고, 편리합니다. 그리고 코드 자동완성의 도움도 받을 수 있고, 컴파일 시점에 쿼리 문법 오류도 잡아줍니다.
모양도 JPQL(SQL)과 거의 유사하게 생겨서 개발자들이 금방 적응할 수 있습니다.
그럼 어디까지 지원하는가가 궁금하실 건데요. JPQL로 가능한 부분은 Querydsl로 모두 가능하다고 생각하시면 됩니다. Querydsl은 결국 JPQL이 지원하는 문법까지만 지원합니다.
결국 JPA를 사용하려면 JPQL을 잘 이해하고 한계가 어디까지 인지 알고 사용해야 합니다.
그러면 모든 것을 JPA와 Querydsl로 할 수 있는가? 라고 하면 그렇지 않습니다. 그래서 JPA도 네이티브 쿼리를 열어둔 것이지요. 저도 실무에서 95% 정도는 JPA와 Querydsl로 해결을 하는데 나머지 5% 특히 정말 복잡한 통계성 쿼리는 네이티브 쿼리를 사용합니다. 하이버네이트를 처음 만든 개빈 킹도 100% 모든 쿼리를 다 지원하는게 목표가 아니다라고 했습니다. 현실적으로도 불가능하지요.
그래서 저도 메인을 JPA와 Querydsl로 사용하고, 꼭 필요한 경우에는 SpringJdbcTemplate으로 네이티브 쿼리를 사용합니다. 물론 JdbcTemplate대신에 MyBatis를 사용하셔도 됩니다. 스프링은 JPA와 MyBatis를 함께 사용하도록 지원합니다.
관련해서 jpa mybatis 혼용으로 구글에 검색해보시면 예제 코드들을 찾으실 수 있습니다.
도움이 되셨길 바래요^^
SpringBoot 4.X에서의 Querydsl 설정
0
79
2
querydsl 오픈소스에 대한 질문
0
69
1
예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?
0
108
1
Querydsl 6.X버전에 대해서 어떻게 생각하시나요?
0
314
2
여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요
1
68
1
fetchResults()는 더이상 권장되지 않는다는데 맞나요?
0
159
1
querydsl sum() 메서드 없어요.
0
157
2
build 디렉터리 생성
0
135
2
자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?
0
113
2
현재 Querydsl에서 from절 서브쿼리를 지원하나요?
0
89
1
오타 제보 드립니다.
0
70
2
벌크 연산과 flush, clear
0
76
1
Run As Intellij 로 변경시 Q타입 import 불가
0
87
1
QHello import하기 문제 발생
0
147
2
등록된 함수 보는법(H2Dialect) 질문
0
68
2
5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의
1
195
2
[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??
1
200
1
querydsl 설정 문제
0
222
2
quey dsl 설정부분
0
157
2
count 쿼리 관련 질문입니다!
0
75
1
stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.
0
89
1
답변부탁드리겠습니다.
0
89
2
(OrderSpecifier)관련 내용 어디있을가요
0
64
1
중급문법 벌크연산에서
0
81
2





