
이제 K6에 대한 상세한 블로그 글을 마크다운 형식으로 작성해드리겠습니다.
![]()
K6는 Grafana Labs에서 개발한 오픈소스 성능 테스팅 도구로, 현대적인 개발팀을 위해 설계된 개발자 친화적인 부하 테스트 플랫폼입니다. JavaScript로 테스트 스크립트를 작성할 수 있으며, API, 마이크로서비스, 웹사이트의 성능과 신뢰성을 검증하는 데 최적화되어 있습니다.

K6는 단순한 부하 테스트 도구를 넘어서 엔지니어링 팀의 생산성을 향상시키고, 성능 문제를 사전에 예방할 수 있도록 돕는 포괄적인 성능 테스팅 솔루션입니다.
K6는 "개발자 중심"과 "현대적 아키텍쳐"라는 두 가지 핵심 철학을 바탕으로 설계되었습니다:

K6의 아키텍쳐는 다음과 같은 주요 컴포넌트로 구성됩니다:

K6 테스트는 다음과 같은 4단계 라이프사이클을 따릅니다:
// 1. 초기화 단계 (Init Phase)
import http from 'k6/http';
import { check } from 'k6';
export let options = {
vus: 10,
duration: '30s',
};
// 2. 설정 단계 (Setup Phase)
export function setup() {
// 테스트 준비 작업
return { token: 'auth-token' };
}
// 3. VU 실행 단계 (VU Phase)
export default function(data) {
// 실제 테스트 로직
let response = http.get('https://api.example.com', {
headers: { Authorization: `Bearer ${data.token}` }
});
check(response, {
'status is 200': (r) => r.status === 200,
});
}
// 4. 정리 단계 (Teardown Phase)
export function teardown(data) {
// 테스트 후 정리 작업
}

K6는 다양한 실행 환경을 지원합니다:
k6 run script.js
k6 cloud script.js
kubectl apply -f k6-job.yaml

export let options = {
vus: 1,
duration: '1m',
};
export let options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 100 },
{ duration: '2m', target: 0 },
],
};
export let options = {
stages: [
{ duration: '2m', target: 100 },
{ duration: '5m', target: 400 },
{ duration: '2m', target: 0 },
],
};
export let options = {
stages: [
{ duration: '10s', target: 100 },
{ duration: '1m', target: 1400 },
{ duration: '10s', target: 100 },
],
};

import { Counter, Trend, Rate, Gauge } from 'k6/metrics';
let myCounter = new Counter('my_counter');
let myRate = new Rate('my_rate');
let myTrend = new Trend('my_trend');
let myGauge = new Gauge('my_gauge');
export default function() {
myCounter.add(1);
myRate.add(true);
myTrend.add(100);
myGauge.set(50);
}
export let options = {
scenarios: {
users: {
executor: 'ramping-vus',
startVUs: 0,
stages: [
{ duration: '20s', target: 10 },
{ duration: '1m', target: 10 },
{ duration: '20s', target: 0 },
],
},
admins: {
executor: 'constant-vus',
vus: 2,
duration: '2m',
},
},
};
import { check, group } from 'k6';
export default function() {
group('User Login', function() {
let loginRes = http.post('https://api.example.com/login', {
username: 'user',
password: 'pass'
});
check(loginRes, {
'login successful': (r) => r.status === 200,
});
if (loginRes.status === 200) {
group('Protected Resources', function() {
// 로그인 성공 후 실행할 테스트
});
}
});
}
import { browser } from 'k6/experimental/browser';
export const options = {
scenarios: {
browser: {
executor: 'constant-vus',
vus: 1,
duration: '30s',
options: {
browser: {
type: 'chromium',
},
},
},
},
};
export default async function () {
const page = browser.newPage();
try {
await page.goto('https://example.com');
page.screenshot({ path: 'screenshot.png' });
} finally {
page.close();
}
}
# GitHub Actions 예시
name: Load Test
on: [push]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: grafana/k6-action@v0.2.0
with:
filename: test.js

export let options = {
ext: {
loadimpact: {
// K6 Cloud로 결과 전송
projectID: 123456,
},
},
};
k6 run --out influxdb=http://localhost:8086/mydb script.js
K6는 현대적인 소프트웨어 개발 환경에 최적화된 성능 테스팅 도구로, 개발자와 DevOps 팀이 쉽게 접근할 수 있는 JavaScript 기반의 직관적인 API를 제공합니다.
단순한 부하 테스트를 넘어서 브라우저 테스트, 신뢰성 검증, 인프라 테스트 등 다양한 용도로 활용할 수 있으며, CI/CD 파이프라인과의 완벽한 통합을 통해 지속적인 성능 검증이 가능합니다.
특히 마이크로서비스 아키텍쳐와 클라우드 네이티브 환경에서 그 진가를 발휘하며, Grafana 생태계와의 연동을 통해 강력한 모니터링 및 분석 기능을 제공합니다.
현대적인 개발팀이라면 K6를 통해 더 안정적이고 성능이 뛰어난 애플리케이션을 구축할 수 있을 것입니다.