๋ฐฑ์๋ ์ธํ๋ผ #2 Artillery ๋ฅผ ์ด์ฉํด์ ์น ์ฑ๋ฅ ํ ์คํธํ๊ธฐ
by JiwonDev2021.10.19 - [๐ฑBackend/CI & CD] - ๋ฐฑ์๋ ์ธํ๋ผ #1 ์๊ฐ ๋ฐ ํ ์คํธ ์๋ฒ๋ง๋ค๊ธฐ
1ํธ์์ ๊ตฌ์ฑํ ์น ์๋ฒ๋ฅผ ํ ์คํธ ํด๋ด ์๋ค.
๋ฌผ๋ก ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋์๋๊ณ F5๋ฅผ ๋๋ฌ๊ฐ๋ฉฐ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง, Atrillery.io ๋ผ๋ ๋๊ตฌ๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ์ฑ๋ฅ์ ํ ์คํธ ํ ์ ์์ต๋๋ค. ๊ทธ ์ธ JMeter ๋ฑ์ ๋๊ตฌ๋ ์์ฃผ ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
Arrillery๋ Node.JS ์ npm์ ์ด์ฉํ์ฌ ์ค์นํฉ๋๋ค. ์๋ค๋ฉด ์ค์นํด์ฃผ์ธ์.
$ npm install -g artillery
#1. Artillery ์คํฌ๋ฆฝํธ ์์ฑ
๊ณต์๋ฌธ์์ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์๋์ ๊ฐ์ test.yaml ํ์ผ์ ๋ง๋ค์ด์ฃผ์ธ์.
config:
target: "http://34.64.209.57/"
phases:
- duration: 60 # n์ด ๋์
arrivalRate: 1 # n๋ช
์ ๊ฐ์ User๋ฅผ ์์ฑ (์ ์ ๋ ์ด๋น 1๋ฒ ์์ฒญ)
name: Warm up
scenarios:
- name: "just get hash" # ์ค๋ช
flow:
- get: # ํด๋น url์ get ์์ฒญ์ ํฉ๋๋ค.
url: "/hash/123"
#2. ์คํฌ๋ฆฝํธ ์คํ
npm์ผ๋ก ์ํธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค๋ฉด, ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํฌ ์ ์์ต๋๋ค.
artillery.cmd run --output report.json .\test.yaml
--output ์ผ๋ก ๊ฒฐ๊ณผ json ํ์ผ ์ด๋ฆ์ ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ ๋ช ๋ น์ด๋ก HTML ๋ณด๊ณ ์๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์.
# 3. ์น์๋น์ค ์ฑ๋ฅ ํ ์คํธ
์ ์ ์ ์ ์๋์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์ฑ๋ฅ ํ ์คํธ ํด๋ด ์๋ค.
artillery.cmd run --output report.json .\test.yaml
artillery.cmd report .\report.json
๋ณดํต ์น ์๋น์ค์ ๊ธฐ๋ ์ฑ๋ฅ์ Latency(์๋ต์๋)๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋จํฉ๋๋ค.
์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด Artillery ์คํฌ๋ฆฝํธ๋ฅผ [60์ด-์ด๋น 1๋ช ]์ผ๋ก ํ์ ๋์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์์ง๋ง, [60์ด-์ด๋น 8๋ช ]์ผ๋ก ํ์ ๋ ์๋ฒ์ ์๋ต์๋๊ฐ ๋๋ ค์ง์ ์ ์ ์์ต๋๋ค. ๋ ์ฌํ๊ฒ ํ ์คํธํ๋ค๋ฉด ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ฆฌ๊ธฐ๋ ํ๊ฒ ์ฃ .
๋ชฉํ๋ก ํ๋ ์๋ต์๋๊ฐ 200~300ms ๋ผ๋ฉด, ํด๋น ์๋ต์๋๊ฐ ๋์ค์ง ์์์ ๋ ์๋ฒ์ ์ฑ๋ฅ์ ๋๋ฆฌ๊ฑฐ๋(Scale-up) Nginx๊ฐ์ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ด์ฉํด ์๋ฒ์ ๋์๋ฅผ ๋๋ ค์ผ(Scale-out) ํฉ๋๋ค.
๋ํ ์์ ํธ๋ํฝ(TPS, HTTP Transcation Per Second)๊ฐ 1000์ ๋๋ผ๋ฉด, ์ ์ด๋ 2-3000์ ํธ๋ํฝ์ ๊ฐ๋นํ ์ ๋์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํด์ผํ๋ฉฐ ๋ง์ฝ Scale-out์ ํ๋๋ฐ๋ ์ฑ๋ฅ์ด ๋ณ ์ฐจ์ด๊ฐ ์๋ค๋ฉด, ๋ณ๋ชฉ์ ์์ฌํด์ผ ๊ฒ ์ฃ .
ํ ์คํธ๊ฐ ์งง์์ ๊ทธ๋ํ๊ฐ ๋จ์ํ์ง๋ง, ์ฝ๊ฐ ๋ ๊ธด์๊ฐ ๋์ ํ ์คํธํด๋ณด๋ฉด ์๋์ ๊ฐ์ ์๋ต์๋ ๊ทธ๋ํ๊ฐ ๋์ต๋๋ค.
๊ทธ๋ํ์ ๋ํด ์กฐ๊ธ๋ ์์ธํ๊ฒ ์ค๋ช ํด์ฃผ์๋ฉด
์ข์ธก ๋ ์ดํด์ : ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์์ request๋ฅผ ๋ณด๋ด๊ณ response๋ฅผ ๋ฐ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋๋ค.
max : ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฐ ์์ฒญ->์๋ต์๊ฐ
p95 : ์ ์ฒด HTTP ํธ๋์ญ์ ์ค ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒ๋ถํฐ 95% (๊ฑฐ์ ๋๋ถ๋ถ์ ํธ๋ํฝ)
p50 : ์ ์ฒด HTTP ํธ๋์ญ์ ์ค ๊ฐ์ฅ ๋น ๋ฅธ ๊ฒ๋ถํฐ 50% (์ ๋ฐ์ดํ์ ๋น ๋ฅธ ํธ๋ํฝ)
min : ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์จ ์์ฒญ->์๋ต์๊ฐ
์ด๋ ์ค์ ์ ๋ฐ๋ผ ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ, ๋ณดํต P99๋ P95 ๊ทธ๋ํ๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ๋คํธ์ํฌ์ ํน์ฑ์ ํ๋ฒ์ฉ ํ์ด ํ์ด ๋ ์ดํด์๊ฐ ๋๊ฒ ๋์ค๊ฑฐ๋, ๊ฐ์๋จธ์ (VM)์ ํน์ฑ์ ์ ๊น๋์ ์ ์ฑ๋ฅ์ ๋ชป๋ด๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์, max๋ min์ ์ฐธ๊ณ ํ๋๊ฑด ๋ฐ๋์งํ์ง ์์ต๋๋ค.
#4. ์ค์ ๋ก ์ ์ฉํ ๋ ํ
- ์ค์ ์๋น์ค์์๋ ๊ฐ๊ธ์ ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ๊ธธ๊ฒ ํ ์คํธ ํ๋๊ฒ ์ข์ต๋๋ค.
- ์ค์ ์ ์ ๋ค์ ํจํด๊ณผ ๋น์ทํ๊ฒ ์๋๋ฆฌ์ค๋ฅผ ๋ง๋ค์ด์ ํ ์คํธํ๋๊ฒ ์ข์ต๋๋ค.
- ํฐ ์๋น์ค๋ผ ํ ์คํธ ํธ๋ํฝ์ด ๋ง์ด ํ์ํ๋ฉด ์๋ฒ ์ฌ๋ฌ ๋๋ฅผ ํด๋ฌ์คํฐ๋งํ์ฌ Atrillery ๊ฐ์ ํด์ ์คํ์ํค๋ฉด ๋ฉ๋๋ค.
์๋น์ค ์๋๋ฆฌ์ค๋ ์๋์ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
[ ๋ฉ์ธํ์ด์ง ์ง์ ] -> [ ํน์ ์นดํ ๊ณ ๋ฆฌ ์ง์ ] -> [ ์ ํ ํ์ด์ง ] ->
[ ๊ฒฐ์ ํ์ด์ง ] -> [ ๊ฒฐ์ ์์ฒญ ] -> [ ๊ฒฐ์ ์๋ฃ ] -> [ ๋ฐฐ์ก์กฐํ ํ์ด์ง ] ->
[ ๋ฆฌ๋ทฐ ๋ชฉ๋ก ] -> [ ๋ฆฌ๋ทฐ ์์ฑ ]
๋ฌผ๋ก ์์ ๊ณผ์ ๋ค์ด ์ฐ์์ ์ผ๋ก ์ผ์ด๋์ง๋ ์๊ฒ ์ง๋ง, ์ฌ์ฉ์๋ณ ์๋น์ค ์ด์ฉํจํด์ ์ฌ๋ฌ๊ฐ ๋ง๋๋๊ฒ ์ข์ต๋๋ค.
1. ๋ง๋ ์๋๋ฆฌ์ค๋ฅผ ๋ฐํ์ผ๋ก ์์ ํธ๋ํฝ์ ์ค์ ํด๋ณด๊ณ , ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์งํํฉ๋๋ค.
2. ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์งํํ๋ฉฐ ์ด๋๊ฐ ๋ณ๋ชฉ์ด ์๊ธฐ๋์ง ํ์ ํฉ๋๋ค.
์ด ๋ ๋คํธ์ํฌ ๋ณ๋ชฉ๊ณผ ๋๋ถ์ด ์๋ฒ, DB ์์์ ๋ํ ๋ชจ๋ํฐ๋ง(Cpu, memory, I/O)๋ ์ถ๊ฐ๋ก ํด์ฃผ๋ฉด ์ข์ต๋๋ค.
3. ์ ํ ์คํธ๋ฅผ ๋ฐํ์ผ๋ก ์๋น์ค ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ฑฐ๋, ์์คํ ์ฅ๋น, ์ค๊ณ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
4. ์๋น์ค๋ฅผ ์คํํ ์ดํ์๋ ์๋ฒ ๋ฆฌ์์ค์ ๋ํ ๋ชจ๋ํฐ๋ง์ ์ค์ํ๋ฉฐ ๊ฐ์ ์ ์ ํ์ ํฉ๋๋ค.
#5. ๋คํธ์ํฌ ๋ณ๋ชฉ ๋ฌธ์
์๋ฒ ์ฑ๋ฅ์ ์งฑ์งฑํ๋ฐ TPS๊ฐ ๋๋ฆฌ๊ฒ ๋์ค๋ ๋คํธ์ํฌ์ ๋ณ๋ชฉ๋ฌธ์ ๋ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
Latency ๋ณ๋ชฉ ๋ฌธ์ ์ ๋์ญํญ(Bandwidth) ๋ณ๋ชฉ ๋ฌธ์ .
- Latency๋ ๋ ์ง์ ์ฌ์ด์ ํจํท์ด ์ค๊ณ ๊ฐ๋๋ฐ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ ๊ฑธ๋ฆฌ๋์ง๋ฅผ ์๋ฏธํฉ๋๋ค. (ping)
- Bandwidth์ ๋ ์ง์ ์ฌ์ด์ ์ด๋น ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋์ด ํ๋ฅผ ์ ์๋๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
์จ๋ผ์ธ ๊ฒ์์ ๊ฒฝ์ฐ ๋ ์ดํด์๋ ๋งค์ฐ ์ค์ํ์ง๋ง, ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋์ ํฌ์ง ์์ต๋๋ค.
ํ์ผ ๊ณต์ ์๋น์ค์ ๊ฒฝ์ฐ ๋ ์ดํด์๋ ์กฐ๊ธ ๋๋ ค๋ ๋์ง๋ง, ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ปค์ ๋์ญํญ์ ์๋นํ ํฝ๋๋ค.
- ์๋ฒ Latency์ ๋ณ๋ชฉ ๋ฌธ์ ๊ฐ ์์ฌ๋๋ค๋ฉด ๋ ์ง์ ์ฌ์ด ๋คํธ์ํฌ ์๊ฐ์ ์ค์ผ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ด์ผ ํฉ๋๋ค. ๋ง์ฝ ์๋ก ๋ค๋ฅธ ๋๋ผ์์ ์ ์ํ๋ค๋ฉด ๊ฐ ๋๋ผ์ ์บ์ ์๋ฒ๋ฅผ ๋๋ ๊ฒ๋ ํด๊ฒฐ์ฑ ์ค ํ๋๊ฐ ๋ ์ ์์ต๋๋ค.
- ์๋ฒ Bandwidth์ ๋ณ๋ชฉ ๋ฌธ์ ๊ฐ ์์ฌ๋๋ค๋ฉด, ์ด๊ฑด ์ ์ก๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ถํ์ฌ ์ ์กํ๊ฑฐ๋ ์ธํฐ๋ท ์๋น์ค ์ ์ฒด๋ฅผ ํตํด ํ์ ์ ๋ฐ๊พธ๋ ์ ๋ฐ์ ์์ต๋๋ค.
์ฆ ๋คํธ์ํฌ ๋ฌธ์ ๋ฅผ ํ์ ํ๊ธฐ ์ํด์๋ ์ 2๊ฐ์ง๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ๋ํด๋๊ณ , ๋ค๊ฐ์ ์ผ๋ก ๋ถ์ํ๋ ์ต๊ด์ด ํ์ํฉ๋๋ค
- ๋ด๋ถ ์์คํ ์์ ๋ค๋ฅธ ์๋ฒ, DB ์ฌ์ด์ ์๊ธฐ๋ ๋คํธ์ํฌ๊ฐ ์ง์ฐ๋๋๊ฑด๊ฐ?
- ์ธ๋ถ๋ก ํธ์ถ๋๋ API๊ฐ ์ง์ฐ๋๋๊ฑด๊ฐ?
- ์ฌ์ฉ์์ ์ฐ๋ฆฌ ์๋ฒ์ฌ์ด์ ์ง์ฐ๋๋๊ฑด๊ฐ?
- ์๋ฒ์ ์ฑ๋ฅ์ด ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ์ ๋ถ์กฑํ๊ฐ?
'๐ฑBackend > CI & CD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์๋ ์ธํ๋ผ #1 ์๊ฐ ๋ฐ ํ ์คํธ ์๋ฒ๋ง๋ค๊ธฐ (0) | 2021.10.19 |
---|
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev