일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 자바
- 제태크
- 백준
- 주식
- 오버라이딩
- 객체지향
- 금리인하
- 그리디 알고리즘
- S&P500
- Java
- 잉여현금흐름
- XLF
- 프로그래머스
- mco
- 현금흐름표
- 미국주식
- 기업분석
- 접근제어자
- javascript
- 인플레이션
- FCF
- etf
- 금리인상
- 무디스
- StringBuffer
- 주린이
- 배당성장
- 다형성
- 알고리즘
- object
- Today
- Total
오늘의하루
[SourceCode.io] 5차 성능 테스트 : 분석 및 해결책 본문
개선 사항
분석 결과 반환: 기존에는 문서를 소스 코드에 번호를 붙여 작성하여 클라이언트에게 제공했습니다. 그러나 이제는 JSON 형식으로 문서를 만들어 전달하는 방식으로 변경되었습니다. 이 변경으로 인해 시간 복잡도가 O(N^2)에서 O(N)으로 개선되어 응답 속도가 향상되었습니다. 이 과정에서 Gson과 Jackson 중 어떤 라이브러리를 선택할지 고민했고, JMH를 이용하여 밴치마크를 수행한 결과 Jackson이 Gson보다 약 2.6배 정도 더 빠르다는 결론을 얻었습니다. 따라서 Jackson을 선택하였습니다. 이와 같은 과정을 통해 코드의 가독성을 유지하고, 응답 시간을 개선하는 데에 기여하였습니다.
Benchmark Mode Cnt Score Error Units
JSONBenchmark.gsonSerialization avgt 10 0.517 ± 0.076 ms/op
JSONBenchmark.jacksonSerialization avgt 10 0.197 ± 0.014 ms/op
비동기 처리: 비동기적으로 처리를 하도록 변경하여 응답 시간을 개선하였습니다. 이는 서버에서 클라이언트의 요청을 동시에 처리할 수 있도록 하는 것입니다. 이전에는 요청을 순차적으로 처리하여 대기 시간이 길어지는 문제가 있었으나, 이를 비동기 처리로 변경함으로써 대기 시간을 줄이고 전체적인 성능을 향상시켰습니다.
환경 설정
- Apache JMeter 버전: 5.6.3
- Spring Boot 버전: 3.2.2
- Java 버전: 17
시나리오
JMeter를 사용하여 100명의 가상 사용자가 동시에 100MB 크기의 ZIP 파일을 서버에 첨부하고, 해당 파일을 분석한 후 결과를 반환하도록 시나리오를 작성했습니다.
테스트 결과
부하 테스트를 수행한 결과, 사용자의 요청 후 응답까지의 평균 속도와 서버가 처리할 수 있는 양에 집중해야 한다는 것을 확인했습니다.
- Throughput 비교
- 1차 테스트: 10.2/min
- 2차 테스트: 1.5/sec
- 3차 테스트: 2.1/sec
- 4차 테스트: 2.3/sec
- 5차 테스트: 2.4/sec
- Average 비교
- 1차 테스트: 351,514ms
- 2차 테스트: 60,821ms
- 3차 테스트: 42,222ms
- 4차 테스트: 40,259ms
- 5차 테스트: 30,359ms
결과 분석
- 4차 테스트에 비해 Throughput은 약 4.35% 증가했으며, Average는 약 24.54% 개선되었습니다.
- 3차 테스트에 비해 Throughput은 약 14.29% 증가했으며, Average는 약 28.07% 개선되었습니다.
- 2차 테스트에 비해 Throughput은 약 60.00% 증가했으며, Average는 약 50% 개선되었습니다.
- 1차 테스트에 비해 Throughput은 약 1314.71% 증가했으며, Average는 약 91.35% 개선되었습니다.
문제 파악 및 해결 방안 정확한 문제 파악을 위해 모니터링을 철저히 진행하여 병목 현상과 GC(Garbage Collection)가 너무 많은 시간을 소비하는 문제를 파악하고 해결할 것입니다. GC가 너무 자주 발생하거나 오랜 시간이 소요된다면, 메모리 누수를 확인하고 효율적인 메모리 관리를 위해 적절한 조치를 취할 필요가 있습니다.
'Spring > SourceCode.io 프로젝트' 카테고리의 다른 글
Load Balancing을 통한 성능 최적화와 AWS의 활용 (0) | 2024.04.08 |
---|---|
[SourceCode.io] 4차 성능 테스트 : 분석 및 해결책 (0) | 2024.04.03 |
[SourceCode.io] 3차 성능 테스트 : 분석 및 해결책 (0) | 2024.04.02 |
[SourceCode.io] 2차 성능 테스트 : 분석 및 해결책 (0) | 2024.03.29 |
[SourceCode.io] 1차 성능 테스트 : 분석 및 해결책 (0) | 2024.03.28 |