K6는 오픈 소스 부하 테스팅 도구로, 웹 어플리케이션의 성능을 측정하고 최적화하기 위해 사용된다, JavaScript를 사용하여 테스트 스크립트를 작성하게 되며 가상 사용자를 생성하여 웹 서비스나 API에 부하를 가하는 시뮬레이션을 수행할 수 있습니다, 이때 k6는 개발자 친화적인 인터페이스와 명확한 결과 보고 기능을 제공하기에 CI/CD 파이프라인에 통합하기 용이하여 개발 과정에서 지속적인 성능 모니터링이 가능하게 됩니다,
(해당 포스팅은 Window 환경을 기준으로 진행됩니다)
choco install k6
이 코드를 통해 k6를 설치할 수 있다
이후 본인이 원하는 파일에 JS파일을 생성해 다음과 같은 코드를 작성해주면 된다
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
위 코드는 K6가 정상적으로 작동하는지 확인하기 위한 코드이므로 큰 의미는 없다
이후 이 JS 파일이 위치한 곳으로 이동 한 후

k6 run sample.js (js파일 이름은 원하는대로 설정)
JS파일을 실행해주면 된다,
그럼 k6가 제대로 설치가 되었고 동작하는지도 확인했으니 이번엔
k6 & influxDB & Grafana를 이용해 더욱 시각적으로 정보를 확인할 수 있다
일단 influxDB와 Grafana를 설치하기 위해서는 docker가 이미 설치되어 있어야 한다,
git clone https://github.com/grafana/k6 && cd k6
git submodule update --init
docker-compose up -d influxdb grafana

이렇게 두가지를 설치하고 난 후 docker에 들어가게 되면

다음과 같이 컨테이너가 실행 중인걸 확인할 수 있다,
그리고 이후엔 기존에 있는 JS파일을 수정하여 API를 가져오는데 얼마나 걸리는지
확인해볼 예정이다,
let res = http.get("https://test-api.k6.io/public/crocodiles/1/");
일단 이미 만들어둔 API가 없을 경우 이코드를 사용할 수 있다,
import http from "k6/http";
import { check, sleep } from "k6";
export let options = {
stages: [
{ duration: "1m", target: 10 }, // 1분 동안 사용자 수를 10명까지 증가
{ duration: "3m", target: 10 }, // 3분 동안 사용자 수 10명 유지
{ duration: "1m", target: 0 }, // 1분 동안 사용자 수를 0으로 감소
],
};
export default function () {
// JSON RequestBody 준비
let payload = JSON.stringify({
year: "2023",
month: "12",
});
let params = {
headers: {
"Content-Type": "application/json", // JSON 형식 지정
},
};
let res = http.post("https://api 엔드포인트를 입력하면 된다", payload, params);
check(res, {
"is status 200": (r) => r.status === 200, // HTTP 상태 코드가 200인지 확인
"response time is less than 2000ms": (r) => r.timings.duration < 2000, // 응답 시간이 2초 이내인지 확인
});
sleep(1); // 각 요청 사이에 1초 대기
}
코드를 수정 한 후
k6 run --out influxdb=http://localhost:8086 sample.js
JS파일이 위치한 폴더에서 위 코드를 실행 한 후 localhost:3000으로 이동하면
Grafana로 연결이 가능하다 이후 Grafana에 대시보드를 추가해줘야 한다

Import를 누른 후

Grafana에서 제공하는 k6 로드 테스트 결과를 보여주는 대시보드를 이용하기 위해
2587이라고 "Import via grafana.com"에 입력한 후 Load 해준다

이후에 Import 해주면

이렇게 시각적으로 k6 테스트 결과를 확인할 수 있게된다.

내가 이번에 만든 서비스도 API를 가져와서 테스트 해봤습니다,
이미 배포까지 완료된 상태이고 어차피 작은 규모의 서비스라 큰 데이터를 필요하지도 않고
제손을 어느정도 떠난 상태여서 따로 로컬에서 모의 데이터를 만들어서 API 성능 테스트를 하지 않았습니다.

API 속도는 나쁘지 않은 거 같습니다,
감사합니다.