base
k6은 오픈소스 성능 테스트 도구로, Grafana에서 개발 및 관리하며, CNCF(Cloud Native Computing Foundation)에서 운영하는 신뢰성 높은 부하 테스트 프레임워크입니다. 기존의 JMeter와 같은 성능 테스트 도구와 비교하여, 가볍고 생산적인 성능 테스트를 목표로 설계되었으며, 자바스크립트(JavaScript)를 기반으로 한 테스트 스크립트를 작성할 수 있습니다. k6을 활용하면 API, 웹 애플리케이션, 마이크로서비스 등의 성능을 테스트하고, 성능 저하나 확장성 이슈를 조기에 발견할 수 있습니다.
k6은 Go 언어로 작성된 가벼운 실행 환경을 제공하며, 브라우저 기반 테스트 도구보다 훨씬 낮은 리소스 사용량을 보입니다. 덕분에 대규모 부하 테스트에도 적합하며, CI/CD 파이프라인에 쉽게 통합할 수 있습니다.
테스트 스크립트를 JavaScript로 작성할 수 있어, 개발자 친화적인 환경을 제공합니다. 또한, 다양한 로드 테스트 시나리오(부하 증가, 스트레스 테스트 등)를 손쉽게 정의할 수 있습니다.
k6은 성능 데이터를 Prometheus, Grafana, InfluxDB 등과 연동할 수 있어 실시간 성능 모니터링 및 분석이 가능합니다.
# MacOS
brew install k6
# Ubuntu
sudo apt install k6
k6 run script.js
k6을 실행하면 기본적으로 설정된 부하 조건에 맞춰 성능 테스트가 수행됩니다.
아래는 기본적인 HTTP 요청 테스트를 수행하는 k6 스크립트입니다.
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
const url = 'http://localhost:3000/api/test';
http.get(url);
sleep(1);
}
/**
* 실행 방법:
* $ k6 run script.js
*/
이 스크립트는 http.get(url)을 실행하여 HTTP 요청을 수행하고, 1초 동안 대기(sleep)한 후 다시 반복합니다.
다음 예제에서는 30초 동안 10명의 가상 사용자(VU, Virtual User)를 생성하여 API 부하 테스트를 수행합니다.
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
vus: 10, // 동시 실행 가상 사용자 수
duration: '30s', // 테스트 지속 시간
};
export default function () {
const url = 'http://localhost:3000/api/load-test';
http.post(url, {}, {});
sleep(1);
}
/**
* 실행 방법:
* $ k6 run script.js
*/
위 스크립트를 실행하면 10명의 가상 사용자가 30초 동안 API 요청을 지속적으로 보냅니다.
점진적으로 부하를 증가시키면서, 서비스의 확장성을 평가할 수 있습니다.
import http from 'k6/http';
import { sleep } from 'k6';
export let options = {
vus: 10, // 동시 실행 가상 사용자 수
duration: '30s', // 테스트 지속 시간
};
export default function () {
const url = 'http://localhost:3000/api/load-test';
http.post(url, {}, {});
sleep(1);
}
/**
* 실행 방법:
* $ k6 run script.js
*/
위 스크립트는 초기 10명의 사용자에서 시작하여 50명까지 증가했다가 다시 줄어드는 시뮬레이션을 수행합니다.
테스트를 실행하면 다음과 같은 성능 지표가 출력됩니다.
checks....................: 100.00% ✓ 10 ✗ 0
http_req_duration........: avg=120ms min=95ms max=200ms
http_req_failed..........: 0.00% ✓ 0 ✗ 10
vus......................: 10
성능 테스트 데이터를 실시간 모니터링하기 위해 Grafana, Prometheus, InfluxDB 등의 외부 모니터링 툴과 연동할 수도 있습니다.
k6 run --out influxdb=http://localhost:8086/mydb script.js
이 명령어를 실행하면 성능 데이터를 InfluxDB에 저장하고, Grafana 대시보드를 통해 시각적으로 분석할 수 있습니다.
k6은 단순한 성능 테스트를 넘어, 실제 운영 환경에서 다음과 같이 활용됩니다.
→ k6 스크립트를 CI/CD 파이프라인에 추가하여, 배포 전 성능 회귀 테스트를 자동으로 수행할 수 있습니다.
→ API의 동시 요청 처리량을 확인하고, 필요 시 오토스케일링 전략을 최적화할 수 있습니다.
→ 개별 마이크로서비스의 응답 시간과 트랜잭션 병목을 사전에 식별하여 성능 최적화를 진행할 수 있습니다.
k6은 가볍고 효율적인 성능 테스트 도구로, API, 마이크로서비스, 웹 애플리케이션의 성능을 검증하는 데 최적화되어 있습니다. JavaScript 기반의 테스트 스크립트, 강력한 확장성, 그리고 다양한 모니터링 툴과의 연동이 가능하다는 점에서 기존 성능 테스트 도구 대비 강력한 경쟁력을 갖추고 있습니다.