- 성능테스트를 위한 K6 사용법2025년 02월 24일 18시 45분 56초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
k6란 성능 테스트 및 부하 테스트를 위한 오픈 소스 도구이다.
웹 어플리케이션의 API 성능을 측정하는데 사용된다.
동시 접속, 가상의 유저, 반복 횟수 등을 설정해서 서버 응답 시간, 처리량 등을 확인 할 수 있습니다.
또한 가장 큰 장접은 Javascript 코드를 통해 테스트 시나리오를 작성 할 수 있다는 것이고 Grafana 진영에서 개발되어 연동이 수월해진다.
정리하자면
- grafana에서 제공
- javascript로 테스트 작성
- 가상 유저, 반복, 서버 응답 시간, 처리량 등 확인 가능
Docker를 통해 k6를 사용해보겠다.
그냥 인텔리제이 터미널에서 진행했다.
1. 설치
docker image 다운로드
docker pull grafana/k6
2. 스크립트 작성
초기 생성 시 존재하는 기본 코드
import http from 'k6/http'; import { sleep } from 'k6'; export const options = { vus: 10, // 1 duration: '30s', // 2 }; export default function() { http.get('https://test.k6.io'); sleep(1); }
여기서는 k6의 scenarios라는 개념을 사용한다.
다양한 방법의 테스트를 할 수 있지만, scenarios 방식이 가장 적절해 보여서 이것을 사용했다.
먼저 options를 보겠다.
scenarios는 가상 사용자(VUs) 및 반복(Iterations)을 상세하게 구성하는 것이다.
시나리오를 사용하면 다양한 워크로드나 부하 테스트에서의 트래픽 패턴을 모델링할 수 있다.
maxDuration은 부하 테스트의 timeout 정도로 보면 된다.
만약 부하 테스트에 걸리는 시간이 30초를 초과하게 된다면 도중 테스트를 종료하고 나머지 작업은 drop으로 간주한다
3. Docker Compose 설정
version: '3.7' services: k6: image: grafana/k6:latest volumes: - ./scripts:/scripts command: run /scripts/test.js networks: - k6-network networks: k6-network:
4. Docker 에서 실행
docker compose --env-file .env up
그리고 아래부분은 실제 javascript 코드로
로컬환경의 8080포트에 띄워진 서버에 GET(/apitest)요청을 하게 된다.
docker로 localhost를 호출할 때에는 host.docker.internal:{port} 형식으로 기입해주면 된다.
로드 테스트가 외부 환경이라면 그에 맞는 Host를 기입하여 준다.
check는 k6 모듈에서 제공하는 기능이다.
위 코드에선 HTTP 상태 코드가 200일 때 성공으로 보고 처리율을 계산하게 된다.
그 외에 유용한 기능은 공식 문서에서 확인 가능하다.
import http from 'k6/http'; import { check, sleep } from 'k6'; import {encode} from "./util.js"; export const options = { vus: 1, duration: '1s', }; export default function() { const data = { "sub" : "abc@naver.com", "auth" : "손님,회원", "exp" : Date.now() + 1800000 } const acc = encode(data, SECRETE_KEY); console.log(acc); const response = http.get("http://host.docker.internal:8080/v1/api/auth/test", { headers: { 'Content-Type': 'application/json', 'Authorization' : `Bearer ${acc}` } }); check(response, { "is status 200" :(r) => r.status === 200 }) sleep(1); }
728x90반응형'백엔드' 카테고리의 다른 글
Full-Text Search 사용법 (0) 2025.04.22 [MySQL] LIKE 문의 동작 방식과 Index와의 관계 (0) 2025.04.21 [로드맵] CI/CD (0) 2025.01.02 [로드맵] 기능 테스트 (1) 2024.12.31 [로드맵] 단위 테스트 (0) 2024.12.31 댓글