대체로 위와 같은 테스트툴과 모니터링툴을 많이 사용하고 있었다. 현재 서비스를 하고 있는 프로젝트는 아니어서 오픈소스이고 레퍼런스가 많은 것들 위주로 찾아보았다.
테스트툴은 nGrinder가 네이버에서 만들고 국내에는 자료도 많고, 배민에서도 사용하고 있었다. 하지만 k6가 가볍게 CLI로 테스트하기 좋을 듯하여 선택하였다.
모니터링툴 역시 위와 비슷한 이유로 프로메테우스와 그라파나를 선택하였다. 그리고 k6도 그라파나를 이용하여 시각화할 수 있어서 그라파나 하나로 두 곳에서 오는 메트릭을 모두 확인할 수 있다는 장점도 있었다.
테스트툴은 굳이 인스턴스에 설치하지 않아도 되므로 로컬에 설치하였다. 맥을 사용하고 있어 아래 명령어를 사용한다.
$ brew install k6

로컬에 설치하였다면 적당한 폴더에 script.js 파일을 작성한다.
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('https://[테스트하고자 하는 주소]');
sleep(1);
}
터미널에서 아래 커맨드를 입력하면 테스트가 진행되고, 성공하면 아래와 같은 테스트 결과화면을 볼 수 있다.
$ k6 run script.js

간단히 옵션을 주기 위해서 CLI에 직접 변수를 입력할 수도 있고 스크립트 파일에 추가할 수도 있다.
$ k6 run --vus 10 --duration 30s script.js
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('http://test.k6.io');
sleep(1);
}
vus : virtual users, 가상 사용자로 k6 테스트의 기본 개념이다. 기본적으로 병렬로 스크립트를 실행한다.export default function() : 모든 테스트는 default 함수를 가지고 있다. 이 함수는 VU의 진입 포인트 (entry point)가 된다. 옵션 조건에 따라 default 함수는 여러번 실행된다.k6에서 테스트한 결과를 Grafana에서 시각화할 수 있다. 대신 이를 저장하기 위해서는 테스트 결과를 저장할 곳이 필요하다.
공식 홈페이지에서는 InfluxDB에 저장하고 그라파나가 k6 metric을 쿼리할 수 있게 하는방법을 알려준다.
현재 그라파나가 프로젝트과 같은 인스턴스에 설치되어 있고, 그라파나가 DB를 참조하기 위해서는 항상 접근이 가능해야 한다. 따라서 InfluxDB도 같은 인스턴스에 설치하였다.
apt를 이용하여 influxdb 설치한다.
$ sudo apt install influxdb
InfluxDB 서비스를 시작한다.
$ sudo service influxdb start
서비스가 잘 실행되고 있는지 확인한다.
$ sudo service influxdb status
● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enable>
Active: active (running)
Grafana의 설정 - Data sources 탭에서 k6를 선택 후 이름, url, database 정보를 입력한다.

대시보드를 구성하여 k6로 테스트 실행 후 생성된 metric을 실시간으로 시각화할 수 있다. (대시보드 템플릿 적용하기)
k6 run을 하면서 아래와 같은 옵션으로 결과를 저장할 수 있다. /k6db는 위에서 그라파나에 Data source 입력할 때 Database 항목에 적은 이름과 일치해야 한다.
$ k6 run --out influxdb=http://[influxDB 설치한 주소]:8086/k6db script.js
