0. Jmeter란
Apache Software Foundation에서 제공하는 오픈 소스 소프트웨어로, 주로 성능 테스트와 부하 테스트에 사용된다.
웹 애플리케이션이나 서버의 성능을 평가하고, 동시에 여러 사용자가 요청을 보낼 때 시스템이 어떻게 반응하는지 모니터링할 수 있다.
새로운 웹이나 애플리케이션을 개발하는 경우 사용자 유입이 거의 없는데,
실제 사용자가 없더라도 Jmeter를 사용하면 내가 개발한 웹서버가 어느정도의 부하를 견딜 수 있는지 확인할 수 있다.
1. Mac Jmeter 설치
Mac을 이용하는 경우 brew를 이용하여 Java 기반 오픈소스 테스트 도구인 Jmeter를 손쉽게 설치하고 실행할 수 있다.
이제 시간이 많이 지나서 Jmeter가 Intel칩이 아닌 Arm 기반의 m1, m2도 호환을 잘하고 있다.
brew install jmeter
2. Jmeter 실행
과거의 다른 블로그들의 글을 보면
다음과 같은 명령어를 사용하여 jmeter를 실행하거나,
아래와 같은 명령어를 실행했지만 정상적으로 동작하지 않아서 Jmeter 공식 홈페이지에서 직접 파일을 설치해 실행하는 경우가 많다.
open /usr/local/bin/jmeter
하지만 현재는 그러한 문제가 없어져서 터미널에서 jmeter만 치면 자동으로 jmeter 프로그램이 수행된다.
jmeter

3. Jmeter 사용법
Jmeter에는 다양한 기능이 존재하나 간단하게 사용하려면 3단계로 나눠서 테스트해볼 수 있다.
1. Thread Group으로 어느정도의 부하를 줄 지 결정한다.
2. HTTP Request로 테스트할 API를 지정한다.
3. Report 확인
1. Thread Group

초기의 Test Plan에서 Thread Group을 추가할 수 있다.

여기서 중요한 설정은 Number of Threads, Ramp-up period, Loop Count다.
쓰레드 수는 동시 사용자수를 지정하고,
Ramp-up period는 테스트 실행 시 동시 사용자를 얼마나 빠르게 추가할 것인지를 설정한다.
위 예에서는 1초여서, 1초 내에 100명의 사용자를 만든다는 의미이다. 만약 100초로 설정하면 1초에 1명정도 사용자를 늘리게 된다.
Loop Count는 각 사용자가 몇 번씩 요청을 보낼 것인지 지정한다.
2. HTTP Request
Thread Group을 지정하면 이제 가상의 사용자 그룹이 어떠한 Request를 보내도록 만들 것인지 설정해야 한다.


HTTP Request에서 프로토콜(http), ip, port, Http Method, Path를 설정하여
어떤 API를 호출할 것인지 정한다.
3. Report 확인

이제 HTTP Request를 한 결과 통계를 추가하고,
초록색 실행 버튼을 클릭하면 Thread Group 설정을 바탕으로 Http Request를 수행한 결과를 출력할 수 있다.

결과를 해석하면 Thread Group에서 100명의 사용자가 5번의 요청을 보내면서 Response Time이 계속 증가한 것으로 보아
서버에 부하가 계속 생기는 것으로 확인된다.
사용자에게 직접 닿는 서비스라면 API의 response time이 최소 500ms는 되어야 사용자가 불편을 느끼지 않는데,
위와 같은 경우에 100명의 사용자가 동시에 요청을 보내는 상황이 지속되면 response time이 20s까지 늘어나는 문제가 있음이 확인된다.
이러한 경우 API에 부하가 생기는 문제점을 찾아 개선하고(병렬 처리,쿼리 튜닝, 캐시 사용 등을 통해),
그래도 예상 사용자 수의 부하를 견딜 수 없으면 scale up, scale out을 고려해야한다.