주차장을 예약할 수 있는 서비스를 만들었다. 이 때, 예약 가능 자리는 5자리뿐인데 10명이 동시에 예약을 진행한다면 어떻게 될까?
의도한대로 프로그램이 동작한다면, 10명이 동시에 예약을 하더라도 5명만 예약이 성공해야 한다.
동시성 제어가 제대로 되고 있는지 확인하기 위해 JMeter를 이용하여 테스트해보자!
JMeter란?
- 아파치(Apache)에서 개발한 성능 테스트 도구로, 웹 애플리케이션, 데이터베이스, FTP 등 다양한 종류의 서버에 대한 성능 테스트를 수행할 수 있다.
- Java로 작성되어 있으며, GUI를 통해 테스트 계획을 작성하고 테스트 결과를 시각적으로 확인할 수 있다.
- 다양한 프로토콜을 지원하고, 분산 테스트를 지원하여 여러 대의 컴퓨터에서 테스트를 수행할 수 있다.
- 사용하기 쉽고 다양한 기능을 제공한다.
JMeter 설치하기
Mac에서 JMeter를 설치하는 방법은 다음과 같다.
-
자바 설치
- Jmeter는 Java를 기반으로 작동하므로 Java가 설치되어 있어야 한다.
-
JMeter 다운로드
- Mac에서는 brew를 통해 간단하게 다운로드할 수 있다.
brew install jmeter
-
JMeter 실행
jmeter
테스트 계획 작성
Thread Group 생성
- Test Plan에서 Thread Group을 생성한다.
- Thread Properties를 설정한다.
-
Number of Threads(사용자 수) : 동시에 작업을 수행할 사용자의 수
-
Ramp-up period(램프업 기간) : 동시에 사용자가 추가되는 데 걸리는 시간
-
Loop Count(반복 횟수) : 각 사용자가 액션을 수행하는데 반복할 횟수
→ Number of Threads = 15, Ramp-up period = 1, Loop count = 1로 설정한 경우, 15개의 사용자가 1초에 걸쳐 1번의 액션을 수행한다.
HTTP Request 작성
- Thread Group에서 테스트할 HTTP Request를 만든다.
- 테스트할 HTTP Request를 작성한다.
- 예약 요청을 보낼 때 Header Authorization에 token값을 넣어줘야하기 때문에 Header Manager가 필요하다.
- 요청을 보낼 때 필요한 Header 값을 설정한다. 각 요청마다 Authorization의 token 값이 다르므로
${token}
으로 표시한다.
CSV Data Set Config 작성
- token에 들어갈 값을 간편하게 지정하기 위해 CSV Data Set Config를 추가한다.
- token 값을 저장한 CSV 파일을 불러와 설정한다.
테스트 실행
- 실행버튼을 눌러 설정한 테스트를 실행할 수 있다.
실행결과
View Results Tree 추가
- 결과를 확인하기 위해 View Results Tree를 추가한다.
동시성 제어가 적용되지 않은 경우
- 10자리가 있는 주차장에서 예약구역은 4자리로, 총 4대만 예약되어야 하나, 15개의 Thread 요청을 동시에 보냈을 때 10대 예약이 성공되어버렸다.
동시성 제어가 적용된 경우
- 10자리가 있는 주차장의 예약구역은 4자리고, 15개의 Thread 요청을 동시에 보냈을 때 4대 예약만 정상적으로 성공된 것을 확인할 수 있다.