개요
API의 성능을 테스트하기 위해 JMeter를 이용하여 API를 테스트해 보고,
추가로 TPS를 구하는 방법에 대해 알아보자.
JMeter 설치는 아래 포스팅에서 확인할 수 있다.
https://hojun-dev.tistory.com/entry/JMeter-설치하기
JMeter 설치하기
개요 JMeter는 기능을 테스트하고 성능을 측정하는 대표적인 소프트웨어이다. 프로젝트의 성능 향상을 위해서는 성능 테스트가 필수적인데, 보통 기능 개발하기에도 바빠 뒷전으로 미루게 된다.
hojun-dev.tistory.com
API 테스트
1. Test Plan에서 우클릭 후 Add > Threads (Users) > Thread Group 추가

2. Thread Group 내 속성 설정

- Action to be taken after a Sampler error : 테스트 중 오류 발생 시 액션
- Thread Properties
- Number of Threads (users): 동시에 실행되는 스레드 수 (사용자 수)
- Ramp-up period (seconds): 모든 스레드가 시작되기까지의 시간 설정
- Loop Count: 해당 테스트 계획을 반복 실행하는 횟수
- ex) "Number of Threads"가 100이고 "Ramp-up period"가 20이며 "Loop Count"가 10인 경우, 100개의 스레드가 실행되는 테스트를 20초 안에 10번 반복 실행하므로 100 / 20 * 10 = 50. 즉 1초에 50명의 가상 사용자가 접속하는 것으로 볼 수 있다.
- Same user on each iteration: 각 스레드가 각 반복마다 동일한 사용자 세션을 유지할지 여부
- Delay Thread creation until needed: 스레드가 필요할 때 생성되도록 지연시킬지 여부
- Specify Thread lifetime: 각 스레드의 생명주기 지정
- Duration (Seconds): 테스트의 총 실행 시간 지정. 설정한 시간이 지나면 테스트가 종료된다.
- Startup Delay (seconds): 스레드 그룹 실행 전 대기시간 지정
3. Thread Group에서 에서 우클릭 후 Add > Sampler > HTTP Request 추가

4. HTTP Request 내 속성 설정

- Web Server
- Protocol [http]: 프로토콜 설정 (http or https)
- Server Name or IP: 도메인 명 혹은 IP (ex. test.com or 127.0.0.1)
- Port Number: 포트 번호 (80 혹은 443은 생략 가능)
- HTTP Request: 요청 설정 (HTTP Method 설정 필요)
- Path: 요청 경로 (ex. /test/hello)
- Parameters, Body Data, Files Upload: 요청에 담을 데이터
4-1. Thread Group에서 에서 우클릭 후 Add > Config Element > 필요 속성 추가 (선택사항)

- HTTP Header Manager: 요청 헤더 설정
- HTTP Cookie Manager: 요청 쿠키 설정
- 기타 등등
5. Thread Group에서 우클릭 후 Add > Listener > Summary Report 추가

6. 실행 후 결과 확인
위의 순서대로 진행하고 실행 버튼을 눌러 실행한 후 Summary Report에서 결과를 확인할 수 있다.

- Samples: 요청 수
- Average: 요청 응답 시간 평균값
- Min: 요청 응답 시간 최솟값
- Max: 요청 응답 시간 최댓값
- Std. Dev.: 요청 응답 시간 표준편차
- Error %: 요청 에러발생 비율
- Throughput: 초당 처리한 요청 수 (TPS)
- Received KB/sec: 초당 서버에서 수신된 데이터 양
- Sent KB/sec: 초당 서버로 전송된 데이터 양
- Avg. Bytes: 요청의 크기 평균
TPS 측정하기
TPS는 Transactions Per Second의 약자로 요청 단위로 초당 얼마나 많은 요청을 처리할 수 있는지에 대한 수치이다.
TPS가 높을수록 시스템이 더 많은 요청을 처리할 수 있음을 의미하기 때문에 성능 테스트에 있어 중요한 지표로 여겨진다.
위에서 구한 리포트에서 TPS는 Throughput 수치를 통해 확인할 수 있다.

JMeter에서 측정하는 TPS는 우리가 설정한 테스트 구성을 가지고 결과를 측정하기 때문에 설정값을 가지고 해당 테스트 상에서 이론상 최대 TPS 값을 구할 수 있다.
최대 TPS 추정식은 아래와 같다.
최대 TPS = (Number of Threads × Loop Count) / Ramp-up period
위에 식에 따라 10초 동안 100번 요청을 5번 반복하도록 테스트를 구성한다면 최대 TPS값은 100 * 5 / 10 = 50이 되는 것이다.
그렇기 때문에 초당 실행되는 스레드 수를 점차 늘려가면서 테스트했을 때 어느 순간 TPS가 증가하지 않는 결과가 나타날 텐데,
그때의 값이 해당 요청에 대한 정확한 TPS 측정값이라고 볼 수 있을 것이다.
마무리
성능으로 시험 성적을 받아야 하는 업무에서 여러 가지 성능 개선을 진행해도 TPS가 증가하지 않아서 애를 먹었는데,
테스트 특성을 생각해 보니 최대 TPS가 정해져 있다는 걸 깨닫고 설정값을 변경하여 해결하였다.
항상 어떤 작업을 하든 작업 환경의 특성을 생각하고 본질적인 고찰을 할 필요가 있다는 것을 다시 한번 깨달았다.
또한 테스트에서의 JMeter 프로그램의 강력함을 많이 느꼈다.
이 글에서 다루지는 않았지만 다양한 테스트 및 플러그인을 통한 정교한 테스트 등등 잘 사용할수록 좋은 프로그램이라고 생각이 든다.
나중에 기회가 되면 다른 테스트를 통해 다시 JMeter에 대한 포스팅을 남기게 될 것 같다.
'Setting' 카테고리의 다른 글
유용한 사이트 정리 (0) | 2023.09.23 |
---|---|
HSTS 설정으로 HTTPS 강제 적용하기 (0) | 2023.08.28 |
JMeter 설치하기 (0) | 2023.07.31 |
[React] localhost https 설정하기 (0) | 2023.07.12 |
repo-lookout 경고 메일 `Exposed Git repository on host "~~~.com"` (0) | 2023.07.10 |