Infra

K6 부하 테스트

baek-dev 2025. 4. 25. 14:22

K6란 무엇인가 – 개발자 친화적인 부하 테스트 도구

K6는 현대 웹 애플리케이션을 위한 오픈소스 부하 테스트(Load Testing) 도구임.
개발자와 테스터가 성능 테스트를 코드처럼 작성하고 자동화할 수 있도록 설계됨.
특히 JavaScript 기반으로 스크립트를 작성하므로 개발 친화적이며, CI/CD 환경에서도 쉽게 통합 가능함.


1. K6의 주요 특징

  • 코드 기반 시나리오 작성
    • JavaScript 문법을 기반으로 테스트 스크립트를 작성할 수 있음.
  • 경량화 및 고성능
    • Go 언어로 개발되어 실행 속도가 빠르고, 수천~수만 RPS(Request per second)를 생성 가능함.
  • 자동화에 유리함
    • 테스트 스크립트를 Git 저장소에 관리하고, CI 파이프라인에 통합할 수 있음.
  • 여러 환경 지원
    • 로컬, Docker, 클라우드(K6 Cloud) 환경에서도 실행 가능함.
  • 실시간 메트릭 제공
    • 응답 시간, 오류율, RPS, 실패율 등 다양한 성능 지표를 실시간으로 확인할 수 있음.

2. K6 설치 방법

1) 로컬 설치 (macOS 기준)

brew install k6

2) Docker 사용

docker run -i grafana/k6 run - <script.js

3) 실행 확인

k6 version

3. K6 테스트 스크립트 구조

기본 K6 스크립트는 default 함수를 통해 요청을 정의함.
JavaScript 문법을 사용하여 간단한 요청부터 복잡한 시나리오까지 작성 가능함.

예시: 간단한 GET 요청

import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
  vus: 10,             // Virtual Users (동시 사용자 수)
  duration: '30s',     // 테스트 시간
};

export default function () {
  let res = http.get('https://example.com/api');
  check(res, {
    'status is 200': (r) => r.status === 200,
  });
  sleep(1); // 1초 대기
}

4. K6 옵션 설명

옵션 설명
vus 동시에 실행될 가상의 사용자 수
duration 테스트를 지속할 시간
iterations 반복 횟수 지정 가능
thresholds 성능 기준(응답 시간, 실패율 등) 설정 가능
stages 부하 단계별 시나리오 구성 가능 (ramp-up/down)

5. 부하 시나리오 예제 (stages 사용)

export let options = {
  stages: [
    { duration: '1m', target: 10 },  // 1분 동안 10명까지 증가
    { duration: '3m', target: 50 },  // 3분 동안 50명 유지
    { duration: '1m', target: 0 },   // 1분 동안 0명으로 감소
  ]
};

6. 실행 및 결과 예시

k6 run script.js

실행 시 다음과 같은 메트릭을 제공함:

  • http_req_duration: 평균 응답 시간
  • http_req_failed: 실패 요청 비율
  • http_reqs: 총 요청 수
  • vus_max: 최대 동시 사용자 수

7. K6 Cloud (유료 옵션)

  • 더 많은 사용자와 긴 시간 테스트가 필요한 경우 K6 Cloud를 사용할 수 있음.
  • 테스트 결과를 웹 대시보드에서 시각화하고, 히스토리로 관리할 수 있음.
  • SaaS 방식으로 CI/CD와 연동하여 정기적인 성능 테스트 수행 가능함.

8. 실무 활용 사례

  • API 서버 부하 테스트
    • 배포 전 REST API의 최대 처리량(RPS)을 측정하고 병목 지점을 확인함.
  • 로그인/회원가입 시나리오 테스트
    • 다양한 사용자 흐름을 시뮬레이션하여 실제 유저 행동 기반의 테스트 수행함.
  • CDN/프록시 구성 테스트
    • 정적 리소스, 이미지 요청에 대한 병렬 응답 처리 속도 확인함.
  • CI 자동화 테스트
    • GitHub Actions, Jenkins와 연동하여 배포 전 자동 부하 테스트를 수행함.

9. K6의 장단점

장점 단점
JavaScript 기반으로 친숙함 브라우저 기반 테스트는 불가함
경량화되어 빠르게 동작함 UI 없이 CLI 기반으로만 작동함
CI/CD와 쉽게 통합됨 분산 테스트는 클라우드 요금이 발생함
실시간 결과, 커스터마이징 쉬움 로그 분석, 대시보드는 직접 연동해야 함

정리

K6는 현대적인 웹 시스템에 적합한 스크립트 기반 부하 테스트 도구임.
JavaScript 문법으로 테스트 시나리오를 정의할 수 있고, 경량 Go 기반으로 수만 RPS를 처리할 수 있을 만큼 효율적임.
단순한 GET 요청부터 복잡한 사용자 흐름까지 코드로 작성할 수 있어 테스트 자동화와 유지보수에 유리함.
CI/CD 파이프라인에 통합하면 성능 문제를 사전에 탐지하고 안정적인 서비스를 제공하는 데 큰 도움이 됨.

 

 

 

 

출처 : ChatGPT

'Infra' 카테고리의 다른 글

LAMP 스택  (0) 2025.05.01
Micrometer  (1) 2025.04.10
Prometheus  (0) 2025.04.09
Grafana  (0) 2025.04.08
리버스 프록시  (1) 2025.04.03