K6 tutorial

2024. 12. 4. 17:15ยท๐Ÿ“‚ backend/test

1. K6

grafana - K6

 

  • K6 ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ์ด๋‹ค.
  • K6 ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ธํ”„๋ผ ์•ˆ์ •์„ฑ, ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํƒ„๋ ฅ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์ง€์›ํ•œ๋‹ค.

(1) Use Case

K6 ์‚ฌ์šฉ์ž๋Š” ๊ฐœ๋ฐœ์ž, QA ์—”์ง€๋‹ˆ์–ด, SRE ๋“ฑ์ด ๋Œ€์ƒ์ด๋‹ค.

  1. ๋ถ€ํ•˜ ๋ฐ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ : spike, stress, soak test ์™€ ๊ฐ™์€ ๊ณ ๋ถ€ํ•˜ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ : K6 ๋ธŒ๋ผ์šฐ์ € API ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•ด ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์„ฑ๋Šฅ ๋ฐ ์ข…ํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง : ์ตœ์†Œํ•œ์˜ ๋ถ€ํ•˜๋กœ ์ž์ฃผ ํ…Œ์ŠคํŠธ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ณ  K6 ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์ง€์›ํ•˜๋Š” Grafana Cloud ์ข…ํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” : CI/CD ๋ฐ ์ž๋™ํ™” ๋„๊ตฌ์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์›ํ•œ๋‹ค.
  5. ์นด์˜ค์Šค ๋ฐ ๋ณต์›๋ ฅ ํ…Œ์ŠคํŠธ : ์นด์˜ค์Šค ์‹คํ—˜์˜ ์ผ๋ถ€๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜, ํ…Œ์ŠคํŠธ์—์„œ ํŠธ๋ฆฌ๊ฑฐ, ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๊ฒฐํ•จ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  6. ์ธํ”„๋ผ ํ…Œ์ŠคํŠธ : k6 ์ƒˆ๋กœ์šด ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์ธํ”„๋ผ ๋‚ด ๊ฐœ๋ณ„ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. Installation

  • K6 ๋Š” linux, mac, window ๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

(1) Fedora/CentOS

sudo dnf install <https://dl.k6.io/rpm/repo.rpm>
sudo dnf install k6

(2) Mac OS

brew install k6

 

(3) Docker

docker pull grafana/k6

 

3. K6 ์‹คํ–‰ํ•˜๊ธฐ

(1) script.js ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๊ธฐ๋ณธ ์ฝ”๋“œ ์ž‘์„ฑ

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

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

 

(2) k6 ์ปค๋งจ๋“œ ์‹คํ–‰

  • ์˜ต์…˜ ์žฌ์ •์˜ ๋ฐฉ๋ฒ• (e.g. vuser, duration) : https://k6.io/blog/learning-js-through-load-testing/#task-1-override-options
$ k6 run script.js
docker run --rm -i grafana/k6 run - <script.js

 

(3) ์‹คํ–‰ ๊ฒฐ๊ณผ (ํ‘œ์ค€ ์ถœ๋ ฅ)

  • ๋ฉ”ํŠธ๋ฆญ ์ •๋ณด : https://grafana.com/docs/k6/latest/using-k6/metrics/reference/

  1. data_received : ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์–‘
  2. data_sent : ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ ์–‘
  3. http_req_blocked : ์š”์ฒญ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ๋ธ”๋ก๋œ ์‹œ๊ฐ„
  4. http_req_connecting : ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์™€ TCP connection ์„ ์ˆ˜๋ฆฝํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„
  5. http_req_duration : ์š”์ฒญ์„ ์œ„ํ•œ ์ด ์‹œ๊ฐ„(http_req_sending + http_req_waiting + http_req_receiving)
  6. http_req_failed : ์„ค์ •๋œ ์‘๋‹ต ์ฝœ๋ฐฑ์— ๋”ฐ๋ฅธ ์‹คํŒจํ•œ ์š”์ฒญ์˜ ๋น„์œจ
  7. http_req_receiving : ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด๋‹ค.
  8. http_req_tls_handshaking : ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์™€ TLS ์„ธ์…˜ ํ•ธ๋“œ์…ฐ์ดํ‚น์— ์†Œ์š”๋œ ์‹œ๊ฐ„
  9. http_req_waiting : ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ (TTFB)
  10. http_reqs : k6๊ฐ€ ์ƒ์„ฑํ•œ ์ด HTTP ์š”์ฒญ ์ˆ˜
  11. iteration_duration : setup ๋ฐ teardown ์— ์†Œ์š”๋œ ์‹œ๊ฐ„์„ ํฌํ•จํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ „์ฒด ๋ฐ˜๋ณต์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  12. iterations : VU๊ฐ€ JS ์Šคํฌ๋ฆฝํŠธ(๊ธฐ๋ณธ ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•œ ์ด ํšŸ์ˆ˜
  13. vus : ํ˜„์žฌ ํ™œ์„ฑ๋œ VUser ์ˆ˜
  14. vus_max : ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ VUser ์ˆ˜

 

(4) ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•˜๊ธฐ

  • —out ์˜ต์…˜์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๋Œ€์ƒ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
k6 run \\
--out json=test.json \\
script01.json
{
  "metric": "vus",
  "type": "Point",
  "data": {
    "time": "2024-12-04T16:28:24.627428+09:00",
    "value": 1,
    "tags": {}
  }
}
{
  "type": "Metric",
  "data": {
    "name": "vus_max",
    "type": "gauge",
    "contains": "default",
    "thresholds": [],
    "submetrics": null
  },
  "metric": "vus_max"
}
{
  "metric": "vus_max",
  "type": "Point",
  "data": {
    "time": "2024-12-04T16:28:24.627428+09:00",
    "value": 1,
    "tags": {}
  }
}
...

 

Reference

  • https://github.com/schooldevops/k6-tutorials
  • https://grafana.com/docs/k6/latest/examples/tutorials/

'๐Ÿ“‚ backend > test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

docker -compose ๊ธฐ๋ฐ˜ ๋กœ์ปฌ DB ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•(mysqld-exporter + prometheus + grafana)  (0) 2025.01.25
Testcontainers ์‚ฝ์งˆ1 : ํ…Œ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‚ฌ์šฉ  (0) 2025.01.13
nGrinder tutorial  (0) 2024.03.19
pinpoint simple summary  (0) 2024.03.08
'๐Ÿ“‚ backend/test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • docker -compose ๊ธฐ๋ฐ˜ ๋กœ์ปฌ DB ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•(mysqld-exporter + prometheus + grafana)
  • Testcontainers ์‚ฝ์งˆ1 : ํ…Œ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‚ฌ์šฉ
  • nGrinder tutorial
  • pinpoint simple summary
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    spring
    AWS
    kafka
    spring camp 2025
    spring AOP
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    Redisson
    react
    ํšŒ๊ณ 
    nGrinder
    mysql
    JPA
    gof
    ๋™์‹œ์„ฑ
    UUID
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    spring-batch
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
K6 tutorial
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”