[ETC] Artillery - 서버 부하 테스트

유용한 Service, Tool, Library를 소개해 드립니다.

Artillery

Artillery는 자바스크립트로 된 모던 부하 테스팅 툴킷입니다.

처음부터 Artillery를 사용한 건아니고...

제가 만든 서비스에 대한 부하 테스트가 필요해서 뭐가 좋을까 찾아보다가 먼저 Vegita라는 툴을 발견합니다.

GitHub - tsenart/vegeta: HTTP load testing tool and library. It's over 9000!

이름이 베지터? 하고 들어가 봤더니 진짜 그 드래곤볼 베지터! 와 너무 맘에 든다 이거 쓰면 인싸되는 각? 하고 시도해보려는 찰나..!

간단한 테스트는 지원하는 Command로 할 수 있었지만 약간 플로우를 따라 부하 테스트해 보려 하니 기본적인 GoLang에 대한 지식이 필요했습니다.

그래도 이름이 맘에 들기도 하고 어렵지 않을 거 같아 그냥 쓰려고 했는데, Artillery를 발견하게 됩니다.

사용법

NPM을 이용해 Artillery를 설치해주신 후

# Global 설치가 싫으시면 npx를 이용하셔도 좋습니다. npm install -g artillery

아래와 같이 부하 테스트해 줍니다.

# 10명의 유저가 각각 20번의 요청을 해당 도메인으로 합니다. artillery quick --count 10 -n 20 https://artillery.io/

Test Script 작성

좀 더 자세한 디테일을 위해서 Test Script를 짤 수 있습니다.

테스트 결과에 대해 리포트도 해줍니다.

Test Script는 JSON과 YAML 형식 둘 다 지원합니다.

  • 테스트 시나리오 작성
    시나리오에 따른 테스트가 가능하므로 좀 더 디테일한 부하 테스트가 가능합니다.
    ex) (동시에) 10000명의 SignUp API 요청 -> SignIn API 요청 -> User Data 반환
  • 테스트 데이터 입력
    예를 들어 특정 숫자를 받아서 저장하는 API 부하 테스트 한다고 하면, 랜덤한 값 입력도 가능합니다.
    CSV 파일을 이용해서 특정 입력 데이터를 구체화할 수도 있습니다.

Test Report

테스트 Report를 원할 시 아래와 같은 옵션을 추가해줍시다

artillery run -o testResultFileName.json testTemplate.json

그럼 테스트 결과 파일이 생성됩니다. 하지만 아직 보기가 편하지 않습니다.

# html 파일로 변환 artillery report testResultFileName.json

위 명령어를 사용하시면 반환된 데이터를 기반으로 html 파일이 생성됩니다.

부하로 인한 서버 상태 확인은 물론 불가능합니다만... 그건 서버 내부에서 혹은 Datadog 등을 이용해서 체크 가능합니다.

테스트에 대한 결과를 차트를 이용해 시각화 해준다

Datadog 사용한다면 서버 상태를 보다 편하게 확인할 수 있다.

마치며

프로 버전도 존재하지만 간단한 서버 부하 테스트는 무료 버전으로 충분해 보입니다.

:)