반응형
k6 사용법 & 실무 활용 방법 정리
최근 서비스 성능 테스트를 진행할 일이 있어서 k6라는 도구를 사용하게 됐는데, 생각보다 사용법이 굉장히 직관적이고 깔끔해서 정리해두면 좋을 것 같아서 글로 남겨본다.
특히 Web API나 REST 기반 서비스라면 JMeter보다 훨씬 간단하게 부하 테스트를 해볼 수 있어서 입문자나 실무 개발자에게 추천할 만한 도구다.
k6 설치 방법
로컬 기준 (Mac / Homebrew)
brew install k6
그 외 윈도우나 리눅스는 아래 공식 사이트 참고하면 바로 설치 가능하다.
k6 기본 예제 스크립트
k6는 JavaScript 기반으로 스크립트를 작성하게 되어 있다. 기본적인 GET 요청 부하 테스트는 이렇게 작성하면 된다.
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
vus: 100, // 동시에 몇 명이 요청 보낼지
duration: '30s', // 몇 초 동안 부하를 줄건지
};
export default function () {
const url = 'https://your-service.com/api/endpoint';
const res = http.get(url);
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 500ms': (r) => r.timings.duration < 500,
});
sleep(1); // 사용자당 Think Time
}
k6 실행 방법
작성한 스크립트 파일이 test.js 라면 아래처럼 실행하면 된다.
k6 run test.js
옵션이 필요하면 이렇게 환경변수로도 넘길 수 있다.
k6 run -e BASE_URL=https://your-service.com test.js
k6 결과값 보는 법
테스트가 끝나면 터미널에 이런 식으로 리포트가 나온다.
http_reqs................: 3000 100.00%
http_req_duration.......: avg=120ms min=80ms med=100ms max=500ms p(90)=150ms p(95)=200ms p(99)=300ms
http_req_failed.........: 0.00%
data_received...........: 2 MB
vus.....................: 100
여기서 중요한건 아래 항목이다.
항목 의미 확인 포인트
http_reqs | 전체 요청 수 | v1, v2 처리량 비교 |
http_req_duration | 응답 속도 | avg, p90, p95, p99 비교 |
http_req_failed | 에러율 | 0% 이상적 |
data_received | 응답 바이트 수 | Payload 크기 비교 |
vus | 동접 사용자 수 | 환경 동일 유지 |
실무 비교할 때 꼭 봐야할 항목 정리
성능 비교를 할 때는 무조건 이 항목들 위주로 비교하면 깔끔하다.
항목 | 이유 |
avg 응답시간 | 전체적인 평균 응답 속도 비교 |
p90 / p95 / p99 | 느린 구간이나 극한 상황 비교 |
max 응답시간 | 최악 상황 대비 |
처리량(http_reqs) | 부하 상황에서 처리 가능한 총 요청 수 |
에러율 | 안정성 체크 |
Payload 크기 | 네트워크 효율 비교 |
정리
개인적으로 k6는 입문자도 금방 배울 수 있고, 실무에서도 충분히 쓸만한 부하 테스트 도구라고 생각한다.
특히 스크립트가 JS 기반이라 이해하기 쉽고, 환경설정도 심플해서 바로 테스트 해보기 좋았다.
앞으로 v1, v2 서비스 비교나 리팩토링 성능 검증 같은 작업을 할 때 꼭 한번 써보길 추천한다.
반응형
'ETC' 카테고리의 다른 글
[TDD] TDD는 단순 테스트 코드가 아니었다 (1) | 2025.04.17 |
---|---|
[Gradle] Gradle 라이브러리 참조 문제 정리 (0) | 2025.03.28 |
[Gradle] Gradle 캐시와 사용자 홈(GRADLE_USER_HOME) (0) | 2025.03.27 |
[IDE] intellij 외부 라이브러리 검색 (0) | 2025.03.26 |
Vault? Google Vault와의 차이점 (1) | 2025.01.17 |