k6를 사용한 성능 테스트에서 개방형 및 폐쇄형 모델
Source: Dev.to
기본 개념
성능 테스트에서 모델은 실행 주기 동안 시스템이 가상 사용자(VU)의 도착 및 종료를 제어하는 방법을 정의합니다.
- 폐쇄 모델 – VU 수가 고정됩니다. 각 VU는 이전 반복이 끝난 후에만 다음 반복을 시작합니다. 동시성은 일정하게 유지됩니다.
- 열린 모델 – 새로운 VU가 일정한 비율로 도착하며, 이미 활성화된 VU가 무엇을 하고 있는지와 무관합니다. 이 동작은 사용자가 지속적으로 도착하는 실제 시스템에서 일어나는 상황에 더 가깝습니다.
모델 선택은 계획된 테스트의 의미를 완전히 바꿉니다. 일부 시나리오에서는 동시에 활성화된 사용자의 수를 제어하고 싶고, 다른 경우에는 필요한 사용자 수와 관계없이 특정 요청률(RPS)이 유지되도록 보장하고자 합니다.
폐쇄 모델
스크립트 예시
export const options = {
scenarios: {
modelo_fechado: {
executor: 'constant-vus',
vus: 50,
duration: '1m',
},
},
};
export default function () {
// sua lógica de teste
}
결과: 시스템이 느려지면 VU가 응답을 기다린 후에야 새로운 반복을 시작하므로 요청률이 자동으로 감소합니다. 활성 사용자 풀은 설정된 값보다 절대 커지지 않습니다.
사용 시점
- 기업 내부 애플리케이션 – 고정된 직원 그룹이 동시에 시스템에 접근합니다.
- 세션이 제어된 시스템 – 계정당 연결 제한이 있는 스트리밍 플랫폼.
- 내구성 테스트(Soak Tests) – 장기간 동안 일정 부하를 유지하고 시간에 따른 동작을 관찰하는 것이 목표입니다.
사용 가능한 실행자 (폐쇄 모델)
| Executor | 설명 |
|---|---|
constant-vus | 테스트 전체 동안 고정된 VU 수를 유지합니다. |
ramping-vus | VU 수를 점진적으로 증가하거나 감소시킵니다. |
per-vu-iterations | 각 VU가 고정된 횟수의 반복을 수행합니다. |
shared-iterations | VU 풀 전체가 고정된 총 반복 수를 공유합니다. |
오픈 모델
스크립트 예시
export const options = {
scenarios: {
modelo_aberto: {
executor: 'constant-arrival-rate',
rate: 100, // 100 VUs por unidade de tempo
timeUnit: '1s',
duration: '1m',
preAllocatedVUs: 50, // VUs pré‑alocadas antes do início
maxVUs: 200, // número máximo de VUs que podem ser criados
},
},
};
export default function () {
// sua lógica de teste
}
동작: 시스템이 느려지면, k6는 설정된 비율을 유지하기 위해 더 많은 VU가 필요합니다.
사용 시점
- 공개 REST API – 다수의 클라이언트가 지속적으로 요청을 보냅니다.
- 전자상거래 및 웹 포털 – 사용자가 독립적으로 방문합니다.
- 피크 테스트 (Spike Tests) – 갑작스럽고 집중적인 트래픽 증가를 시뮬레이션합니다.
- 용량 테스트 (Capacity Tests) – 시스템이 성능 저하 없이 처리할 수 있는 초당 요청 수를 파악합니다.
사용 가능한 실행기 (오픈 모델)
| 실행기 | 설명 |
|---|---|
constant-arrival-rate | 시간 단위당 고정된 반복률을 유지합니다. |
ramping-arrival-rate | 도착률을 점진적으로 증가하거나 감소시킵니다. |
요약 비교
| 특성 | 폐쇄형 모델 | 개방형 모델 |
|---|---|---|
| 제어되는 항목 | VU 수 | 반복 도착률 |
| 지연 시 동작 | 요청 비율 감소 | 비율 유지 위해 VU 수 증가 |
| 현실감 | 낮음 (제어된 환경에 적합) | 유기적 트래픽이 있는 웹 시스템에 더 적합 |
| 테스트 유형 | 스모크, 소크, 부하, 스트레스 | 부하, 스파이크, 용량 |
| k6 실행기 | constant-vus, ramping-vus, … | constant-arrival-rate, ramping-arrival-rate |
모델 선택 시 주의
많은 팀이 여전히 기본값이고 설정이 가장 간단하기 때문에 모든 테스트에 폐쇄형 모델을 사용합니다. 유기적 트래픽이 있는 웹 시스템에서는 이것이 심각한 성능 문제를 가릴 수 있습니다.
예시 시나리오:
- 시스템이 과부하로 인해 응답이 느려지기 시작합니다.
- 폐쇄형 모델: VU들이 응답을 기다리면서 요청률이 자동으로 감소하고, 애플리케이션에 가해지는 압력이 줄어들어 안정된 것처럼 잘못된 인상을 줍니다.
- 오픈형 모델: 새로운 사용자가 설정된 비율대로 계속 도착하여 애플리케이션의 실제 성능 저하를 드러냅니다.
// 폐쇄형 모델: 시스템이 느려질 때 요청률이 감소
executor: 'constant-vus', vus: 100
// 오픈형 모델: 압력이 유지되고 시스템이 노출됨
executor: 'constant-arrival-rate', rate: 100, timeUnit: '1s'
프로덕션 시스템
Use o modelo 폐쇄형 quando o número de usuários simultâneos é o que importa, e o modelo 개방형 quando a taxa de chegada de requisições é o fator crítico.
Gostou do conteúdo e quer saber mais sobre testes de performance com K6?
Confira meu curso na Udemy!