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

lee님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

한방쿼리 vs findAll(또는 일부분만 찾은뒤) filter 사이의 성능차이 질문입니다!

해결된 질문

작성

·

220

0

안녕하세요 datajpa로 개발을 하다보니 궁금한 점이 생겼습니다.

어떤 엔티티에서 특정 조건을 만족하는 엔티티만 찾아야 할 때

jpql의 @Query어노테이션이나, queryDsl의 쿼리를 이용해서 where절 조건을 정의하고 찾을 수 있습니다.

하지만 꼭 그렇지 않고 findAll 후에 Stream.filter로 찾아도 되긴 합니다.

 

얼핏 보면 findAll() 이 훨씬 비싸 보이지만

"DB비용이 매우 비싸기 때문에 , 오히려 was에서 추가작업(정렬) 등을 하는게 좋을 때가 있다." 라는 걸 본적이 있어서 질문 드립니다.

jpa를 쓰는게 확실히 여러가지 면에선 편리한 점이 많지만, 결국 비지니스 로직과 관련된 특정한 조건들을 찾기 위해서라면 쿼리가 세분화 되어 나가야 되는데 그런 상황에서 jpa는 어떤 장점을 가지는지는 잘 모르겠습니다.

 

읽어주셔서 감사합니다!

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

lee님의 질문은 한 방 쿼리를 사용하는 것과 findAll() 후에 Java의 Stream.filter()로 필터링하는 방식 사이의 성능 차이에 관한 것입니다. 특히, JPA를 사용할 때 이 두 방식의 선택 기준과 장단점에 대해 궁금해하시는 것으로 보입니다.

이 주제와 관련하여 유사한 질문들이 과거에도 나왔고, 이에 대한 명확한 답변을 제공한 경우가 있습니다. 그 중 몇 가지를 소개해드리겠습니다.

  1. 대용량 필터링의 경우 추천되는 방법이 궁금합니다(JPA의 철학): 이 질문은 대용량의 데이터를 필터링할 때 쿼리 직접 실행(@Query 사용)과 객체를 탐색하며 필터링하는 방식(Java 로직 내부에서 처리) 중 어느 것이 더 효과적인지, 그리고 JPA의 철학에 어울리는 방법인지에 대해 논의합니다. 여기서는 결론적으로 데이터베이스에서 데이터를 최소화해서 조회하는 것이 필요하며, @Query를 사용하는 것이 선호되는 상황에 대해 설명합니다.

  2. Querydsl과 jpql을 선택하는 차이가 궁금합니다.: 이 질문은 Querydsl과 JPQL 중 어느 것을 사용해야 하는지, 그리고 각각을 사용해야 하는 구체적인 상황에 대해 설명합니다. 특히, 동적 쿼리를 사용해야 할 때 Querydsl이 더 유용함을 언급합니다.

lee님의 경우에는, 대부분의 실무 상황에서 데이터베이스 측에서 데이터를 필터링하여 가져오는 것(한 방 쿼리 사용)이 전체적으로 성능 상의 이점을 가지는 경우가 많습니다. findAll()을 사용 후 WAS 단에서 필터링하는 방식은 데이터가 작을 때는 편리할 수 있으나, 대용량의 데이터를 처리할 경우에는 메모리 사용량 증가, 데이터 전송 시간 등의 비효율이 발생할 수 있습니다.

각각의 접근 방식은 상황에 따라 다를 수 있으며, 특히 네트워크 지연, 데이터베이스 부하, 어플리케이션 서버의 리소스 등을 고려해야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lee님의 프로필 이미지
lee
질문자

게시글 추천 보고 해결했습니다 감사합니다~!

 

lee님의 프로필 이미지

작성한 질문수

질문하기