K6는 Grafana Labs에서 개발한 오픈 소스 성능 테스트 도구로, API와 웹 애플리케이션의 성능을 효율적으로 검증할 수 있습니다. 특히 Go 언어로 구현된 CLI 기반의 도구로, JavaScript로 테스트 스크립트를 작성하여 동시 접속자 시뮬레이션, TPS(Transactions Per Second) 계산 등 다양한 성능 테스트를 지원합니다. 이 글에서는 K6 설치와 기본 사용법, 시나리오 작성법, TPS 계산 방법, 그리고 JMeter와의 비교를 통해 K6의 주요 기능과 활용법을 알아보겠습니다.
K6란 무엇인가?
K6는 API와 웹 애플리케이션에 대한 성능 테스트와 부하 테스트를 수행하는 CLI 기반 도구입니다. JavaScript 기반의 스크립팅을 통해 복잡한 테스트 시나리오를 간단하게 작성할 수 있어 DevOps와 CI/CD 환경에서 인기가 높습니다.
K6의 주요 기능
- 부하 테스트: 웹 애플리케이션의 동시 접속자 수를 시뮬레이션하여 부하를 측정합니다.
- 성능 테스트: 응답 시간, 처리량, 에러율 등 시스템의 성능 지표를 측정합니다.
- 스트레스 테스트: 시스템의 한계와 병목 현상을 파악하기 위해 과도한 부하를 걸어 테스트합니다.
- CI/CD 통합: CLI 기반이므로 자동화 파이프라인과 쉽게 연동할 수 있어 지속적인 성능 모니터링에 적합합니다.
윈도우 환경에서 K6 설치 방법
Windows에서 K6를 설치하는 방법은 간단하며, 패키지 관리자인 Chocolatey를 사용하면 쉽게 설치할 수 있습니다.
- Chocolatey 설치: Chocolatey가 설치되어 있지 않다면, 관리자 권한의 PowerShell에서 아래 명령어를 실행하여 설치합니다.
- powershellSet-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- 코드 복사
- K6 설치: Chocolatey 설치 후 아래 명령어를 입력하여 K6를 설치합니다.
- powershellchoco install k6
- 코드 복사
- 설치 확인: 설치가 완료되면, 아래 명령어로 K6 버전을 확인하여 정상 설치 여부를 확인합니다.
- bashk6 version
- 코드 복사
K6 사용법: 기본 테스트 스크립트 작성과 실행
K6는 JavaScript 기반으로 테스트 스크립트를 작성합니다. 아래 예제는 간단한 HTTP GET 요청을 통해 서버의 응답 상태를 확인하는 테스트 스크립트입니다.
javascript
코드 복사
import http from 'k6/http'; import { check, sleep } from 'k6'; export let options = { vus: 10, // 가상 유저 수 (동시 접속자 수) duration: '30s', // 테스트 지속 시간 }; export default function () { let res = http.get('https://test.k6.io'); check(res, { 'status is 200': (r) => r.status === 200 }); sleep(1); // 요청 간격 조절 }
테스트 실행하기
테스트 스크립트를 작성한 후, CLI에서 아래 명령어로 테스트를 실행할 수 있습니다.
bash
코드 복사
k6 run <스크립트파일명>.js
실행 시 K6는 콘솔에서 실시간으로 요청 성공률, 응답 시간, 에러율 등을 보여줍니다.
K6 시나리오 작성 방법
K6는 다양한 시나리오 설정을 통해 유연한 부하 테스트를 지원합니다.
- 고정 부하 시나리오: 일정 부하를 유지하는 간단한 시나리오입니다.
- javascriptexport let options = { vus: 50, duration: '1m', };
- 코드 복사
- 단계적 부하 증가 시나리오: 테스트 동안 부하를 점진적으로 증가시키는 설정입니다. 특정 시간 동안 동시 접속자 수를 단계적으로 조정하여 서버의 성능 한계를 확인하는 데 유용합니다.
- javascriptexport let options = { stages: [ { duration: '1m', target: 20 }, // 1분 동안 VU를 20까지 증가 { duration: '2m', target: 50 }, // 2분 동안 VU를 50으로 유지 { duration: '1m', target: 0 }, // 1분 동안 부하를 0으로 줄임 ], };
- 코드 복사
이런 시나리오는 실제 사용자의 증가 패턴을 반영하여 테스트할 수 있어 현실성 있는 성능 검증이 가능합니다.
K6 TPS(Transactions Per Second) 계산 방법
TPS는 초당 처리할 수 있는 트랜잭션 수를 나타내는 성능 지표로, K6에서도 간단하게 계산할 수 있습니다. 아래 스크립트를 통해 10명의 가상 유저가 1초마다 요청을 보내도록 하여 TPS를 계산해볼 수 있습니다.
javascript
코드 복사
import http from 'k6/http'; import { sleep } from 'k6'; export let options = { vus: 10, duration: '1m', }; export default function () { http.get('https://test.k6.io'); sleep(1); // 1초 간격으로 요청 전송 }
TPS 계산
- 실행 후, 총 요청 수와 테스트 시간을 통해 TPS를 계산합니다.
- 예를 들어, 1분 동안 600개의 요청이 전송되었다면, TPS는 600 / 60 = 10 TPS입니다.
K6 vs JMeter: 성능 테스트 도구 비교
K6와 JMeter는 모두 성능 테스트 도구로 널리 사용되지만, 각 도구는 다른 장단점을 갖고 있어 테스트 요구사항에 따라 선택하는 것이 좋습니다.
비교 항목K6JMeter
개발 언어 | Go 기반 CLI | Java 기반 GUI |
---|---|---|
스크립팅 언어 | JavaScript | XML 기반 설정 파일 |
학습 곡선 | CLI 기반, JavaScript 지식 필요 | GUI 제공, 비교적 쉬운 설정 |
성능 | 경량화되어 높은 성능 제공 | Java 기반으로 무거울 수 있음 |
보고서 | Grafana와 연동하여 시각화 가능 | 자체 리스너와 그래프 지원 |
CI/CD 통합 | CLI 기반으로 DevOps 파이프라인에 용이 | Jenkins와 같은 외부 도구 필요 |
K6와 JMeter 선택 팁
- 간편한 스크립트 기반 테스트: K6는 JavaScript로 코드를 작성하므로 코드를 통한 부하 테스트에 적합합니다.
- 시각적 인터페이스: JMeter는 GUI가 있어 초보자도 쉽게 시작할 수 있습니다.
- 대규모 부하 테스트: K6는 경량화된 CLI 도구로 고성능 서버 테스트에 유리합니다.
Grafana와 K6 연동하여 시각화하기
K6는 기본적으로 CLI에서 결과를 제공하지만, Grafana와 연동하여 실시간으로 성능 테스트 데이터를 시각화할 수 있습니다. InfluxDB를 데이터 소스로 설정하여 Grafana에서 결과를 시각적으로 분석할 수 있습니다.
K6-Grafana 연동 설정 예제
- InfluxDB 설치: K6가 성능 데이터를 저장할 InfluxDB를 설치합니다.
- K6 실행 시 InfluxDB 출력 옵션 사용:코드 복사
- k6 run --out influxdb=http://localhost:8086/k6 script.js
- bash
- Grafana 대시보드 설정:
- Grafana에서 InfluxDB를 데이터 소스로 추가하고, K6 데이터를 가져와 대시보드를 구성합니다.
이와 같은 설정을 통해 실시간으로 K6 테스트 결과를 확인할 수 있으며, TPS, 응답 시간, 에러율 등의 성능 지표를 시각화하여 더욱 직관적인 성능 분석이 가능합니다.
결론
K6는 코드 기반의 성능 테스트와 부하 테스트에 최적화된 도구로, 특히 CI/CD 환경에서 유연하게 사용할 수 있습니다. Grafana와의 통합으로 테스트 결과를 시각화할 수 있어 데이터 기반의 성능 분석이 용이합니다. JMeter와 비교할 때 고성능과 효율적인 스크립트 관리가 필요한 경우 K6가 적합하며, GUI 인터페이스와 더 다양한 프로토콜 지원이 필요할 경우 JMeter를 고려할 수 있습니다.
'IT' 카테고리의 다른 글
효율적인 쿠버네티스 관리, 필수 kubectl 명령어 정리 (0) | 2024.11.10 |
---|---|
JUnit이란? 개념과 사용법, 부하 테스트와 통합 테스트 적용까지 (1) | 2024.11.04 |
JMeter를 활용한 성능 테스트와 동시 접속자 테스트 (2) | 2024.11.04 |
LLM이란 무엇일까? (1) | 2024.11.01 |
엘라스틱서치(ElasticSearch) 란 무엇인가? 초보자를 위한 쉬운 설명! 📚 (6) | 2024.11.01 |