시나리오
k6 시나리오 — 워크로드와 트래픽 패턴 설계하기
부하 테스트에서 "어떻게 트래픽을 흘려보낼지"는 전체 설계의 핵심이에요. k6의 시나리오(scenarios) 는 가상 사용자(VU)와 반복(iteration) 스케줄을 아주 세밀하게 설정할 수 있게 해줍니다. 한 스크립트 안에 여러 시나리오를 선언해서 서로 다른 워크로드를 동시에 흘려보낼 수도 있어요. 이번 글에서는 시나리오를 구성하고, executor(실행기)로 로드를 모델링하는 방법을 알아볼게요.
출처: k6 공식 문서 — Scenarios 원본 URL: https://grafana.com/docs/k6/latest/using-k6/scenarios/
시나리오의 장점
시나리오를 쓰면 부하 테스트 구성이 훨씬 유연해져요.
- 테스트 조직이 쉽고 유연해요. 같은 스크립트에 여러 시나리오를 선언하고, 각각이 서로 다른 자바스크립트 함수를 독립적으로 실행하게 할 수 있어요.
- 더 현실적인 트래픽을 흉내 내요. 시나리오마다 전용 executor가 제공하는 distinct한 VU·반복 스케줄링 패턴을 쓸 수 있습니다.
시나리오 구성하기
시나리오는 options 객체의 scenarios 키로 구성해요. 시나리오 이름은 스크립트 안에서 유일하면 아무 이름이나 쓸 수 있는데, 이 이름이 결과 요약이나 태그 등에 그대로 나타납니다.
export const options = {
scenarios: {
example_scenario: {
// name of the executor to use
executor: 'shared-iterations',
// common scenario configuration
startTime: '10s',
gracefulStop: '5s',
env: { EXAMPLEVAR: 'testing' },
tags: { example_tag: 'testing' },
// executor-specific configuration
vus: 10,
iterations: 200,
maxDuration: '10s',
},
another_scenario: {
/*...*/
},
},
};
시나리오 executor
각 k6 시나리오의 VU 워크로드는 executor 가 스케줄링해요. executor는 테스트가 얼마나 오래 실행되는지, 트래픽이 일정한지 변하는지, 워크로드를 VU 수 기준으로 모델링할지 도착률(arrival rate) 기준으로 모델링할지(즉 open/closed 모델) 결정합니다. 시나리오 객체에는 executor 속성에 미리 정의된 executor 이름 중 하나를 반드시 지정해야 해요. executor 선택에 따라 k6가 로드를 어떻게 모델링하는지가 달라져요.
- 반복 횟수 기준으로.
shared-iterations: VU들이 반복을 나눠서 수행해요.per-vu-iterations: VU마다 설정한 반복 횟수를 각자 수행해요.
- VU 수 기준으로.
constant-VUs: VU를 일정한 수로 유지해요.ramping-vus: 설정한 스테이지에 따라 VU 수를 늘리거나 줄여요.
시나리오 예제
아래 예제는 두 시나리오를 같은 스크립트에 둔 모습이에요. shared_iter_scenario는 10개의 VU가 100번의 반복을 나눠서 돌고, per_vu_scenario는 10초 후부터 VU당 10번씩 반복합니다.
import http from 'k6/http';
export const options = {
scenarios: {
shared_iter_scenario: {
executor: 'shared-iterations',
vus: 10,
iterations: 100,
startTime: '0s',
},
per_vu_scenario: {
executor: 'per-vu-iterations',
vus: 10,
iterations: 10,
startTime: '10s',
},
},
};
export default function () {
http.get('https://test.k6.io/');
}
실행하면 요약 출력이 시나리오별로 쪼개져 보여요.
execution: local
script: scenario-example.js
output: -
scenarios: (100.00%) 2 scenarios, 20 max VUs, 10m40s max duration (incl. grace
ful stop):
* shared_iter_scenario: 100 iterations shared among 10 VUs (maxDurati
on: 10m0s, gracefulStop: 30s)
* per_vu_scenario: 10 iterations for each of 10 VUs (maxDuration: 10m
0s, startTime: 10s, gracefulStop: 30s)
전체 출력에는 기본 요약 메트릭도 함께 들어가요. 어떤 부하 패턴을 테스트해야 하는지에 따라 executor를 고르면, k6가 그 패턴을 정확히 스케줄링해 줍니다.
더 알아보기
- 공식: k6 — Scenarios
- 공식: k6 — Executors