작성
·
542
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
그 강의에서 동적 쿼리 작성은 QueryDSL을 사용해야 한다고 했는데, 강의에서 em.createQuery()로 JPQL을 작성하고 setParameter를 통해 바인딩을 한다면 그게 동적 쿼리 작성하는거 아닌가요???
굳이 QueryDSL을 사용해야할 이유가 있나요??
답변 1
0
안녕하세요. 돈우님, 공식 서포터즈 y2gcoder입니다.
먼저 개인적으로는 동적 쿼리에 대해서 해당 링크(클릭)을 의미한다고 저는 이해하고 있습니다.
위의 방식을 em.createQuery()문에 넣으려면 해당 JPQL문을 작성해야 하고, 파라미터에 따라 다양한 조건문에 따라 JPQL 조건문을 문자열로 추가해주거나 하는 과정이 필요합니다.
문자열로 동적으로 쿼리를 추가하고 제거하는 과정은 오타 등의 실수가 발생할 여지도 너무 크고, 더불어 실수한 것을 알아차리기도 어려워 실행 후에 해당 JPQL문이 사용될 때나 알아차릴 수도 있습니다. 반면에 QueryDSL은 자바 객체를 이용해서 동적 쿼리문을 짤 수 있게 도와주기 때문에 개인적으로는 더 직관적이라고 생각합니다. 그보다 더 큰 장점은 객체로 쿼리를 짜기 때문에 오타를 낼 가능성도 적고, 또 쿼리가 잘못된 부분을 컴파일 단계에서 잡아주는 것도 크기 때문에 이점이 있다고 생각합니다.
이러한 부분은 조회 쿼리가 점점 더 복잡해질 수록 메리트가 있는 기능이라고 생각합니다.
감사합니다.