개발을 하다 보면 기능 구현에 열중한 나머지 성능 최적화를 놓치는 경우가 많다.
특히, API 요청의 처리 속도를 개선하기 위해 리팩토링을 진행하였고,
그 결과를 바탕으로 성능 테스트 결과를 공유하고자 한다.
성능 테스트 방법
- Postman 을 사용하여 리팩토링 전후 각각 10번씩 API 요청을 보낸다.
- 각 요청에 대한 응답 시간을기록한다.
- 모든 응답 시간을 더한 후, 평균을 계산한다.
- 리팩토링 전후의 평균 응답 시간과 평균 처리량을 비교하여 개선율을 산출한다.
개선율 계산
(리팩토링 전 - 리팩토링 후) / 리팩토링 전 * 100
리팩토링 전
리팩토링 후
로그인
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
591 ms | 598 ms | 611 ms | 609 ms | 604 ms | 599 ms | 638 ms | 609 ms | 612 ms | 627 ms |
Access Token 재발급
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
36 ms | 35 ms | 34 ms | 33 ms | 36 ms | 35 ms | 39 ms | 38 ms | 36 ms | 37 ms |
데이터베이스 수준의 랜덤 샘플링
https://chaereemee.tistory.com/33
🔍 데이터베이스 수준 랜덤 샘플링으로 성능 개선
애플리케이션에서 많은 데이터를 처리하고 이를 랜덤하게 선택해야 하는 경우, 흔히 사용하는 방법이 Collections.shuffle()이다.이 방식은 데이터를 메모리로 불러와 Java 컬렉션에서 랜덤하게 섞는
chaereemee.tistory.com
1) 메인페이지 : 유기동물 슬라이드(최대 18개 기준) ✨ 개선율 : 67.7 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
924 ms | 934 ms | 840 ms | 1019 ms | 984 ms | 961 ms | 1062 ms | 982 ms | 1041 ms | 1004 ms |
365 ms | 315 ms | 259 ms | 298 ms | 320 ms | 271 ms | 306 ms | 311 ms | 335 ms | 369 ms |
2) 메인페이지 : 유기동물 카드(최대 6개 기준) 목록 ✨ 개선율 : 98.9 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
33.26 s | 33.70 s | 30.62 s | 36.13 s | 35.64 s | 35.03 s | 37.54 s | 34.51 s | 37.23 s | 36.29 s |
364 ms | 324 ms | 369 ms | 432 ms | 356 ms | 336 ms | 381 ms | 403 ms | 373 ms | 341 ms |
페이지네이션
https://chaereemee.tistory.com/34
데이터베이스 최적화 및 페이지네이션 적용
데이터가 많아질수록 응답 시간이 길어진다는 것을 위에 이미지로 확인할 수 있다.데이터 양이 늘어날수록 응답 속도가 비례하여 느려진다. 서버 로그 를 확인해보면애플리케이션이
chaereemee.tistory.com
3) 마이페이지 : 좋아요 누른 유기동물 카드(10개 기준) 조회 ✨ 개선율 : 53.3 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
998 ms | 1029 ms | 934 ms | 1428 ms | 837 ms | 875 ms | 841 ms | 787 ms | 841 ms | 820 ms |
468 ms | 453 ms | 424 ms | 441 ms | 460 ms | 416 ms | 387 ms | 448 ms | 445 ms | 442 ms |
4) 마이페이지 : 좋아요 누른 게시물(20개 기준) 조회 ✨ 개선율 : 36.3 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
566 ms | 519 ms | 491 ms | 548 ms | 506 ms | 523 ms | 536 ms | 630 ms | 508 ms | 593 ms |
316 ms | 337 ms | 331 ms | 347 ms | 337 ms | 343 ms | 354 ms | 364 ms | 358 ms | 369 ms |
5) 마이페이지 : 작성한 댓글(20개 기준) 조회 ✨ 개선율 : 51.3 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
444 ms | 453 ms | 431 ms | 470 ms | 447 ms | 434 ms | 468 ms | 457 ms | 425 ms | 462 ms |
219 ms | 218 ms | 204 ms | 236 ms | 196 ms | 205 ms | 227 ms | 233 ms | 221 ms | 228 ms |
6) 마이페이지 : 작성한 게시물(21개 기준) 조회 ✨ 개선율 : 23.2 %
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
337 ms | 331 ms | 336 ms | 349 ms | 320 ms | 366 ms | 363 ms | 358 ms | 338 ms | 318 ms |
261 ms | 260 ms | 263 ms | 258 ms | 267 ms | 267 ms | 263 ms | 250 ms | 267 ms | 268 ms |
결론
리팩토링과 성능 최적화를 통해 API 응답 속도를 크게 향상 시킬 수 있었다.
앞으로도 성능을 지속적으로 개선하고 캐시 적용 등 추가적인 최적화를 통해 더 나은 사용자 경험(UX)을 제공할 계획이다.
'팀프로젝트_PetHarmony' 카테고리의 다른 글
🔍 데이터베이스 최적화 및 페이지네이션 적용 (4) | 2024.09.23 |
---|---|
🔍 데이터베이스 수준 랜덤 샘플링으로 성능 개선 (6) | 2024.09.21 |
Spring Security 기록 (끝) (4) | 2024.09.05 |
Spring Security 기록 (JWT 만료 처리 전) (2) | 2024.09.04 |
⚡️ 트러블 슈팅 - 지연 초기화 (0) | 2024.09.02 |