k6를 사용한 성능 테스트에서 개방형 및 폐쇄형 모델

발행: (2026년 2월 24일 오전 09:35 GMT+9)
7 분 소요
원문: Dev.to

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-vusVU 수를 점진적으로 증가하거나 감소시킵니다.
per-vu-iterations각 VU가 고정된 횟수의 반복을 수행합니다.
shared-iterationsVU 풀 전체가 고정된 총 반복 수를 공유합니다.

오픈 모델

스크립트 예시

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!

K6 성능 테스트 ✨

0 조회
Back to Blog

관련 글

더 보기 »

GitHub README에 Credly 인증서 전시하기

개요: Credly에 인증서가 있고 이를 GitHub 프로필에 표시하고 싶다면, 오픈‑source 도구가 이를 매우 간단하게 만들어 줍니다. 이 도구는 무료 API를 제공합니다.