Performance Test
๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํ ์คํธํ๊ธฐ ๊ฐ์๋ฅผ ์์ฝํ ๋ด์ฉ์ ๋๋ค.
Intro
์ฑ๋ฅ ํ ์คํธ ํด์ ํ์ฉํ์ฌ ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ์์๋๋ ์ฌ์ฉ์ ์์ ๊ทธ์ ๋ฐ๋ฅธ ์์ฒญ ์๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ณ์ฐ์ ํตํด ์ผ๋ง๋ ๋ง์ ์์ ์๋ฒ๊ฐ ํ์ํ์ง ํ ์คํธ
์ฑ๋ฅ ํ ์คํธ๊ฐ ํ์ํ ์ํฉ
๋นํจ์จ์ ์ผ๋ก ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง ๊ฐ์ (GC ..)
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ ์ฅ์์ ๋ํ ์ฑ๋ฅ ๊ฐ์ (Index, DeadLock ..)
์์คํ ์ค๊ณ ๊ฐ์ (๋น๋๊ธฐ์ ์ธ ๊ตฌ์กฐ, Circuit Breaker ..)
์ฐธ๊ณ .
ํธ๋ํฝ: ๋คํธ์ํฌ๋ฅผ ํตํด ํ๋ฅด๋ ๋ฐ์ดํฐ
ํธ๋ํฝ์ด ๋ง๊ณ ์ ์์ ๊ธฐ์ค์ ์๋์
์ฑ๋ฅ ํ ์คํธ = ๋ถํ ํ ์คํธ = ์คํธ๋ ์ค ํ ์คํธ
๋ฐฐ๊ฒฝ์ง์
์ง์ฐ์๊ฐ๊ณผ ์ฒ๋ฆฌ๋
์ง์ฐ์๊ฐ(Latency
)
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๋ฐ๊ธฐ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ
์ฃผ๋ก ms, s ๋จ์
์ฒ๋ฆฌ๋(Throughput
)
๋จ์ ์๊ฐ๋์ ๋ช๊ฑด์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง (๋ฐ์ดํฐ์ ์ ์ก๋)
์ฃผ๋ก TPS(Transaction Per Second) ๋จ์
์ฐธ๊ณ . ๋์ญํญ(Bandwidth
)
๋คํธ์ํฌ์์ ์ ์๋ฏธํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ ๊ฐ๋
๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ๋ฌ ์์๋ค์ ๊ฐ์ญ์ผ๋ก ์ ํํ ๋์ญํญ ์ธก์ ์ด ์ด๋ ค์
๋คํธ์ํฌ๊ฐ ๋จ์์๊ฐ ๋์ ์ ์กํ ์ ์๋ ์ต๋ํ์ ์ฒ๋ฆฌ๋
ํด๋น ๋คํธ์ํฌ๋ฅผ ์ต๋ํ์ผ๋ก ํ์ฉํ์ ๋ ์ผ๋ง๋ ๋น ๋ฅธ ์๋๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋๊ฐ
์ฒ๋ฆฌ๋์ ๊ณ์ ์ฌ๋ฆฌ๋ฉด์ ํ ์คํธํ๋ค ๋ณด๋ฉด ๋์ญํญ์ ๊ฐ๊น์์ง ์ ์์
.
์ฑ๋ฅ ํ ์คํธ ๋ชฉํ
์ฑ๋ฅ ํ ์คํธ ๋ชฉํ๋ ์์๋๋ ์๋น์ค ์ด์ฉ์์ ์ซ์์ ์ฌ์ฉ์๋ค์ด ์์ฉํ ์ ์๋ ์ง์ฐ์๊ฐ
์ฑ๋ฅ์ ์ธก์ ์
์ฒ๋ฆฌ๋
๊ณผ์ง์ฐ์๊ฐ
์ ๋ชจ๋ ์ธก์ ์ฌ์ฉ์๋ค์ด ๋ถํธํจ์ ๋๋ผ์ง ์๋๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด ์ด๋ ์ ๋์ ์ง์ฐ์๊ฐ ๋ฏธ๋ง์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ๋์ง์ ์
์ฑ๋ฅ ํ ์คํธ์๋ ๋ง์ ๋ณ์๊ฐ ์์ผ๋ฏ๋ก 95~99% ์์ค์ ๋ชฉํ๋ฅผ ์ ์ฉ
์์ฒญ์ ์ด๋น 1๊ฐ๋ง ์ฒ๋ฆฌํ๋ฉด ์ง์ฐ์๊ฐ์ด ๋ฎ๊ฒ ๋์ค๊ฒ ์ง๋ง,
์ฒ๋ฆฌ๋์ ๋๋ฆฌ๋ฉด ์ง์ฐ์๊ฐ๋ ํจ๊ป ๋์ด๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์ด์์ฒด์ ์ ์๋ฒ ์์
์ด์์ฒด์ (OS, Operating System)
์๋ฒ์ ๋ฌผ๋ฆฌ์ ์ธ ์์์ ๊ด๋ฆฌํ๋ฉฐ ํ๋ก์ธ์ค๋ผ๋ ๋จ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ
CPU
ํ๋ก์ธ์ค ์คํ
๊ณ์ฐ ์์ , ์ด๋ฏธ์ง, ์์ ์ธ์ฝ๋ฉ
์ํธํ, ํด์ํ
RAM
ํ๋ก์ธ์ค = ๋ฉ๋ชจ๋ฆฌ(Stack, Heap..) + ์ฝ๋
CPU์ ํจ๊ป ๋ง์ด ์ฌ์ฉ
์ธ์คํด์ค ๋๋ ์์ฑ, ์บ์ฑ, ์ปฌ๋ ์ ๊ฐ์ฒด ๋ฑ
DISK
Program
ํ์ผ ์ ์ถ๋ ฅ, ๋ก๊ทธ ๋๋ ๋ฐ์
DB ๋ฐ์ดํฐ ๋๋ ์ ์ถ๋ ฅ
CPU
ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ์ฝ๋์ ๋ฐ๋ผ ์คํ์ํค๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ด์ฉ์ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ
RAM
ํ๋ก์ธ์ค: ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ (๋ฉ๋ชจ๋ฆฌ + ์ฝ๋)
๋ฉ๋ชจ๋ฆฌ๋ ์ฝ๋์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ์ฌ์ฉ๋๋ ํํ
ํ์ด์ง: ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ ์ค ์ผ๋ถ๋ฅผ ๋์คํฌ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค๊ฐ ๋ถ๋ฌ์ค๋ ๊ณผ์
DISK
ํ๋ก๊ทธ๋จ: ๋์คํฌ์ ์ ์ฅ๋์ด ์๋ ์คํ๋ ์ ์๋ ํ์ผ์ด๋ ์ํํธ์จ์ด ์งํฉ(exe, jar ..)
ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์๋ก ์ฌ๋ผ์์ ์คํ(=ํ๋ก์ธ์ค)
์ง์ฐ์๊ฐ, ์ฒ๋ฆฌ๋๊ณผ์ ๊ด๊ณ
(1) ํด๋ผ์ด์ธํธ ์์ฒญ ์ฆ๊ฐ
(2) ์ฒ๋ฆฌ๋ ์ฆ๊ฐ
(3) ์๋ฒ ์์ ์ฌ์ฉ๋ ์ฆ๊ฐ
(4) ํ๋ก์ธ์ค, ์ค๋ ๋ ๊ฐ ์์ ์ฌ์ฉ์ ์ํ ๋๊ธฐ ์๊ฐ ์ฆ๊ฐ
๊ฒฝ์์ ์ธ ์ํ -> ์ฒ๋ฆฌ๋์ด ๊ธฐ๋ ์ด์์ผ๋ก ๊ฐ์
(5) ์ง์ฐ ์๊ฐ ์ฆ๊ฐ
(6) ๋ฏธ์ฒ๋ฆฌ ์์ฒญ ์ฆ๊ฐ
(7) ์์ฒญ ์ค ์ผ๋ถ ์คํจ
ํ๋ก์ธ์ค ์คํ์ ์ํด CPU, Memoery, Disk๊ฐ ์๋ก ์ํธ์์ฉ
์ฑ๋ฅ ํ ์คํธ ์ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ ์ค ์ฌ์ฉ๋ฅ ์ด ๋์์ง๋ ์์์ด ์๋ค๋ฉด ํด๋น ์์์ ์ฌ์ฉ๋ฅ ์ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด ๋ณด์.
ํจ๊ณผ์ ์ผ๋ก ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ค๋ฉด ์๋ฒ ์์์ ๋ํ ๋ชจ๋ํฐ๋ง๋ ์ค์.
๋คํธ์ํฌ
๋คํธ์ํฌ๋ ์ฑ๋ฅ ํ ์คํธ์์ ์ค์ํ ์์
๋คํธ์ํฌ๋ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ์ ์ ์ฝ์ ๋ง์ด ๋ฐ์(๋ผ์ฐํฐ์์์ ์ฐ์ฐ๋ ํ์)
API ๋ด์์ ์ธ๋ถ ์๋ฒ(๋ฐ์ดํฐ ๋ฒ ์ด์ค, ์ธ๋ถ API) ํธ์ถ ์ ๋คํธ์ํฌ ํต์ ์ด ๋ฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๊ฒฝ์ฐ ์บ์๋ฅผ ํ์ฉํ๊ฑฐ๋ DB ์๋ต์ด ๋นจ๋ผ์ง๋๋ก ๊ฐ์ ๊ฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค
CPU
์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฐ์ดํฐ์ธ์ง ํ์ธ
RAM
๋ฐ์ดํฐ๋ฅผ CPU๊ฐ ์ฐ์ฐํ ์ ์๊ฒ ์ค๋น ํน์ ์บ์
DISK
๋ฐ์ดํฐ๋ค์ด ์ ์ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ฐ์๊ฐ์ด ๊ธธ์ด์ง๋ ์ํฉ
์งง์ ์๊ฐ๋์ ๋ง์ ์์ฒญ์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ (์ฒ๋ฆฌ๋ ์ฆ๊ฐ)
๋ง์ ๋ฐ์ดํฐ ์ค ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ
์ธ๋ฑ์ค๋ก ๊ฐ์ ๊ฐ๋ฅ
ํ๋ฒ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ์ค์ผ ํ ๊ฒฝ์ฐ
๋ฝ์ด ๋๋ฌด ์์ฃผ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ
์ค๋ ๋ ํ๊ณผ ์ปค๋ฅ์
ํ
๊ธฐ๋ณธ ์ค์ ๊ฐ์ด ์๋ค๋ณด๋ ์ฑ๋ฅ ํ ์คํธ์์ ํ๋์ด ํ์ํ ์์
์ฑ๋ฅ ํ ์คํธ์์ ๊ฐ์ฅ ๋จผ์ ๋ฌธ์ ๊ฐ ๋ํ๋๋ ์์
Thread Pool
์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํ๋ ์์
ํฐ์บฃ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก 200๊ฐ์ ์ค๋ ๋๊ฐ ์์ฑ
์ค๋ ๋๋ค์ ๋ฏธ๋ฆฌ ์์ฑ๋์ด ์์ฒญ์ ์ฒ๋ฆฌํ ํ ๋ฐ๋ฉ
์ง์ฐ ์๊ฐ์ด ๊ธธ์ด์ง ๊ฒฝ์ฐ
๋ชจ๋ ์ค๋ ๋๋ ์ฌ์ฉ์ค์ธ ์ํ๊ฐ ๋๊ณ , ์ผ๋ถ ์์ฒญ์ ํ์ ์ ์ฅ๋์ง๋ง ํ๋ ๋ชจ๋ ์ฐฐ ๊ฒฝ์ฐ ์ดํ ์์ฒญ์ ๋ฒ๋ ค์ง๊ฒ ๋๋ค.
์ค๋ ๋ ์์ ๋ฌด์์ ๋๋ฆฌ๊ฒ ๋๋ฉด ์ ์ ์์ ์ค๋ ๋๋ณด๋ค ์ฒ๋ฆฌ๋์ด ๋ฎ์์ง ์ ์๋ค.
์ด ๊ฒฝ์ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ์ฌ๋ฌ ์๋ฒ๊ฐ ํธ๋ํฝ์ ๋ฐ๋๋ก ํ๊ฑฐ๋ ๋น๋๊ธฐ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ ์ด ํ์
Connectino Pool
์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์์
์ค๋ ๋ ํ๊ณผ ๋์ผํ ๋ฌธ์ ์กด์ฌ
์ค๋ ๋ ํ๊ณผ ์ปค๋ฅ์ ํ์ ์ฌ๋ฌ ๋ฒ์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํตํด ์ ์ ํ ์ซ์๋ฅผ ์ฐพ์ ์ค์ ํ์.
์ฑ๋ฅ ํ
์คํธ์ ๋ฐฉํฅ์ฑ
(1) ํ ๊ฑด์ฉ ์์ฒญ์ ๋ณด๋ด์ ์ง์ฐ์๊ฐ์ด ์ด๋์ ๋ ๋์ค๋์ง ํ ์คํธ
(2) ์ฒ๋ฆฌ๋์ ๋์ด๋ฉด์ ํ์ฌ ์ธํ๋ผ ๊ตฌ์ฑ์์ ์ง์ฐ์๊ฐ์ด ์น์๋ ์ง์ ์ฐพ๊ธฐ
(3) ์ด๋ค ๋ถ๋ถ์ด ๋ณ๋ชฉ์ด ๋๋๊ฑด์ง ๊ฐ์ค์ ์ธ์๋ณด๊ณ ์๋ฒ ์์ ๋ชจ๋ํฐ๋ง, ๋ก๊ทธ ๋ฑ์ ํตํด ๋ณ๋ชฉ ์ง์ ํ์
(4) ๋ณ๋ชฉ์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ ์ ์ฉ
Artillery
First Artillery Test
Create an Artillery test script
๊ธฐ๋ณธ ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฑ
์ฑ๋ฅ ํ ์คํธ ์คํ
test-config.yaml
ํ์ผ์ ์ฌ์ฉํด์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ๊ณ ๊ฒฐ๊ณผ๋กreport.json
ํ์ผ ์์ฑ
์ฑ๋ฅ ํ ์คํธ ๋ก๊ทธ
min
,max
,median
์ latency๋ฅผ ์๋ฏธp95
,p99
๋ ๊ฐ๊ฐ 95%, 99% ์ฌ์ฉ์๊ฐ ์ด๋ ์ ๋๋ฅด latency๋ฅผ ๋๋ผ๊ณ ์๋์ง200 Codes
๋ 1์ด๋ง๋ค 5๊ฐ์ ์์ฒญ์ ํ๋ฏ๋ก 10์ด๋น 50๊ฐ์ต๊ณต ๊ฒฐ๊ณผ์๋ 1์ด * 5๊ฐ * 60์ด = 300๊ฐ์ ๊ฒฐ๊ณผ
๊ฒฐ๊ณผ ํ์ผ(report.json) html ํ์ผ๋ก ๋ณํ
Scenario Test
์๋๋ฆฌ์ค ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฑ
์ฑ๋ฅ ํ ์คํธ ๋ก๊ทธ
Parameter Test
payload - loading data from CSV files
ํ๋ผ๋ฏธํฐ ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฑ
์ฑ๋ฅ ํ ์คํธ ๋ก๊ทธ
High Load Test
ํ๋ผ๋ฏธํฐ ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฑ
์ฑ๋ฅ ํ ์คํธ ๋ก๊ทธ
์ฐธ๊ณ
๋ค๋ฅธ ์๋ฅ ํ ์คํธ ํด
..
์ ์์ ์ธ ํ ์คํธ๋ฅผ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ๋ถ๋ฆฌ๋ ์๋ฒ์์ ์คํ ๊ถ์ฅ
Last updated