쿼리 메서드 사용으로 인한 성능 개선

2024. 2. 9. 22:29· 프로젝트/씈크럼 프로젝트
목차
  1. 사실은 5배 비효율적인 코드를 사용하고 있었던 게 아닐까?

현재 유저가 스크럼 생성 가능 여부를 알려주는 메서드입니다.

@Query("SELECT s FROM Scrum s WHERE s.user = :user AND s.deleteDate IS NULL AND s.endTime IS NULL")
List<Scrum> findByUserWithAndDeleteDateIsNullAndEndTimeIsNull(@Param("user") User user);

3개의 조건으로 해당하는 Scrum을 찾아서 List에 담은 다음에 리스트가 비었는지, 아닌지에 따라 true, false를 리턴했습니다.

 

그러나 다시 코드를 천천히 살펴보니, 3개 조건에 해당하는 스크럼이 하나라도 존재하면 false를 리턴해주면 되는 간단한 문제였습니다.

아마 당시에는 해당 방법이 쉬운 방법이라 생각하고 넘어갔던 것 같습니다.

 

그래서 성능 측정을 해보고 개선을 진행해보려고 합니다. 우선 위 쿼리로 찾았을 때 측정 결과입니다.
(DB 데이터 - 2000개, 스레드-20, 램프업-0, LoopCount-100)

평균 668ms가 나왔고, 25~35의 tps가 측정됐습니다.

 

해당 쿼리를 개선하기 위해서 exists를 사용하기로 결정했습니다.

JPQL에서는 SELECT절에 exists를 지원하지 않기에 쿼리메서드를 사용하였습니다.

boolean existsByUserAndDeleteDateIsNullAndEndTimeIsNull(User user);

3개의 조건이 만족하는 데이터가 나오면 바로 true를 리턴하게 됩니다.

 

변경 후 동일한 조건에서 측정 결과입니다.

평균 171ms가 나왔고, tps는 110~130이 측정됐습니다.

 

사소한 귀찮음, 실수로 인해 어떻게 보면 4~5배의 자원 낭비가 이루어졌던 상황입니다.

다행이도 해당 코드에 이상함을 느끼고 성능 개선을 할 수 있었습니다.


사실은 5배 비효율적인 코드를 사용하고 있었던 게 아닐까?

반응형
저작자표시 (새창열림)

'프로젝트 > 씈크럼 프로젝트' 카테고리의 다른 글

QueryDsl로 페이지네이션 도입(검색 API 구현)  (1) 2024.02.17
QueryDSL 도입기  (0) 2024.02.17
조작된 토큰으로 SignatureException 발생 예외 처리  (0) 2024.02.02
Swagger를 배포한 상태로 사용해보기  (0) 2024.02.01
  1. 사실은 5배 비효율적인 코드를 사용하고 있었던 게 아닐까?
'프로젝트/씈크럼 프로젝트' 카테고리의 다른 글
  • QueryDsl로 페이지네이션 도입(검색 API 구현)
  • QueryDSL 도입기
  • 조작된 토큰으로 SignatureException 발생 예외 처리
  • Swagger를 배포한 상태로 사용해보기
indeep
indeep
백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114
indeep
불편한 게 싫어
indeep
글쓰기방명록관리자
전체
오늘
어제
  • 분류 전체보기 (180)
    • 알고리즘문제 (11)
      • 백준 (10)
      • swea (1)
    • CS지식 (27)
      • HTTP 웹 지식 (4)
    • 일상 (1)
    • 스프링 강의(인프런) (4)
    • JAVA 강의(인프런) (11)
    • JAVA (8)
    • 오류해결 (31)
    • Vue (5)
    • 싸피 (4)
    • 스프링 개념 (2)
    • git 관련 (1)
    • 면접 (4)
    • 기타 (14)
    • 프로젝트 (45)
      • RESTAPI 추천 서비스 (34)
      • 씈크럼 프로젝트 (11)
    • 독서 (3)
    • 행사 || 컨퍼런스 (4)
    • 회고 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
indeep
쿼리 메서드 사용으로 인한 성능 개선
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.