[JPA] 정렬하고 가져와서 조회할 지, 가져와서 정렬하고 조회할 지 그것이 문제로다.

이동엽·2023년 3월 15일
2

jpa

목록 보기
5/8
post-thumbnail

🌱 고민 거리

특정 회원이 찜한 병원 목록을 가져오는 과정에서 정렬이 필요함을 느꼈다.
이때, 아래 두 방식 중 어느 방식이 더 빠를까?


고민 거리를 꺼내기에 앞서 프로젝트 구성

  • 플랫폼에는 회원병원이 존재한다.
  • 플랫폼에는 찜하기 기능이 존재 → 회원은 (자주 가는, 혹은 관심이 가는) 병원을 찜할 수 있다.
    • → 따라서 회원별 찜한 병원 목록이 존재하며, 마이페이지에서 확인할 수 있다.

💡 첫 번째 방식 : SELECT 쿼리에 ORDER BY를 함께 날려, 결과 목록을 리턴하기

  • 이 방식의 경우, 조회 로직은 아래와 같다.

→ 이 방식은 정렬하는 SQL 문을 직접 작성해야 한다는 특징이 있다.


💡 두 번째 방식 : SQL로 찜한 병원 목록만 가져오고, 로직에서 정렬하기

  • 조회 로직

특정 회원의 찜한 병원 목록을 가져온 뒤, Java의 컬렉션 내장 메소드를 이용해 로직에서 정렬하였다.


💡미리 보는 결론!

💡 특별한 이유가 없다면 SQL로 직접 정렬 로직을 작성해 가져오자.

  • 작업들을 굳이 나누어보면,
    • SQL로 정렬하여 가져올 경우 → DB에서의 작업 1번 뿐인데,
    • SQL로 목록만 가져와 로직으로 정렬할 경우 → DB에서의 SELECT 작업 + 로직 정렬 작업 = 2번이다.

→ 이를 성능 차이로 직접 보고 느끼기 위해 테스트 코드를 작성하였다.


💡 테스트 코드 작성

→ 두 방식의 테스트는 동일한 테스트 데이터를 가진 조건으로 진행하였습니다.


  • SQL로 목록만 조회한 뒤, 로직에서 정렬하는 방식

  • SQL로 정렬한 목록을 가져오는 방식

💡 테스트 결과로 보는 성능 차이!

SQL로 정렬된 목록을 가져올 경우, 10ms밖에 걸리지 않는 작업이
SQL로 목록을 가져온 후, 로직에서 정렬할 경우 239ms나 소요된 것을 볼 수 있습니다.

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

2개의 댓글

comment-user-thumbnail
2023년 3월 16일

이건 정말 유용하네요 감사합니다.

답글 달기
comment-user-thumbnail
2023년 4월 6일

알고리즘이 이래서 필요하군요

답글 달기