k6로 성능테스트하기
프로젝트 진행 시 꼭 필요한 것! 테스트!
이번에는 k6를 통해서 테스트하는 방법을 정리해볼 것이다.
k6란?
- 부하테스트 및 성능 테스트를 위해 설계된 오픈소스 도구이다.
- javaScript로 작성된 테스트 스크립트를 실행하여, HTTP 요청을 대규모로 시뮬레이션함으로써 시스템의 성능을 측정할 수 있게 해주는 CLI 기반의 부하 테스트 도구.
준비사항
1. WSL 설치
2. Docker 설치
k6 설치
윈도우 기준으로 테스트를 하여 chocolatey를 사용하여 설치했다.
choco install k6
influxDB 설치
docker run -d --name influxdb -p 8086:8086 -v influxdb-storage:/var/lib/influxdb influxdb:1.8
Grafana설치
docker run -d --name=grafana -p 3000:3000 grafana/grafana
k6 실행 시 InfluxDB로 데이터 전송
k6 run --out influxdb=http://localhost:8086/k6 test.js
k6로 작성한 스크립트를 실행 한것에 대한 결과를 influxDB로 먼저 전달.
influxDB와 연결된 Grafana에서 시각화
위 명령어를 실행하였으면
1. localhost:3000을 입력하여 Grafana로 접속한다. (초기 로그인하는 페이지가 나오면 ID : admin, PW : admin으로 접속한다)
2. Grafana의 검색창에 Import dashboard에

2587을 입력한다. 2587은 Grafana 공식 대시보드 라이브러리에서 등록된 고유 ID이다.
-> K6 Load Testing Results 대시보드.
그 이후 검색창에 Dashboards를 입력한 이후 k6 Load Testing Results를 클릭한다.

k6
PS C:\Users\tlseh\바탕 화면\Tutti(k6-Test)> k6 run --out influxdb=http://localhost:8086/k6 test.js
위와 같이 자바스크립트로 테스트 코드를 작성한 위치로 이동하여 k6를 실행한다.
그럼 아래와 같이 Grafana에서 시각화 해주는 모습을 볼 수 있다.

자바 스크립트 코드는 실제 어플리케이션이 아닌 k6의 테스트 코드를 실행했을 때의 결과이다.(아래의 테스트 코드)
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
vus: 10, // 가상 사용자 수 증가
duration: '20s', // 테스트 시간 증가
thresholds: {
http_req_duration: ['p(95)<500'], // 95% 요청이 500ms 이하여야 통과
http_req_failed: ['rate<0.01'], // 실패율 1% 이하
},
};
export default function () {
const res = http.get('https://test.k6.io');
// 응답 상태코드 확인
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 400ms': (r) => r.timings.duration < 400,
});
sleep(1);
}
이제 k6의 테스트 코드가 아닌 실제 프로젝트를 진행한 곳에 적용을 해보자.
먼저 로컬에서 테스트 이후 배포된 서버와 테스트를 진행할 예정이다.
순서
1. 로컬에서 도커를 통해 테스트를 진행한다. (현재 도커에는 influxDB와 Grafana가 띄워져있는 상태)
2. 로컬서버로 테스트를 진행.
3. 도커로 실제 배포된 서버 환경과 동일한 스펙으로 프로젝트를 빌드한 후 다시 테스트
4. 실제 서버와 연동하여 테스트
순으로 진행할 예정이다. 이게 맞는진 모른다. 테스트를 처음 진행해보는 것이라..
위 순서에서 2번에서는 visualVM을 동시에 띄워서 모니터링을 해볼 예정이다.