Notice
Recent Posts
Recent Comments
Link
DevKim
[Refactor] 쿼리 성능 개선 본문
728x90
[ exists 쿼리 개선 ]
해당 id의 존재 여부 확인하는 쿼리
기존의 count 쿼리 날려서 1개 이상 존재하는지 확인하는 코드에서 아래의 코드로 리팩토링
count 쿼리는 전체 데이터를 조회해야하니, 데이터가 많아질수록 성능을 기대하긴 힘들다.
Data Jpa의 exists 메소드 쿼리를 사용해도 내부적으로 count 쿼리가 날라가는 것은 마찬가지이다.
public boolean existsById(Long userId,Long webtoonId){
return jpaQueryFactory.from(myList)
.where(myList.user.id.eq(userId), myList.webtoon.id.eq(webtoonId))
.select(myList.id)
.fetchFirst()!=null;
}
fetchFirst의 null 유무를 체크하면 count -> limit를 사용하도록 변경된다.
select mylist0_.my_list_id as col_0_0_
from my_list mylist0_
where mylist0_.user_id=? and mylist0_.toon_id=?
limit ?
[ Best reviewer 쿼리 최적화 ]
1. QueryDsl 사용 / Jmeter로 부하 테스트 진행
2. Query - review 작성한 개수가 많은 user / user가 작성한 review 총 개수 / review의 전체 like 수 조회
- (기존) - 작성한 review가 가장 많은 user를 내림차순으로 가져와 user로 리뷰를 찾아와 루프돌며 like수 합산
- (변경) - user/reivew개수/like개수 한 번에 조회하는 query로 변경
- (효과) - 부하 테스트에서 기존 응답속도 1250msec에서 395msec로 개선
*기존*


Throughput

*변경 후*

Throughput

728x90
'Spring Project > Webtooniverse' 카테고리의 다른 글
[ webtooniverse ] 내가 만든 서비스는 얼마만큼의 사용자를 견딜 수 있을까? - 서버 스트레스 테스트 (1) (0) | 2021.08.17 |
---|---|
[ webtooniverse ] 프로젝트 구조 변경 - 무중단 배포 도입 (0) | 2021.08.16 |
[Webtooniverse] CI/CD 구조 변경 - GitHub Action (0) | 2021.08.11 |
[Webtooniverse] Jenkins+webhook으로 Build&Deploy 자동화 적용 (0) | 2021.08.11 |
[ Webtooniverse ] 프로젝트에 CI/CD 를 도입하고자하는 이유 (0) | 2021.08.10 |
Comments