Artillery를 사용한 서버 부하테스트
서버 부하테스트 하기 - artillery.io
서버가 부하를 얼마나 잘 견디는지 테스트 하는 것은 중요 한 것 같다. 실 서버 배포를 하기 전 내가 만든 서버가 얼마나 잘 견디는지 확인 하기에 artillery.io 가 좋은 툴 같다.
잘 견디는 서버 작성이 목적이 아니라, 서버 테스트 방법이 목적이기 때문에 빠르게 서버를 작성 할 수 있는 방법으로 작성했다.
나는 Spring Boot를 사용했지만 각자가 만들기가 편한 서버 혹은 직접 사용하는 서버가 있다면 그 서버를 사용하면 좋을 것 같다.
테스트 환경
Google VM Instance를 사용하였고, 서버는 Spring Boot 그리고 macOS에서 작업을 진행했다. 로컬에서 해도 상관 없지만, 배포할 서버를 테스트 할 것이면 로컬말고 GCP나 AWS에서 사용 해 도 될 것 같다.
- Spring Boot
- VS Code
- mac OS
Install node (괜찮다면 nvm까지)
install brew, nvm
-
brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
nvm
brew install nvm
nvm으로 node 설치하기
nvm은 node 버전 설치와 선택, 관리를 용이하게 해 준다. 개인적으로 node를 사용 할 때 편해서 nvm을 사용한다.
nvm install 14 # node 14버전을 설치
위의 명령어를 입력하면 node 14버전이 설치 되는데 , 확인은 node —version
으로 할 수 있다.
node --version
서버 준비하기
다양한 서버들을 사용 할 수 있다.
- Spring Boot
- Django
- Flask
- node
- etc
API 만들기
간단한 테스트 API Controller를 만들었다.
@RequestMapping("/mytest/{input}")
public String getMyTest(@PathVariable("input") String input) throws Exception {
for(int i = 0; i < 100_000; i++) {
input = input*(input+i)
}
return input;
}
jar 파일 만들기
Intellij 를 사용해서 Maven build/deploy 를 사용했다
jar를 사용하기 위해서 아래 명령어가 필요하다
java -jar [jar파일 이름]
서버가 잘 실행이 된다면 기본 포트인 8080포트로 서버가 실행 될 것이다.
테스트하기
artillery 다운로드
npm으로 artillery를 다운 받아 설치한다
npm install -g artillery
artillery 도큐먼트 예제 코드 사용하기
아래 코드는 yml파일이며, 도큐먼트 예제에 기본으로 들어 가 있는 내용들 중 내가 사용 할 것만 남겼다. 아래 링크에서 확인 할 수 있다.
# my-tes
config:
target: "서버주소"
phases:
- duration: 60
arrivalRate: 5
name: Warm up
scenarios:
# We define one scenario:
- name: "test"
flow:
# Get the details of the product:
- get:
url: "테스트 할 url 주소"
my-test.yml을 작성했으면, bash에서 yml파일을 실행 해 준다
artillery run my-test.yml
그럼 설정한 druation과 arrivalRate을 가지고 서버에 부하를 주며 테스트한다.
report.json
테스트가 완료되면, 같은 경로에 report.json이라는 파일이 생성된다.
현재 테스트 한 작업 결과들을 report.json에 저장 해 놓는다
아래의 명령어를 사용하면 report.json에서 나온 결과물을 화면으로 확인 할 수 있다.
artillery report report.json