카테고리 없음

Artillery를 사용한 서버 부하테스트

woolbro 2021. 2. 20. 23:44
반응형

서버 부하테스트 하기 - 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파일이며, 도큐먼트 예제에 기본으로 들어 가 있는 내용들 중 내가 사용 할 것만 남겼다. 아래 링크에서 확인 할 수 있다.

Core Concepts

# 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