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

Backend.dev님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

스프링 데이터 JPA와 JPQL을 함께 사용할 경우 Repository에 대해 질문 드립니다.

20.09.24 22:27 작성

·

342

0

김영한님 안녕하세요.

먼저 JPA를 사용함에 있어서 정말 중요한 지식들을 쉽고 좋은 강의를 통해 공유 해주심에 감사 드립니다.

개인적으로 작은 사이드 프로젝트를 진행 하면서 스프링 데이터 JPA를 공부하는 도중에 궁금한 점이 생겨서 이렇게 질문을 드리게 됐습니다.

현재 간단한 조회 쿼리는 스프링 Data JPA의 쿼리 메서드를 통해 해결하고 있고, 강의에서 언급 하셨던 And가 두 개 이상 붙는 조회 쿼리는 JPQL을 통해 해결하려 하고 있습니다.

이 때 JPQL, EntityManager를 직접 사용하는 Repository와 JpaRepository 인터페이스를 분리해서 사용하는 방법, 그리고 @Query 애노테이션을 활용하여 인터페이스 한 곳에서 JPQL을 함께 관리 하는 두 방법 중 어떤 방식이 더 컨벤션에 가까운지 궁금 합니다.

현재 제가 진행하는 사이드 프로젝트는 너무 작은 규모라 사실 한 인터페이스 안에 모든 로직이 다 들어가도 상관이 없겠지만 정말 규모가 큰 실무에서는 어떻게 하는지,

구체적으로는 JPQL도 객체지향 쿼리이기는 하나, 직접 SQL을 짜야 한다는 관점에 있어서는 Dao같은 것으로 따로 분리 해서 관리를 하는건 아닐까? 라는 의문이 들었습니다.

그리고 결국 JPA는 Spring Data JPA, JPQL, QueryDSL 세 가지 기술을 함께 사용 하게 된다는 말씀을 강의 중에 하셨는데요. 이 세 가지 기술을 모두 적용하는 경우에는 Repository가 어떤 구조로 관리가 되는지 알고 싶습니다.

실무 경험도 없고 아직 한창 공부하는 입장이다 보니 이런 질문이 조금은 낯설게 느껴지실 수도 있다는 생각이 드네요 :)

개발 공부가 쉽지 않아서 종종 지칠때도 있는데 영한님 강의 볼 때마다 긍정적인 에너지를 얻어가며 즐겁게 공부 하고 있습니다.

QueryDSL강의와 이번에 내주신 스프링 강의까지 열심히 잘 듣겠습니다. 감사합니다.

답변 2

2

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

2020. 09. 25. 00:56

안녕하세요. Museop님^^ 좋은 질문입니다.

결국 실용성과 편리함이 중요하더라구요.

우선 Repository 자체가 엔티티를 검색하는 의미도 포함하고 있기 때문에 많이 고민하지 않으셔도 됩니다^^

물론 뒤에 설명드리기는 하는데, 조회쿼리가 정말 많고 복잡한 특수한 경우에는 쿼리 전용 리포지토리를 따로 뽑기도 합니다.

JPQL을 간단하게 작성할 때는 스프링 데이터 JPA가 제공하는 @Query가 매우 편리하기 때문에 간단한 경우에는 이 방법을 주로 이용합니다.

그런데 QueryDSL을 사용하게 되면 조금 뒤에 설명드릴 CustomRepository를 많이 사용하게 됩니다.

QueryDSL이 너무 편하고, JPQL을 코드로 작성할 수 있는 장점도 많아서, 이후에 QueryDSL을 배우고 나면 JPQL을 짜야하는 경우에는 그냥 QueryDSL을 쓰시는 것을 저는 추천드립니다. 그러면 CustomRepository를 많이 사용하게 되실거에요. 어떻게 사용하는지는 강의를 조금만 더 듣다보면 나올꺼에요^^

1

Backend.dev님의 프로필 이미지
Backend.dev
질문자

2020. 09. 28. 00:55

강의를 듣고 배우면서 머릿속에 항상 있던 의문이었는데 영한님 답변으로 많은 부분이 해소가 되었습니다. 말씀 해주신 방향으로 개인 프로젝트도 개선 해보겠습니다! 조언 해주셔서 감사합니다^^