어플리케이션 성능 테스트할 때 확인해야 할 지표로 응답 시간과 TPS가 있다.
응답 시간은 클라이언트가 서버에 요청을 보내고, 그 요청에 대한 응답을 받을 때까지 걸린 시간을 의미한다.
응답 시간은 처리 시간과 대기 시간으로 나뉜다.
- 처리 시간(Processing Time): 서버가 요청을 처리하는 데 걸린 시간
- 대기 시간(Latency Time): 클라이언트와 서버가 데이터를 주고 받는데 걸린 시간 → 네트워크 지연 시간
TPS는 초당 처리하는 요청의 개수를 의미한다.
TPS가 높을 수록 초당 처리할 수 있는 요청의 수가 많다.
JMeter 설치
https://jmeter.apache.org/download_jmeter.cgi
Apache JMeter - Download Apache JMeter
Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava
jmeter.apache.org
압축 풀고 다음과 같이 실행
cd apache-jmeter-5.6.2
./bin/jmeter.sh

JMeter 테스트하기

테스트계획 > 추가 > 쓰레드들 > 쓰레드 그룹을 추가

쓰레드 속성을 입력하여 테스트할 시나리오를 작성한다.
1,000명의 사용자가 각 10번씩 요청하여 10,000번의 요청이 이루어지는 테스트 시나리오

쓰레드 그룹 > 추가 > 표본 추출기 > HTTP 요청

프로토콜, 서버 이름 또는 IP, 포트 번호, 경로, Body 데이터 입력 → order를 생성하는 api 요청
HTTP 요청 > 추가 > 설정 엘리먼트 > HTTP 헤더 관리자 추가

헤더에 추가할 key-value 입력: Content-type application/json
쓰레드 그룹 > 추가 > 리스너 > 결과들의 트리 보기 + 요약 보고서를 추가

결과 확인
재생 버튼 클릭 후 테스트가 끝날 때 까지 기다린다.
요약 보고서 확인

10000번의 요청을 처리하는데 5초 소요되었다.
TPS(Transaction Per Second)는 처리량에서 볼 수 있듯이 초당 1923개의 요청을 처리했다… ㄷㄷ
DB 연동이 없었기 때문에 이렇게 빠른 처리 성능을 보였다고 생각한다.
결과들의 트리 보기


개별 요청의 request, response와 요청 성공 여부를 볼 수 있다. 모든 요청이 성공했음을 알 수 있다.
어플리케이션 로그 현황

10000번의 로그…
결론
어플리케이션 성능 테스트하는 방법을 드디어 알았다. 이렇게 간단할 줄이야
로컬에서 실행시켰고, DB도 연동하지 않았다.
만약 서버를 배포하고, DB 처리 로직까지 작성하게 된다면, TPS가 급격히 낮아질 것이다.
JMeter 말고도 nGrinder, k6 등 많은 성능테스트 툴이 있다고 한다.
이제 실제 프로젝트에 적용해서 성능 개선 시키는 일만 남았다.
'Backend' 카테고리의 다른 글
| RabbitMQ로 SAGA 패턴 구현 (0) | 2024.08.30 |
|---|---|
| Prometheus & Grafana & Loki 모니터링 (0) | 2024.08.20 |
| Kafka 기본 개념 및 연동 실험 (0) | 2024.08.19 |
| RabbitMQ 기본 개념 및 실습 (0) | 2024.08.19 |
| 대규모 스트림 처리 (0) | 2024.08.18 |