k6는 로컬에서 실행하는편이 스크립트 수정도 더 간단하고, 현실환경에 더 가깝습니다.
먼저 파워쉘에서 k6를 설치합니다.
설치 명령어:
winget install k6 --source winget
backend/scripts/k6/list.js
import http from "k6/http";
import { check, sleep } from "k6";
export const options = {
vus: 5,
duration: "30s",
};
export default function () {
const res = http.get("http://localhost:8080/api/products?page=0&size=12");
check(res, {
"status is 200": (r) => r.status === 200,
"success is true": (r) => r.json("success") === true,
"items is array": (r) => Array.isArray(r.json("data.items")),
});
sleep(1);
}
5명(vus)이 동시에 30초(duration)동안 default 함수를 돌립니다.
실행 명령어:
k6 run scripts/k6/list.js

check: response 검증
http_req_duration p(90), p(95): 사용자 90%, 95% 체감 응답속도
vus: 가상사용자 수
iterations: 반복 수
k6 테스트 결과는 end-to-end 시간이므로, 서버측 모니터링 결과보다 사용자가 실제로 느낀 지연과 더 가깝습니다.
grafana에서 k6 prometheus (Native Histograms) 템플릿을 사용해서 k6 테스트 결과를 그래프로 쉽게 확인할 수 있습니다.

prometheus에서 기본적으로 k6는 스크랩하는 대상이 아니라서, remote write로 밀어넣어야 합니다.
그래서 prometheus에서 수신(receive)를 켜야 합니다.

native histogram을 쓰기 위해 enable했습니다.
엔드포인트는 http://prometheus:9090/api/v1/write 입니다.
실행 명령어:
$env:K6_PROMETHEUS_RW_SERVER_URL = "http://localhost:9090/api/v1/write"
$env:K6_PROMETHEUS_RW_TREND_AS_NATIVE_HISTOGRAM = "true"
k6 run -o experimental-prometheus-rw scripts/k6/list.js
실행 전 k6 실행 환경 설정도 해줘야 합니다.
env 환경설정은 터미널 세션마다 적용됩니다.

output에 Prometheus remote write가 적용됩니다.

grafana k6 template 대시보드에서 k6 테스트 결과를 볼 수 있습니다.
'백엔드 엔지니어링 일지' 카테고리의 다른 글
| 마켓 백엔드 엔진 11 : k6 검색 로드 테스트 - 1 (0) | 2026.05.22 |
|---|---|
| 마켓 백엔드 엔진 10 : 키워드 조합/유사도 검색 - pg_trgm (0) | 2026.05.18 |
| 마켓 백엔드 엔진 8 : 검색 쿼리 튜닝 (EXPLAIN ANALYZE, Index, Page, Slice) (0) | 2026.05.03 |
| 마켓 백엔드 엔진 7 : Prometheus + Grafana 모니터링 (0) | 2026.04.30 |
| 마켓 백엔드 엔진 6 : QueryDSL로 동적 쿼리 적용 (0) | 2026.04.27 |