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

현루석이님의 프로필 이미지

작성한 질문수

실전! Querydsl

조인 - on절

내부조인 on 사용

해결된 질문

21.10.06 00:02 작성

·

279

1

안녕하세요 영한님 저는 jpa 야생형 로드맵을 수강한 후 토이프로젝트를 진행하고 있는 도중 여쭈어보고 싶은게 생겨서 글을 올리게 되었습니다.

먼저 해당 강의를 통하여  내부조인을 사용하면, where 절에서 필터링 하는 것과 기능이 동일하기 때문에 where절의 의도와 맞게 내부조인에서는 on절이 아닌 where절을 사용하는게 좋다고 이해하였습니다.

아래 사진은 파라미터가 Item의 name에 포함된 경우 해당 Item의 관련된 여러 테이블을 join하여 Shop을 조회하고 싶어서 작성하게 된 코드와 실행했을 때 나타난 쿼리입니다.

처음에는 findByNameContainsV1 메소드를 작성하였지만 Item부터 Shop 사이에 있는 모든 테이블을 조인한 후 where절에서 Item의 name과 같은 Shop을 조회하기 때문에 조금 더 쿼리를 최적화 시킬 수 있다고 생각했습니다.

그래서 findByNameContainsV2 메소드를 작성하게 되었는데요. sql 문법상 join이 where보다 먼저 실행된다고 알고 있었기 때문에 where 대신 on절을 넣어주었습니다. 하지만 테스트를 통하여 on절에도 동적쿼리를 사용할 수 있는지 확인해 보았지만 불가능했습니다. 

아직 개발에 대한 지식이 많이 부족해서 성능 최적화에 대해 잘 모르지만 저는 findByNameContainsV2 메소드가 findByNameContainsV1메소드보다 더 성능이 잘 나온다고 생각이 되지만 QueryDSL은 JPA에서 동적 쿼리를 사용하기 위해 실무에서 도입하게 된 것이므로 굳이 고민하지 않아도 되는 것인지, 아니면 실무에서 동적쿼리가 아닌 경우에 findByNameContainsV2 메소드와 같이 코드를 작성해도 되는지 영한님의 의견을 여쭈어 보고 싶습니다.

답변 1

1

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

2021. 10. 06. 23:03

안녕하세요. dhdustnr0134님

데이터베이스가 이런 부분을 내부에서 최적화해주기 때문에 두가지 방법의 결과 성능은 거의 같다고 보시면 됩니다.

감사합니다.

현루석이님의 프로필 이미지
현루석이
질문자

2021. 10. 07. 10:58

답변 감사합니다!