반응형
최종 프로젝트 성능 개선
1. 증상
DB에서 불필요한 데이터를 받아오는 Overfetching 문제가 있었다.
이 사소한 문제 하나로도 성능에 차이가 생기지 않을까라는 의문이 들었다.
필요한 칼럼만 select로 가져오면 유의미한 성능에 변화가 있을까??
- Overfetching으로 인한 성능 저하
2. 해결방안
쿼리를 수정하여 불필요한 데이터를 최소화 시키면 성능 면에서 좋은 결과를 얻을 수 있을 거라고 판단하여 쿼리 수정 작업 진행
- 조회 시 필요한 칼럼만을 select하여 불필요한 데이터를 최소화
위와 같은 코드를 QueryBulider를 사용하는 로직으로 바꾸고자 했다.
Repository에서 find를 QueryBulider로 바꿔보았다.
정상적으로 기능이 작동되는 걸 확인했다.
이제 각각 쿼리를 비교해보자
우선 사진을 보면 쿼리는 거의 비슷하다.
첫 번째 사진은 TypeORM의 find 메서드를 사용했을 때 쿼리이다.
두 번째 사진은 TypeORM의 QueryBulider를 사용했을 때 쿼리이다.
쿼리를 보면 의도한 데로 불필요한 칼럼을 제외한 데이터를 잘 받아오는 것을 볼 수 있다.
3. 결과
부하테스트를 진행해 보았다.
부하 테스트는 Jmeter를 이용했고 설정은 아래와 같이 설정해 줬다.

미가입 그룹 리스트 15.49% 개선
1. 리팩토링

2. 기존
우선 생각보다 유의미한 결과가 있어서 놀랐다.
무려 15.5%나 성능이 개선됐다.
여기에 그치지 않고 나는 기존 코드에서 QueryBulider로 변경이 필요해 보이는 몇 개의 코드들을 QueryBulider로 바꾸고 전체적으로 얼마나 유의미한 변화가 생기는지 알고 싶었다.
가입 신청 그룹 리스트 14.08% 개선
1. 리팩토링
2. 기존
소속된 그룹 리스트 8.84% 개선
1. 리팩토링
2. 기존
위와 같이 성능이 어느 정도 향상되는 것을 볼 수 있다.
반응형
'트러블 슈팅' 카테고리의 다른 글
캘린더 조회 Redis를 활용해 성능 개선하기 (0) | 2023.03.27 |
---|---|
검색을 기능 개선을 위한 Elastic Search사용 (0) | 2023.03.21 |
최종프로젝트 성능 개선을 위한 고민 (0) | 2023.03.03 |
형식의 인수는 'string' 형식의 매개 변수에 할당될 수 없습니다. (0) | 2023.02.13 |
NestJs 패키지 설치 무한 로딩 (0) | 2023.02.09 |
댓글