Intro
부하테스트는 여러명의 사용자가 동시에 어플리케이션에 요청을 보내는 상황을 시뮬레이션 하여 다양한 부하조건에서의 응답을 테스트 하는 과정 입니다. 얼마만큼의 요청을 견딜 수 있는지 테스트 함으로서 병목 구간을 찾아 성능 개선을 하거나 서버를 증설하는 등의 필요한 대응을 할 수 있습니다.
다양한 테스트 툴이 있지만, 사용하기 쉬운 JMeter를 활용해 간단한 테스트를 진행 해 보겠습니다.
설치
Apt-cache로 검색을 해 봤더니 이미 apt 저장소에 있길래 apt를 이용해 설치 해 보았습니다.
bash
sudo apt install jmeter

MacOS 유저라면 brew로 설치 하셔도 되고, Apache 홈페이지를 통해 다운 받을 수 도 있기 떄문에 운영체제에 상관 없이 다운 받아 압축을 푸시면 됩니다.
압축 해제 후 unix기반(Linux, MacOS)이라면 jmeter.sh 파일을, 윈도우는 jmeter.bat 파일을 실행 하면

이렇게 실행 되는걸 확인 하실 수 있습니다.
테스트 작성

좌측 두번째 버튼인 Template을 클릭 합니다.

Recording으로 템플릿이 선택 되어 있는데, 바로 Create를 클릭 합니다.

혹시 Thread Group이 없으면 Test Plan을 우클릭 후 Thread Group을 하나 추가 해 줍니다.
이제 Thread Group을 우클릭 하고 Add -> Listener -> Http Request를 클릭해 추가해줍니다.

이제 테스트할 Http 서버의 정보를 입력하는데요, 일단 랜딩 페이지("/")를 두드리도록 해 보겠습니다.
Server Name or IP 에는 localhost를 집어 넣고, 포트 넘버에도 사용중인 번호를 넣었습니다.
그 외 아래의 입력 칸들을 통해 특정 주소나 파라미터를 입력 할 수도 있습니다.

Thread Group 에서 Number of Threads로 사용할 쓰레드(유저) 의 수와 Loop Count로 반복할 횟수를 정해 줍니다.
처음에 테스트 대상이 테스트 진행하는 로컬과 같다는걸 망각하고. Thread를 말도안되게 높게 입력했다가 컴퓨터가 바로 죽어버리더라고요,,, 처음에는 적당히 넣어줍니다.

실행을 하기 전에는 설정을 저장 해 줘야 합니다.
이제 실행 버튼을 누르면 설정 해 둔 대로 부하 테스트를 진행합니다.
확인을 위해 nginx의 로그를 띄워 두었습니다.

정확히 3개의 쓰레드에서 각 3번씩 지정해둔 대로 총 9번의 요청이 보내졌습니다.

Thead 300개로 테스트를 진행 했을 때 CPU 점유가 급격하게 올라간 모습입니다.
지금은 랜딩 페이지에 부하를 주기 때문에 이정도도 별 문제 없지만, WAS 에 로직이 들어간 요청을 하면 훨 큰 부하가 가해집니다.
플러그인 추가

jmeter에 필요한 플러그인이 있다면 위의 사이트에서 다운 받으실 수 있습니다.
원하는 플러그인을 다운 받아서 jMeter가 설치 된 폴더의 /lib/ext 에 넣으면 되는데요

Plugins-manager 를 이용하면 간단하게 체크박스 체크만으로 원하는 플러그인을 설치 할 수 있습니다.
Download 우측의 링크를 클릭해 plugins-manager.jar 파일을 다운 받아 해당 경로에 넣어 줍니다.

저의 경우에는 /usr/share/jmeter 폴더에 jmeter가 설치 되어 있어서 아래의 명령어로 옮겼습니다.
bashsudo mv jmeter-plugins-manager-1.7.jar /usr/share/jmeter/lib/ext
다운 받은 폴더를 해당 폴더에 넣어 주고 jmeter를 재시작 해 줍니다. 저는 이 과정에서 apt 로 설치한 jmeter는 문제가 있어서 저는 jmeter를 새로 다운로드 해서 진행 했습니다.

이제 Options 메뉴에 Plugins Manager가 생겼습니다.

체크박스에서 설치하고자 하는 플러그인을 선택 하고 Apply Changes and Restart jMeter를 클릭하기만 하면 간단하게 새로운 플러그인이 설치 됩니다.
테스트 진행
부하테스트
이번에는 Thread Group에 Listner -> Add -> jp@gc Transaction Per Second를 추가 한 뒤 부하 테스트를 진행 해 그래프를 확인 해 보겠습니다.

TPS: Thread 500개, repeat 3회

TPS: Thread 30개, Repeat 50회
여러가지 테스트를 해본 결과 제 테스트 환경에서는 아래의 TPS(Transaction Per Second)가 측정되었습니다.
| Page\Thread(users) | 10 | 100 | 300 | 500 |
|---|---|---|---|---|
| 랜딩 페이지("/") | 120 t/s | 200 t/s | 65 t/s | FAIL |
| 톰캣이 비즈니스 로직 처리 | 28 t/s | 26 t/s | 25 t/s | FAIL |
Thread는 400개 까지도 큰 문제 없었지만 500이 되면 성공하는 트랜잭션 보다 실패하는 트랙잭션이 더 많았습니다.
쿠키설정
테스트에 로그인 정보를 입력 해야 하기 때문에 Cookie 정보가 필요 할 수 있습니다.
그땐 Thread Group을 우클릭 하고, Add -> Config Element -> HTTP Cookie Manager를 추가 한 뒤에

Add
추가된 Http Cookie Manager를 클릭 하고

Add 를 눌러 필요한 쿠키에 대한 정보를 입력 하고 Save 하면 테스트에 쿠키를 사용 할 수 있습니다.
지금까지 jMeter를 활용해 부하 테스트를 진행 해 보았습니다. 이상입니다.
'Development > DevOps' 카테고리의 다른 글
| Netdata 를 활용한 시스템 모니터링 (0) | 2022.07.27 |
|---|---|
| Nojde.js Web app을 도커 이미지로 만들고 Docker Hub에 올리기 (0) | 2022.05.30 |
| Docker) MariaDB 컨테이너 설치하기. IntelliJ IDEA 로 DB 접속하기 (0) | 2022.03.26 |
| Swagger 활용 API Document 자동 생성 (0) | 2022.02.23 |
| 인코딩 깨진 한글 파일 이름 복구하기 (0) | 2022.01.06 |