[♻️ refactor] N+1 문제 해결 및 HomeServiceImpl 성능 개선 #178
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📄 Work Description
✨ Problem
🔧 Code Refactoring
QueryDSL Tuple
을 활용해 [홈 - 나에게 딱 맞는 공고 API]의공고 조회
로직 성능을 크게 개선했습니다.Scrap
정보를 한 번에 조회 하도록 변경했습니다.Enum
타입으로 호출하여 컴파일 시 타입체크가 가능하도록 하였고,Color
Enum의 내부 메서드를 통해 색상값을 불러오도록 수정했습니다.isScrapped
로직을 좀 더 단순하게 수정했습니다.🧪 Performance Test & 📄 Report
JMeter
도구를 활용해 성능 테스트를 진행했습니다.k6
,nGrinder
,JMeter
중 HTML 형식의 보고서가 잘 정리되어 있고, 레퍼런스의 규모와 사용성 측면에서 상당히 이점이 존재하는 JMeter를 사용하여 성능 테스트를 진행했습니다.Test Scenario
100
->100
명의 사용자가 동시에 요청을 보냄1
-> 부하테스트를 진행할 것이기 때문에 쓰레드 수들을 나눠서 테스트 하지 않음50000
회 응답할때까지 반복)Setting
localhost
혹은배포된 IP
입력 (본인은 로컬에서 테스트했기 때문에localhost
로 설정함)8080
(본인은 로컬에서 테스트했기 때문에8080
으로 설정함)CREATE
/GET
/PUT
/PATCH
/DELETE
등 선택/api/v1/home?sortBy=deadlineSoon&startYear=2024&startMonth=12
([홈 - 나에게 딱 맞는 공고 API]를 기준으로 설정함)Name
에는Authorization
,Value
에는Bearer 토큰
입력Result (개선 전)
50831
75ms
0.20%
1292.8/sec
6814.23KB/sec
461.17KB/sec
Result (개선 후)
50600
29ms
0.20%
(동일)3272.5/sec
17249.02KB/sec
1167.37KB/sec
최종 Result
Average(평균 응답 속도)
이전:
75ms
개선:
29ms
개선율 = ((75ms - 29ms) / 75ms) * 100 ≈
61.3%
단축→ 평균 응답 시간이 약
61.3%
개선(낮을수록 좋으므로 단축률로 표시)Error %(오류율) :
이전:
0.20%
개선:
0.20%
개선율 = ((0.20% - 0.20%) / 0.20%) * 100 =
0
%→ 오류율 변화 없음
Throughput(처리량) :
이전:
1292.8/sec
개선:
3272.5/sec
개선율 = ((3272.5 - 1292.8) / 1292.8) * 100 ≈
153%
증가→ 처리량 약
153%
향상 (약2.5
배)Received KB/sec:
이전:
6814.23KB/sec
개선:
17249.02KB/sec
개선율 = ((17249.02 - 6814.23) / 6814.23) * 100 ≈
153%
증가→ 수신 데이터량 약
153%
증가 (약2.5
배)Sent KB/sec:
이전:
461.17KB/sec
개선:
1167.37KB/sec
개선율 = ((1167.37 - 461.17) / 461.17) * 100 ≈
153%
증가→ 전송 데이터량 약
153%
증가⚙️ ISSUE
🔗 Reference