K6 & Grafana 사용법 익히기

chisae·2023년 12월 23일

끄적이기

목록 보기
2/12
post-thumbnail

K6는 오픈 소스 부하 테스팅 도구로, 웹 어플리케이션의 성능을 측정하고 최적화하기 위해 사용된다, JavaScript를 사용하여 테스트 스크립트를 작성하게 되며 가상 사용자를 생성하여 웹 서비스나 API에 부하를 가하는 시뮬레이션을 수행할 수 있습니다, 이때 k6는 개발자 친화적인 인터페이스와 명확한 결과 보고 기능을 제공하기에 CI/CD 파이프라인에 통합하기 용이하여 개발 과정에서 지속적인 성능 모니터링이 가능하게 됩니다,

(해당 포스팅은 Window 환경을 기준으로 진행됩니다)



choco install k6

이 코드를 통해 k6를 설치할 수 있다



이후 본인이 원하는 파일에 JS파일을 생성해 다음과 같은 코드를 작성해주면 된다

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

export default function () {
    http.get('https://test.k6.io');
    sleep(1);
}

위 코드는 K6가 정상적으로 작동하는지 확인하기 위한 코드이므로 큰 의미는 없다

이후 이 JS 파일이 위치한 곳으로 이동 한 후


k6 run sample.js (js파일 이름은 원하는대로 설정)

JS파일을 실행해주면 된다,

그럼 k6가 제대로 설치가 되었고 동작하는지도 확인했으니 이번엔
k6 & influxDB & Grafana를 이용해 더욱 시각적으로 정보를 확인할 수 있다
일단 influxDB와 Grafana를 설치하기 위해서는 docker가 이미 설치되어 있어야 한다,

git clone https://github.com/grafana/k6 && cd k6
git submodule update --init
docker-compose up -d influxdb grafana

이렇게 두가지를 설치하고 난 후 docker에 들어가게 되면


다음과 같이 컨테이너가 실행 중인걸 확인할 수 있다,
그리고 이후엔 기존에 있는 JS파일을 수정하여 API를 가져오는데 얼마나 걸리는지
확인해볼 예정이다,


let res = http.get("https://test-api.k6.io/public/crocodiles/1/");

일단 이미 만들어둔 API가 없을 경우 이코드를 사용할 수 있다,

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

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

export default function () {
  // JSON RequestBody 준비
  let payload = JSON.stringify({
    year: "2023",
    month: "12",
  });

  let params = {
    headers: {
      "Content-Type": "application/json", // JSON 형식 지정
    },
  };

  let res = http.post("https://api 엔드포인트를 입력하면 된다", payload, params);

  check(res, {
    "is status 200": (r) => r.status === 200, // HTTP 상태 코드가 200인지 확인
    "response time is less than 2000ms": (r) => r.timings.duration < 2000, // 응답 시간이 2초 이내인지 확인
  });

  sleep(1); // 각 요청 사이에 1초 대기
}

코드를 수정 한 후

k6 run --out influxdb=http://localhost:8086 sample.js

JS파일이 위치한 폴더에서 위 코드를 실행 한 후 localhost:3000으로 이동하면
Grafana로 연결이 가능하다 이후 Grafana에 대시보드를 추가해줘야 한다

Import를 누른 후

Grafana에서 제공하는 k6 로드 테스트 결과를 보여주는 대시보드를 이용하기 위해
2587이라고 "Import via grafana.com"에 입력한 후 Load 해준다

이후에 Import 해주면

이렇게 시각적으로 k6 테스트 결과를 확인할 수 있게된다.

내가 이번에 만든 서비스도 API를 가져와서 테스트 해봤습니다,
이미 배포까지 완료된 상태이고 어차피 작은 규모의 서비스라 큰 데이터를 필요하지도 않고
제손을 어느정도 떠난 상태여서 따로 로컬에서 모의 데이터를 만들어서 API 성능 테스트를 하지 않았습니다.

API 속도는 나쁘지 않은 거 같습니다,
감사합니다.

profile
초보 개발자

0개의 댓글