저와 같이 nGrinder를 사용하려다가 자바 17 버전이라 jMeter를 사용하러 오신 분들 더욱 환영합니다 >_<
무슨 말인지 모르시겠다면 이전 글 보기 .. >> 부하 테스트를 해보자 ! - nGrinder
그럼 이번엔 jMeter 설치와 사용법에 대해 포스팅해보겠습니다.
0️⃣ 설치
https://jmeter.apache.org/download_jmeter.cgi
위 링크로 접속하셔서 zip 파일을 다운 받아줍니다.
그리고 아래 명령어를 입력해 터미널에 접속해 압축을 풀어주고 실행해주면 됩니다.
unzip apache-jmeter-5.6.2.zip
cd apache-jmeter-5.6.2/bin
./jmeter
그럼 이런 창이 뜨면 ! 설치는 끝
1️⃣ API 설정
본격적으로 테스트를 하기에 앞서, 테스트할 API를 설정해줘야합니다.
제가 부하테스트를 해보려는 이유는 무한 스크롤 구현할 때 offset 방식으로 하는 게 좋을지, cursor 방식으로 하는 게 좋을 지 고민되어서 입니다.
보통 무한 스크롤을 구현할 때에는 cursor 방식으로 하는게 좋다고 알려져있는데, 이번 프로젝트에서는 정렬 조건이 좀 복잡해서 offset으로 하는게 나을 것 같다는 생각이 들어서 어떤 방식으로 배포하는게 좋을지 직접 두 눈으로 확인해보려 합니다.
우선 Add > Threads > Thread Group 에서 그룹을 생성해줍니다.
그럼 이런 창이 뜰텐데요
- Number of Threads : 500
- Ramp-up period : 1
- Loop Count : 3
저는 다음과 같이 값들을 설정했습니다. 500명의 유저가 1초에 3번씩 api 요청을 시도하겠도록 하겠다는 것입니다.
다음으로 그룹내에 호출할 API를 추가해줘야합니다.
아래와 같이 테스트할 API 규격에 맞게 빈칸을 채워주면 됩니다.
제가 테스트할 API는 spring security를 통해 로그인한 유저만 접근할 수 있도록 설정되어 있습니다. 따라서 jMeter 상에도 로그인한 상태여야 API 테스트가 가능합니다.
저는 이를 위해 HTTP Header Manager와 HTTP Authorization Manager를 추가해줬습니다.
HTTP Header Manager 에서는 API 요청 시 Header에 넣어야할 값들을 넣어주면 됩니다.
HTTP Authorization Manager에서는 소셜 로그인을 통해 로그인한 경우 사용하는 것입니다. 저는 소셜로그인으로 유저를 로그인하기 때문에 추가해주었습니다.
2️⃣ 테스트 결과 분석
결과를 확인하기 위해 리스너를 추가해줍니다.
저는 결과를 Report로 보기 위해 Summary Report 창을 추가해주었습니다.
( + View Results Tree 를 추가하면 API Request/Response 과정을 상세하게 볼 수 있습니다. )
초록색 화살표를 누르면 테스트가 실행됩니다.
처음에 실행한 테스트는 1500번 실행되도록 설정해보았습니다.
Report를 살펴보니 Throughput에는 성능 차이가 거의 없고, Average(평균 응답 시간)은 미세하게 offset 버전이 빠른 것을 확인해 볼 수 있었습니다.
조금 더 눈에 띄는 차이를 확인해보고 싶어 Thread와 Loop Count를 아래와 같이 늘려보았습니다.
마찬가지로 Average는 미세하게 offset이 빠르고, Throughput에는 성능차이가 거의 같은 것을 확인해볼 수 있었습니다.
테스트를 통해 무한 스크롤이니까 no-offset 방식이 좋아 !! 라는 가설을 깨버릴 수 있었습니다.
저처럼 정렬 조건이 복잡한 경우에는 no-offset 방식이 더 좋은 성능을 보이는 것이 아닌 경우도 있습니다. 주변에서 뭐가 좋대 ! 뭐가 좋대 ! 하는 것에 휩쓸리지 않고, 각자 프로젝트 상황에 맞는 방식으로 진행하는 것이 좋은 것 같습니다.
저처럼 API 구현 방식이 고민될 때, 부하테스트를 통해 두 눈으로 결과를 확인해보는 것 강추합니다 !!!
그럼 제 글을 끝까지 읽어주셔서 감사합니다 :)
'Server' 카테고리의 다른 글
Linux iptables로 특정 포트만 허용하기 (0) | 2024.01.16 |
---|---|
Spring boot Actuator + Prometheus + Grafana를 이용한 서버 모니터링 시스템 구축 (0) | 2023.10.16 |
부하 테스트를 해보자 ! - nGrinder (0) | 2023.09.12 |
배포 도전기 - Spring boot + Docker + EC2 (0) | 2023.06.30 |
Docker로 MariaDB 실행하고 터미널로 접속하기 (1) | 2023.05.01 |