인프런 커뮤니티 질문&답변

햐호호님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 검색 기능 개발

Specification 대비 QueryDSL의 장점이 어떤것이 있을까요?

해결된 질문

작성

·

3.9K

6

JPA를 사용한지 얼마 안되는 초보인지라 이해가 잘 되지 않아서 그러는데요..ㅜㅜ
저는 이전에 동적쿼리를 생성하기 위해 JpaSpecificationExcutor를 extends하여 조회시에 사용해왔습니다. (findAll을 하면서 인자값으로 넘겨주면 알맞는 쿼리가 생성되더라구요)
물론 queryDSL를 사용하면 더 간단히 처리되는 건 알겠으나 join이 없는 일반 원 테이블 조회에서도 specification과 같은 처리보다 queryDSL을 적용하는 것이 더 적합할지 궁금하여 질문드립니다.

답변 3

10

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요 햐호호님^^

개인적으로 실무에서 JpaSpecificationExcutor를 사용하는 것은 권장하지 않습니다.

JpaSpecification 자체가 결국 JPA가 제공하는 Criteria로 이루어지는데, JPA의 Criteria는 조금만 복잡해져도, 실무에서 사용이 정말 어려워 집니다. JPA를 잘 사용하는 저도 한참을 들여다 봐야 코드가 읽히더라구요.

그래서 제가 사용하는 모든 프로젝트에서는 JPA Criteria는 사용을 금지합니다. 대신에 Querydsl을 적극 활용하도록 합니다.

추가로 질문주신 join이 없는 일반 원 테이블 조회라고 해도, 결국 요구사항들어가고 프로젝트가 커지면 join도 들어가야 하고, 점점 복잡해질 확율이 매우 높습니다^^!

결론은 JPA Criteria(JpaSpecificationExecutor 포함)을 사용하지 마시고, 단순해도 다른 방법으로 푸시는 것을 권장합니다!

감사합니다^^

5

김영한님의 프로필 이미지
김영한
지식공유자

네 도움이 되어드려서 기쁩니다^^

1

햐호호님의 프로필 이미지
햐호호
질문자

빠르고 상세한 답변 정말 감사합니다 김영한님!