k6 Reference
k6 성능 테스트 레퍼런스
k6 Reference 소개
k6 레퍼런스는 Grafana Labs가 개발한 오픈소스 부하 테스트 도구 k6의 완전한 검색 가능 가이드입니다. k6 스크립팅의 8가지 주요 영역을 모두 커버합니다: 기본(default 함수 export, options 설정, stages[] 단계별 부하, sleep(), group()), HTTP(GET/POST/PUT/DELETE 요청, 배치 요청, 요청 헤더·인증), 체크(상태 코드·JSON 본문·응답 시간·헤더 check()), 임계값(http_req_duration 퍼센타일, http_req_failed 비율, 커스텀 메트릭 임계값), 시나리오(constant-vus·ramping-vus·constant-arrival-rate·per-vu-iterations·shared-iterations), 메트릭(Counter·Trend·Rate·Gauge 커스텀 메트릭 타입, 빌트인 HTTP 메트릭), 프로토콜(WebSocket·gRPC·멀티파트 파일 업로드·SharedArray 테스트 데이터), CLI(k6 run 플래그, 환경 변수, 웹 대시보드, k6 cloud). 모든 항목에 실제 JavaScript 예제가 포함되어 있습니다.
k6은 JavaScript나 TypeScript로 부하 테스트를 코드로 작성하려는 개발자와 SRE를 위한 주요 성능 테스팅 도구입니다. CI/CD 파이프라인에서 성능 회귀를 감지하고, SLA를 검증하며, 프로덕션 배포 전에 스트레스·소크 테스트를 실행하는 데 널리 사용됩니다. Kubernetes, 마이크로서비스, REST API, GraphQL, WebSocket, gRPC를 사용하는 팀이 모두 k6로 시스템이 실제 트래픽 부하에서 올바르게 동작하는지 검증합니다.
레퍼런스는 k6의 개념적 구조를 반영한 8개 카테고리로 구성되어 있습니다. ramping VU 시나리오의 정확한 구문을 찾거나, 오류 수를 추적하는 데 어떤 메트릭 타입을 써야 할지 확인하거나, 테스트 결과를 JSON 파일로 저장하는 CLI 플래그를 찾을 때 모두 동작하는 코드 예제와 함께 바로 답을 얻을 수 있습니다.
주요 기능
- 핵심 스크립트 구조: export default function, export const options, stages 기반 램핑, sleep() 생각 시간, group() 논리적 그룹화
- HTTP 요청 메서드: http.get(), http.post(), http.put(), http.del(), http.batch() 병렬 요청, params.headers 인증
- check() 함수로 상태 코드·JSON 응답 본문·응답 시간 임계값·응답 헤더 어설션
- 퍼센타일 표현식을 사용한 임계값: p(95)<500, p(99)<1500, http_req_failed rate<0.01, 커스텀 메트릭 임계값
- 시나리오 실행기: constant-vus, 단계별 목표를 가진 ramping-vus, RPS 테스팅용 constant-arrival-rate, per-vu-iterations, shared-iterations
- 커스텀 메트릭 타입: 누적 카운트 Counter, 타이밍 분포 Trend, 합격/불합격 비율 Rate, 순간 값 Gauge
- 프로토콜 지원: 이벤트 핸들러를 가진 WebSocket, proto 로딩을 통한 gRPC 클라이언트, 멀티파트 파일 업로드, 데이터 기반 테스팅용 SharedArray
- CLI 레퍼런스: k6 run 플래그(--vus, --duration, --out json/csv, -e), K6_WEB_DASHBOARD, k6 cloud, __VU/__ITER 빌트인 전역변수
자주 묻는 질문
k6란 무엇이며 JMeter나 Locust와 어떻게 다른가요?
k6는 JavaScript로 테스트를 작성하는 개발자 중심 부하 테스트 도구입니다. XML 설정과 GUI를 사용하는 JMeter나 Python을 사용하는 Locust와 달리, k6 스크립트는 고성능 Go 런타임에서 실행되는 일반 JavaScript 파일입니다. CI/CD 파이프라인과 자연스럽게 통합되며, 버전 관리를 지원하고, Grafana 및 InfluxDB와 네이티브 호환되는 상세 메트릭을 생성합니다.
k6에서 VU와 도착률(arrival rate)의 차이는 무엇인가요?
VU 기반 실행기(constant-vus, ramping-vus)는 동시에 실행 중인 가상 사용자 수를 제어합니다. 각 VU는 가능한 빨리 default 함수를 반복합니다. 도착률 실행기(constant-arrival-rate)는 각 반복이 얼마나 걸리는지와 관계없이 단위 시간당 시작하는 반복 횟수(예: 초당 30 req)를 제어합니다. 고정 RPS 부하 패턴을 시뮬레이션할 때 도착률을 사용하세요.
k6에서 성능 임계값을 설정하는 방법은?
options export에 thresholds 객체를 추가하세요. 예: `thresholds: { "http_req_duration": ["p(95)<500"], "http_req_failed": ["rate<0.01"] }`. 임계값이 위반되면 k6는 테스트 실행을 실패(종료 코드 99)로 처리하여 CI/CD 합격/불합격 게이트와 쉽게 통합할 수 있습니다.
k6에서 각 가상 사용자마다 다른 데이터를 사용하는 방법은?
k6/data의 SharedArray를 사용해 JSON이나 CSV 파일을 한 번 로드하고 메모리 복사 없이 모든 VU에서 공유하세요. `users[__VU % users.length]`로 레코드를 고르게 분배하세요. SharedArray 데이터는 읽기 전용이며 default 함수 외부의 초기화 단계에서 초기화됩니다.
k6로 WebSocket이나 gRPC 엔드포인트를 테스트하는 방법은?
WebSocket은 "k6/ws"에서 ws를 임포트하고 open, message, close 이벤트 핸들러와 함께 ws.connect()를 사용하세요. gRPC는 "k6/net/grpc"에서 grpc를 임포트하고 클라이언트를 생성하여 .proto 정의를 로드한 후 서비스 메서드와 요청 페이로드로 client.invoke()를 호출하세요.
k6에서 만들 수 있는 커스텀 메트릭은 무엇인가요?
k6는 4가지 커스텀 메트릭 타입을 제공합니다: Counter(누적 합계, 예: 총 오류), Trend(최솟값/최댓값/평균/퍼센타일, 예: 커스텀 응답 시간), Rate(참/거짓 값의 비율, 예: 성공률), Gauge(가장 최근 값 추적, 예: 활성 세션). `new Counter("name")`으로 생성하고 테스트 함수 내에서 .add()를 호출하세요.
CI/CD 파이프라인에서 k6 테스트를 실행하는 방법은?
CI 환경에 k6를 설치하고 `k6 run --vus N --duration Xs script.js`를 실행하세요. 스크립트에 임계값을 정의하면 k6가 실패 시 0이 아닌 종료 코드로 종료합니다. `--out json=results.json` 또는 `--out csv=results.csv`로 보고용 메트릭을 저장하세요. 클라우드 기반 분산 테스팅에는 Grafana Cloud k6 계정으로 `k6 cloud script.js`를 사용하세요.
k6에서 부하를 점진적으로 증가시키는 방법은?
options의 stages 배열(단축 표기)이나 ramping-vus 시나리오 실행기를 사용하세요. {duration, target} 객체의 배열을 정의하세요: 0 VU에서 시작하여 최고 부하까지 램핑하고, 주요 테스트 기간 동안 유지한 후 다시 0으로 램프 다운합니다. 이렇게 하면 현실적인 트래픽 패턴을 시뮬레이션하고 즉각적인 급증으로 시스템을 충격주는 것을 피할 수 있습니다.