...

๋ถํ ํ ์คํธ
๋ถํ ํ ์คํธ (stress test) ๋ ์๋ฒ๊ฐ ์ผ๋ง๋งํผ์ ์์ฒญ์ ๊ฒฌ๋ ์ ์๋์ง ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์์ฑํ API ์ ๋ณ๋ชฉ ํ์๊ณผ ์ผ๋ง ๋งํผ์ ํธ๋ํฝ์ ์์ฉํ ์ ์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์ ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
๋ด ์ฝ๋๊ฐ ์ค์ ๋ก ๋ฐฐํฌ๋์์ ๋,
์ด๋ค ๋ฌธ๋ฒ์ , ๋ ผ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์์ง๋ ์ ๋ ํ ์คํธ์ ํตํฉ ํ ์คํธ๋ฅผ ํตํด ์ด๋ ์ ๋ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋ด ์๋ฒ๊ฐ ๋ช ๋ช ์ ๋์ ์ ์์๋ ์ผ์ผ ์ฌ์ฉ์๋ฅผ ์์ฉํ ์ ์๋์ง ์์ธกํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต๋ค.
์ฝ๋์ ๋ฌธ๋ฒ์ , ๋ ผ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ์๋ฒ์ ํ๋์จ์ด ์ ์ฝ์ผ๋ก ์ธํด ์๋น์ค๊ฐ ์ค๋จ๋ ์ ์๋ค.
๋ํ์ ์ธ ๊ฒ์ด OOM(out of memory) ๋ฌธ์ ์ธ๋ฐ,
์ด๋ ์๋ฒ๊ฐ ์ ์์๋ค์ ์ ๋ณด ์ ์ฅ์ ์ํด ๊ฐ ์ฌ์ฉ์๋ง๋ค ์ผ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋, ๋ฉ๋ชจ๋ฆฌ์ ์์ด ๊ณ์ ์ฆ๊ฐํ๋ค๊ฐ ๊ฒฐ๊ตญ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋์ด์๊ฒ ๋๋ฉด ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
๋ฐ๋ก ์ด๊ฒ์ ๋ถํ ํ ์คํธ๋ฅผ ํตํด ์ด๋ ์ ๋ ์์ธกํ ์ ์๋ค.
ํต์ ์๋ฐํ๊ฒฝ์์๋ ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์๊ฐํ๋ฉด jmeter, ngrinder, grinder๋ฅผ ์ฌ์ฉ๋๊ณ , node ํ๊ฒฝ์์๋ ๊ฐ๋ฒผ์ฐ๋ฉด์๋ ํธํ Artillery ๊ฐ ์ข๋ค.
Artillery
Artillery๋ Node.js๋ก ์์ฑ๋ ์คํธ๋ ์ค ํ ์คํธ ๋๊ตฌ์ด๋ค.
Installing Artillery CLI | Artillery
- How to install the Artillery CLI via npm
www.artillery.io
๋ฌด๋ฃ ๋ฒ์ ๊ณผ ์ ๋ฃ ๋ฒ์ ์ผ๋ก ๋๋๋๋ฐ ๋ฌด๋ฃ ๋ฒ์ ์ ์ฌ์ฉํด๋ ๋์ธ์๋ ํฌ๊ฒ ์ง์ฅ ์๋ค.
ํ์ฌ์์ ์ด์ํ๋ ํ๋ก์ ํธ์ด๋ค๋ณด๋ ์
๋ฐ์ดํธ๋ ๊พธ์คํ ์กด์ฌํ๋ค.
๋ช ๊ฐ์ง ํน์ง์ ์ ๋ฆฌํ๋ฉด,
- HTTP(S), Socket.io, Websocket ๋ฑ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํ๋ค.
- ์๋๋ฆฌ์ค ํ ์คํธ๋ฅผ ํ ์ ์๋ค.
- JavaScript๋ก ๋ก์ง์ ์์ฑํด์ ์ถ๊ฐํ ์ ์๋ค.
- statsd๋ฅผ ์ง์ํด์ Datadog์ด๋ InfluxDB ๋ฑ์ ์ค์๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
- ํ๋ถํ CLI ์ปค๋งจ๋๋ฅผ ์ ๊ณตํ๋ค.
- ๋ฆฌํฌํธ ํ์ด์ง๋ฅผ ๋ฐ๋ก ์ ๊ณตํ๋ค.
๋ถํ ํ ์คํธ ํด๋ณด๊ธฐ
artillery๋ฅผ ์ค์นํ๊ณ , ์๋ฒ๋ฅผ ์คํํด๋ณด์.
> npm i -D artillery
> npm start
์ด์ ์๋ฒ๊ฐ ์ผ์ง ์ํ์์, ์๋ก์ด ์ฝ์์ ํ๋ ๋ ๋์ด ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
> npx artillery quick --count 100 -n 50 http://localhost:8001
์ ๋ช ๋ น์ด๋ http://localhost:8001์ ๋น ๋ฅด๊ฒ ๋ถํ ํ ์คํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- --count ์ต์ ์ ๊ฐ์์ ์ฌ์ฉ์ ์๋ฅผ ์๋ฏธํ๊ณ ,
- -n ์ต์ ์ ์์ฒญ ํ์๋ฅผ ์๋ฏธํ๋ค.
- --rate ์ต์ ์ ์ด๋น ์์ฒญ์ ์๋ฏธํ๋ค.
์ข ๋ ์์ธํ ์ต์ ์ ๋ํ ๋ด์ฉ์ ๋ณด๊ณ ์ถ๋ค๋ฉด artillery quick -h ๋ฅผ ํตํด ํ์ธ ํ ์ ์๋ค.
์ฆ, ์ ๋ช ๋ น์ด์์ 100๋ช ์ ๊ฐ์ ์ฌ์ฉ์๊ฐ 50๋ฒ์ ์์ฒญ์ ๊ฐ๊ฐ ๋ณด๋ด๋ ๊ฒ์ด๋ฏ๋ก, ์ด 5000๋ฒ์ ์์ฒญ์ด ์๋ฒ๋ก ์ ๋ฌ๋ ๊ฒ์ด๋ค.
๋ง๋ค๊ณ ์๊ฐํ ์๋ ์๊ฒ ์ง๋ง, ์ค์ ์๋น์ค์์ 5000๋ฒ์ ์์ฒญ์ ๊ทธ๋ ๊ฒ ๋ง์ ์์ด ์๋๋ค.
๋จ์ง ์ ๋์ ์ธ ์ซ์๊ฐ ์๋, ํ๋์ ์์ฒญ์ด ์ผ๋ง๋ ๋ง์ ์์ ์ ํ๋์ง๊ฐ ๋ ์ค์ํ๋ค.


median๊ณผ p95, p99์ ์ฐจ์ด๊ฐ ํฌ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์์น์ ์ฐจ์ด๊ฐ ์ ์ ์๋ก ๋๋ถ๋ถ์ ์์ฒญ์ด ๋น์ทํ ์๋๋ก ์ฒ๋ฆฌ๋์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋, ์ค์ ์๋น์ค๋ฅผ ๋ถํ ํ ์คํธํ ๋๋ ์ฃผ์ํด์ผํ๋ค.
์ง๊ธ์ http://localhost:8001 ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์์ง๋ง, ์ด ์๋ฒ๋ ๊ฐ๋ฐ์ฉ ์๋ฒ์ธ ๋ฐ๋ค๊ฐ ๋ด ์ปดํจํฐ๋ฅผ ๋ปํ๋ฏ๋ก ์๋ฒ๊ฐ ์ค์ง๋๋ค ํ๋๋ผ๋ ๋ฌธ์ ๊ฐ ์๋ค.
๊ทธ๋ฌ๋ ์ค์ ์๋น์ค ์ค์ธ ์๋ฒ์ ๋ฌด๋ฆฌํ๊ฒ ๋ถํ ํ ์คํธ๋ฅผ ํ ๊ฒฝ์ฐ ์ค์ ์๋น์ค๊ฐ ์ค๋จ๋ ์ ์๋ค.
๋ํ, AWS๋ GCP ๊ฐ์ ํด๋ผ์ฐ๋์ ์ข ๋์ ์๊ธ์ ์ ํํ ๊ฒฝ์ฐ์ ๊ณผ๋คํ ์๊ธ์ด ์ฒญ๊ตฌ๋ ์ ์๋ค.
๋ฐ๋ผ์ ์ค์ ์๋น์ค์ ๋ถํ ํ ์คํธ๋ฅผ ํ๊ธฐ๋ณด๋จ ์ค์ ์๋ฒ์ ๊ฐ์ ์ฌ์์ ์๋ฒ(์ด๋ฅผ ๋ณดํต staging ์๋ฒ๋ผ๊ณ ๋ถ๋ฅธ๋ค) ๋ฅผ ๋ง๋ ํ์ ๊ทธ ์๋ฒ์ ๋ถํ ํ ์คํธ๋ฅผ ์งํํ๋ ๊ฒ์ด ์ข๋ค.
์๋๋ฆฌ์ค ํ ์คํธ ํด๋ณด๊ธฐ
๋ถํ ํ ์คํธ๋ฅผ ํ ๋ ๋จ์ํ ํ ํ์ด์ง์๋ง ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ,
์ค์ ์ฌ์ฉ์์ ํ๋์ ๋ชจ๋ฐฉํ์ฌ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์ด ๋๋ JSON ๋๋ YAML ํ์์ ์ค์ ํ์ผ์ ์์ฑํด์ผ ํ๋ค.
์ต์ํ JSON ํ์์ ์ฌ์ฉํ์ฌ ์งํํด๋ณด์.
์๋๋ฆฌ์ค ์ค์ ํ์ผ ์ต์
loadtest.json
{
"config": {
"target": "http://localhost:8001",
"phases": [
{
"duration": 60,
"arrivalRate": 30
}
]
},
"scenarios": [
{
"flow": [
{
"get": {
"url": "/"
}
},
{
"post": {
"url": "/auth/login",
"json": {
"email": "test1@test.com",
"password": "123123"
}
}
},
{
"get": {
"url": "/hashtag?hashtag=test"
}
}
]
}
]
}
Config section
- target : ํ ์คํธํ ์ฑ์ url์ ์๋ฏธ. ์๋ฒ ์ฃผ์
- phases : ํ
์คํธ ์์ฒญ ์๊ฐ๊ณผ ๋น์จ์ ์ ํ๋ค.
- { "duration": 60, "arrivalRate": 30 } : 60์ด ๋์ ๋งค์ด 30๊ฐ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
- defaults : ๋ค์์ ํ ์คํธํ ์๋๋ฆฌ์ค์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์๋ค.
- payload : ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด์ ์ฌ์ฉ.
- ์ค์ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ฒ๋ผ ํ
์คํธํ๋ ค๋ฉด ํ
์คํธ๋ง๋ค ๋ณด๋ด๋ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ ธ์ผ ํ๋๋ฐ, ์ด๋ฐ ํ
์คํธ๋ฅผ ์ํด์ CSV ํ์ผ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ค์ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ฒ๋ผ ํ
์คํธํ๋ ค๋ฉด ํ
์คํธ๋ง๋ค ๋ณด๋ด๋ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ ธ์ผ ํ๋๋ฐ, ์ด๋ฐ ํ
์คํธ๋ฅผ ์ํด์ CSV ํ์ผ์ ์ฌ์ฉํ ์ ์๋ค.
- socketio : ์์ผ์ ํ
์คํธ ํ ์ ์๋ค.
- query : socket ๋ค์ด ๋ค์ด์ค๋ ์ฃผ์ ๋์ roomID๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ฌ๊ณ ์์ด์ ์ฟผ๋ฆฌ ๋ถ๋ถ์ ์์ฑํด์ค์ผํ๋ค. ๋ฐฉ ๋ง๋ค๋๋ง๋ค roomID๊ฐ ๋งค๋ฒ ๋ฌ๋ผ์ ธ์ ํ ์คํธํ ๋๋ง๋ค ์ด ๋ถ๋ถ์ ๋ฐ๊ฟ์ฃผ๋๊ฒ ๋ฒ๊ฑฐ๋ก์ธ์ ์๋ค
- plugins : ํ๋ก๊ทธ์ธ ์ค์ - tls: configure how Artillery handles self-signed certificates
- ensure : ์๋ฌ๋ ์ง์ฐ์๊ฐ์ ๋ํด ์ฑ๊ณต ์กฐ๊ฑด์ ์ ํ
- processor : ์ปค์คํ js ์ฝ๋๋ฅผ loadํ๋ค.
Secnarios Section
- name : ์๋๋ฆฌ์ค ์ด๋ฆ
- flow : ์๋๋ฆฌ์ค์์ ์งํํ๋ ํ
์คํธ ๋์์ ์์๋๋ก ์ ์ผ๋ฉด ๋๋ค.
- ex) GET, POST, GET ์์ฒญ์ ์์๋๋ก ๋ณด๋ธ๋ค.
- ๊ฐ ์์ฒญ์์๋ url๋ก ํธ์คํธ ๋ช
์ ์ ์ธํ path๋ฅผ ์ง์ ํ๋ฉด ๋๊ณ ,
json ํ๋์์ ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ ์ ์๋ค. ์ฌ๊ธฐ์ ๊ฐ์ {{ }} ๋ฌธ๋ฒ์ ํตํด์ ์์์ payload๋ก ๋ถ๋ฌ์จ ๊ฐ์ ์ง์ ํ ์ ์๋ค.
- capture : ์๋ต์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ์์ ๋ค์ ๋ณ์๋ก ์ง์ ํด์ ๋ค์ ๋ณด๋ด๋ ์์ฒญ์ ์ฌ์ฉํ ์ ์๋ค.
- match : ์๋ต ๋ฐ์ดํฐ๊ฐ ์ํ๋ ๊ฐ์ด ์ค๋์ง๋ฅผ ํ์ธํ ์ ์๋ค.
- weight : ์๋๋ฆฌ์ค์ ๋ํ ๊ฐ์ค์น์ด๋ค. ์ด ๊ฐ์ด ๋์ผ๋ฉด ํด๋น ์๋๋ฆฌ์ค๋ ๋ ๋ง์ด ๋ฐ์ํ๋ค.

๋จผ์ config ๊ฐ์ฒด์์ target์ ํ์ฌ ์๋ฒ๋ก ์ก๊ณ ,
phases์์ 60์ด ๋์(duration), ๋งค์ด 30๋ช ์ ์ฌ์ฉ์(arrivalRate)๊ฐ ๋ค์ด์ค๋๋ก ํ๋ค. ์ฆ, 1๋ถ๋์ 1800 ๋ช ์ด ์ ์ํ๋ ์ํฉ์ด๋ค.
defaults๋ก ๊ฐ๋จํ๊ฒ ํค๋์ User-Agent๋ฅผ ์ค์ ํด์ฃผ์๋ค.

payload๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
์ค์ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ฒ๋ผ ํ ์คํธํ๋ ค๋ฉด ํ ์คํธ๋ง๋ค ๋ณด๋ด๋ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ ธ์ผ ํ๋๋ฐ ์ด๋ฐ ํ ์คํธ๋ฅผ ์ํด์ CSV ํ์ผ์ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ data.csv ๊ฐ ์๋ค๊ณ ํด๋ณด์.

payload์ path์์ ์ด ํ์ผ์ ์ง์ ํ๋ฉด ํ ์คํธ๋ฅผ ์ฒ์ ์คํํ ๋ ํ์ผ์ ๊ฐ์ ธ์ค๊ณ ,
fields์์ ์์๋๋ก ํ๋๋ช ์ ์ง์ ํ๋ฉด,
flow ๋ถ๋ถ์์ {{email}} ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก ๋ณ์๋ก์ ์ด ๊ฐ์ ๋ฐ๊ฟ๊ฐ๋ฉด์ ์ฌ์ฉํ ์ ์๋ค. (๋์ ์ค์ ๋ณ์ ๋ฌธ๋ฒ๊ณผ ๋น์ทํ๋ค)

์ด์ ์ด ๊ฐ์ ์ฌ์ฉ์๋ค์ด ์ด๋ ํ ๋์์ ํ ์ง scenarios ์์ฑ์ ์ ๋๋ค.
๋จผ์ ์ฒซ ๋ฒ์งธ flow๋ก
- ๋ฉ์ธ ํ์ด์ง (GET /)์ ์ ์ํ๊ณ ,
- data.csv์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ก๊ทธ์ธ (POST /auth/login) ์ ํ ํ
- ํด์ํ๊ทธ ๊ฒ์ (GET /hashtag?hashtag=test) ์ ํ๋ค.
์ด์ ๋ช ๋ น์ด๋ก ๋ถํ ํ ์คํธ๋ฅผ ์คํํด๋ณด์.
$ npx artillery run loadtest.json
1800๋ช ์ ์ ์์๊ฐ ๊ฐ๊ฐ ๋ค ๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ (ํ ๋ฒ์ redirect๋ฅผ ํฌํจ) ์ด 7200๋ฒ์ ์์ฒญ์ด ์ ์ก๋ ๊ฒ์ด๋ค.
๊ฐ๊ฐ์ ์์ฒญ์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ ํ ๋ฒ์ฉ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ์๋นํ ๋ฌด๋ฆฌ๊ฐ ๊ฐ๋ค.
๋ง์ผ ์๋ฒ๊ฐ ๋ชป๋ฒํธ๊ฒฝ์ฐ (์ต์ ์์ฒญ ์๊ฐ์ด 40์ด ๊ฑธ๋ฆฌ๊ณ .. ๋ฑ) ์ด๋๊ฐ ๋ฌธ์ ์ธ์ง ์์๋ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ๋ผ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ํธ๋ํฝ ๋ฑ์ ์ฒดํฌํด๋ด์ผ ํ๊ณ , ๋๋ฌด ๋๋ฆฌ๋ค ํ๋ฉด ์๋ฒ ์คํ ์ค์ผ์ผ๋ง์ ์ค์ ํด์ผ ํ๋ค.

๊ฝค ์ค์ํ ์์น๊ฐ ๋์๋ค.
์ด๋ฒ์๋ ์๋ฒ๊ฐ ๋ชป๋ฒํฐ๋ ๊ฒฐ๊ณผ ์์น๋ฅผ ๋ณด์.

404๋ ํด์ฌํ๊ทธ ๊ฒ์์์ ์๋ฌด ๊ฒฐ๊ณผ๋ ๋จ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฒ์ด๊ณ , ๋๋จธ์ง๋ ์์ ๊ฐ๋ฅํ ์ซ์๊ฐ ๋์๋ค.
๊ทธ๋ฐ๋ฐ ๋ณด๋ฉด min์ด 85.5ms๋๋ผ๋ max๊ฐ 55583.7ms, ์ฆ 55์ด๊ฐ ๋์จ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ผ๋จ median ๊ฐ์ด 20.4์ด์ด๋ฉฐ, ์ต๋ 55.6์ด, p95๋ 42.5์ด, p99๋ 50.9์ด๊ฐ ๋์๋ค.
์ฆ, ์ด๋ ํ ์๋๋ฆฌ์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ 49์ด๋ ๊ฑธ๋ ธ๋ค๋ ๊ฒ์ด๋ค.
๋ํ ์ค๊ฐ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด๋ฉด ํ ์คํธ๋ฅผ ์งํํ ์๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋๊ฐ ์ ์ ๋๋ ค์ง์ ์ ์ ์๋ค.
์ด๋ ์๋ฒ๊ฐ ์ง๊ธ ๋ถํ ํ ์คํธ๋ฅผ ํ๋ ์ ๋์ ์์ฒญ์ ๊ฐ๋นํ์ง ๋ชปํ๋ค๋ ๋ป์ด๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ด์ผ ํ๋ค.
์๋ฒ์ ์ฌ์์ ์ ๊ทธ๋ ์ด๋ํ๊ฑฐ๋, ์๋ฒ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๊ฑฐ๋, ์ฝ๋๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ง๊ธ ์ํฉ์์ ๋ ธ๋๊ฐ ์ฑ๊ธ ์ฝ์ด๋ง ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ํด๋ฌ์คํฐ๋ง ๊ฐ์ ๊ธฐ๋ฒ์ ํตํด ์๋ฒ๋ฅผ ์ฌ๋ฌ ๊ฐ ์คํํ๋ ๊ฒ์ ์ฐ์ ์ ์ผ๋ก ์๋ํด๋ณผ ๋งํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์์ฒญ-์๋ต ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ๋ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ด ์์๋๋ค.
์๋ฒ๋ ์ฌ๋ฌ๋๋ก ๋๋ฆฌ๊ธฐ ์ฝ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋๋ฆฌ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ ์์ฒญ์ด ๋ชฐ๋ฆฌ๊ณค ํ๋ค.
๋ฐ๋ผ์ ์ต๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ์์ฒญ์ ์ค์ด๋ฉด ์ข๋ค. ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ๋ ์บ์ฑ์ ํ๋ค๋์ง ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ์ผ์ ์ต๋ํ ์ค์ฌ์ฃผ๋๋ก ํ๋ค.
์๋ฒ์ ์ฑ๋ฅ๊ณผ ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ arrivalRate๋ฅผ ์ค์ด๊ฑฐ๋ ๋๋ ค ์์ ์ ์๋ฒ๊ฐ ์ด๋ ์ ๋์ ์์ฒญ์ ์์ฉํ ์ ์์์ง ํ ์คํธ ํด๋ณด๋ ๊ฒ์ด ์ข๋ค.
๋ํ ํ ๋ฒ๋ง ํ ์คํธํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ์ค์ ๊ฐ์ผ๋ก ํ ์คํธํ์ฌ ํ๊ท ์น๋ฅผ ๋ด๋ณด๋ ๊ฒ์ด ์ข๋ค.
์น์์ ๊ทธ๋ํ๋ก ๋ถ์ ํ๊ธฐ
์ข ๋ ์์ธํ๊ฒ visualizing ๋ ๋ด์ฉ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด report ๋ฅผ ์ฌ์ฉํด๋ณด์.
์๋ ์ปค๋งจ๋๋ฅผ ํตํด report ํ์ผ์ ์์ฑํ ์ ์๋ค.
$ npx artillery run -o myReport loadtest.json

์๋๋ฆฌ์ค ํ ์คํธ๋ฅผ ํ๊ณ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ํ์ผ์ธ myReport ๊ฐ ์์ฑ ๋์๋ค.
์ด์ ์ด๋ฅผ ์น์ผ๋ก ๋ณํํ๋ ์์ ์ ํด์ฃผ์
$ npx artillery report myReport


๊ทธ๋ฌ๋ฉด myReport.html ์นํ์ผ์ด ์์ฑ๋๋ค.
์คํํ๋ฉด ๊ทธ๋ํ๋ก ์ ๋์์ธ๋ ํ ์คํธ ๋ณด๊ณ ์ ํํ์ด์ง๋ฅผ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.


์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.