Spring Web MVC기반 API 서버와 Spring WebFlux 기반 API 서버의 성능을 테스트하기 위해 JMeter를 사용하여 테스트한다.
✅ JMeter 설치

brew install jmeter
명령어를 통해 jmeter를 설치한다. 나는 기존에 설치했기 때문에 이미 설치되어있다고 떴다. (설치하는 데 시간이 굉장히 오래 걸린다..)✅ JMeter 실행
기존에 JMeter를 설치했다면 터미널에서
jmeter
를 입력하여 GUI모드를 실행한다.
✅ 쓰레드 그룹 생성

Test Plan이라고 써있는 부분을 우클릭하여 Thread Group을 추가해준다.
✅ 쓰레드 그룹에서 테스트 조건 설정

- Number of Threads (users)
- 테스트할 사용자 수
- Ramp-up period (seconds)
- 가상 사용자(가상 사용자 또는 스레드 그룹)가 시간에 따라 시스템에 점진적으로 로드를 증가시키는 기간
- 테스트를 시작할 때부터 시스템에 동시에 갑작스럽게 과도한 부하가 가해지는 것을 방지하기 위함
- 예를 들어, 1000명의 가상 사용자를 10초 동안 램프 업하도록 설정하면, 매 초마다 100명의 가상 사용자가 시스템에 추가된다.
- Loop Count
- 각각의 스레드(가상 사용자)가 지정된 횟수만큼 테스트를 반복
- 무한에 체크하면 정지하기 전까지 계속해서 요청을 보냄
✅ HTTP 요청 생성

마찬가지로 Thread Group을 우클릭하여 HTTP Request를 추가해준다.
✅ HTTP 요청 설정

요청을 보낼 Protocol, IP, Method, Path 등을 설정하면 된다.
✅ Listener 등록 (테스트 결과 보기)

HTTP Request 부분을 우클릭하여 Listner에서 Summary Report를 추가해준다. 필요하다면 다른 것을 추가해서 봐도 좋다!
✅ 테스트할 서버 실행

나는 MVC 기반과 WebFlux 기반 API 서버의 성능을 테스트하기 위해 각각에 대한 Controller, Service, Repository를 구현했다.
✅ 테스트 실행

초록색 시작 버튼을 누른 뒤 Summary Report를 확인해보면 요청에 따라 서버 성능에 대한 지표가 나타날 것이다.
✅ 테스트 Disable

테스트를 하고싶지 않은 쓰레드 그룹이나 HTTP 요청은 Disable을 하여 테스트 대상에서 제외시킬 수 있다.
✅ UPDATE Method 사용 시 주의사항


UPDATE와 같이 Request Body에 json 타입으로 데이터를 전송할 경우 HTTP Header Manager를 해당 요청에 따로 추가해서 Name에는 Content-Type, Value에는 application/json을 넣어줘야 한다.
✅ Duration 설정
일정 시간 동안만 테스트를 수행하고 싶다면, 타이머를 적용하고 싶은 Thread Group에 Duration 설정을 추가하면 된다!

→ 30초 동안만 테스트를 진행하고 싶으면 Duration에 30을 입력하면 된다.
✅ Summary Report

- #Samples : 서버에 요청한 횟수
- Average : 평균응답시간(ms)
- Min : 최소응답시간(ms)
- Max : 최대응답시간(ms)
- Std. Dev. : 표준편차
요청에 대한 응답시간의 일정하고 안정적인가를 확인, 값이 작을수록 안정적이다.
- Error : Error율(%)
- Throughput : 처리량(초당 처리건수)
- KB/sec : 처리량(초당 처리 KB)
Share article