์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™” ํ•ด์ฃผ์„ธ์š”

JMeter

 ·  โ˜• 4 min read  ·  โœ๏ธ brinst · ๐Ÿ‘€... ์กฐํšŒ์ˆ˜

JMeter๋ž€??

Apach JMeter๋Š” ์›จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ค‘์ ์„ ๋‘” ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๊ณ  ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” Apache ํ”„๋กœ์ ํŠธ์ด๋‹ค(Wikipedia ์ฐธ์กฐ)

JMeter๋ฅผ ์ด์šฉํ•˜๋ฉด ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํ•˜๋ฅผ ๊ฑธ์–ด ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋งˆ์นจ ํšŒ์‚ฌ์—์„œ JMeter์— ๋Œ€ํ•œ ์„ธ๋ฏธ๋‚˜๊ฐ€ ์—ด๋ ค ์ฐธ์„ ํ›„ ์ด์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ํฌ์ŠคํŒ…์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

JMeter ์„ค์น˜

JMeter๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ผ๋‹จ ๋จผ์ € ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

JMeter ํ™ˆํŽ˜์ด์ง€

์œ„ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๊ฒŒ ๋˜๋ฉด Binaries์— ๋‘๊ฐ€์ง€ ๋ฒ„์ „์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ,
zip์€ ์œˆ๋„์šฐ์—์„œ tgz๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ด ํฌ์ŠคํŒ…์€ zip๋ฒ„์ „์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.

์••์ถ•์„ ํ•ด์ œํ•˜๊ณ  bin ํด๋”์— ๋“ค์–ด๊ฐ€๋ณด๋ฉด ApachJMeter Jar ํŒŒ์ผ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค.
image

์œ„ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด JMeter ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค.

image

์œ„ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค๋ฉด ์„ค์น˜ํ•˜๋Š”๋ฐ ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค

JMeter ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ ์ค€๋น„ํ•˜๊ธฐ

์ด์ œ JMeter๋ฅผ ์„ค์น˜ํ–ˆ์œผ๋‹ˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
์ขŒ์ธก ์ƒ๋‹จ์— ๋ณด๋ฉด ํ…Œ์ŠคํŠธ ๊ณ„ํš์— ํ•˜์œ„ ํ•ญ๋ชฉ๋“ค์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

Thread Group

Thread Group์ด๋ž€, JMeter์—์„œ ๋‹ค์–‘ํ•œ ํ•˜์œ„ Element ํ•ญ๋ชฉ๋“ค์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ ์ด๋‹ค. Thread Group์„ ์ƒ์„ฑํ•˜๋ฉด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ์‹œ ์›ํ•˜๋Š” ํ•ญ๋ชฉ๋“ค๋„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํ•ญ๋ชฉ๋“ค์ด ๋‚˜์˜จ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ณ„ํš์— ์“ฐ๋ ˆ๋“œ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž
image

์“ฐ๋ ˆ๋“œ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
image

๋‹ค๋ฅธ ํ•ญ๋ชฉ๋“ค์€ ํ•œ๊ธ€๋กœ ํ•ด์„๋˜์–ด ์žˆ๊ธฐ์— ramp up ์‹œ๊ฐ„๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์“ฐ๋ ˆ๋“œ๋“ค์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
๋งŒ์•ฝ ์“ฐ๋ ˆ๋“œ๋ฅผ 30๊ฐœ ์ฃผ๊ณ  ramp-up์„ 120์ดˆ๋ฅผ ์ค€๋‹ค๊ณ  ํ•˜๋ฉด, ๊ฐ 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ 4์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

Loop Count

ํ•œ Thread ๋‹น sampler๋กœ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ช‡ ๋ฒˆ ๋Œ๋ฆด์ง€๋ฅผ ์„ค์ •

๋‹ค์Œ ์ž‘์—…์œผ๋กœ ๋„˜์–ด๊ธฐ๊ฐ€์ „์— ๋จผ์ € ํ…Œ์ŠคํŠธํ•˜๊ธธ ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์‹คํ–‰ํ•˜๊ณ , Proxy์„ค์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.

Proxy๋ž€?

Proxy๋ž€ '๋Œ€๋ฆฌ'๋ผ๋Š” ์˜๋ฏธ๋กœ, ๋„คํŠธ์›Œํฌ ๊ธฐ์ˆ ์—์„œ๋Š” ํ”„๋กœํ† ์ฝœ์— ์žˆ์–ด์„œ ๋Œ€๋ฆฌ ์‘๋‹ต ๋“ฑ์—์„œ ์นœ์ˆ™ํ•œ ๊ฐœ๋…์ด๋‹ค.
๋ณด์•ˆ ๋ถ„์•ผ์—์„œ๋Š” ์ฃผ๋กœ ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ ์ง์ ‘ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋Š” ๋‘ ์  ์‚ฌ์ด์—์„œ ํ†ต์‹ ์„ ํ•  ๊ฒฝ์šฐ ๊ทธ ์‚ฌ์ด์— ์žˆ์–ด์„œ ์ค‘๊ฒŒ๊ธฐ๋กœ์„œ ๋Œ€๋ฆฌ๋กœ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฆฌ์ผœ 'ํ”„๋ก์‹œ', ๊ทธ ์ค‘๊ณ„ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์„ 'ํ”„๋ก์‹œ ์„œ๋ฒ„'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ”„๋ก์‹œ ์„ค์ •์„ ์ง„ํ–‰ํ•จ์œผ๋กœ์จ JMeter๋ฅผ ์ค‘๊ณ„๊ธฐ๋กœ ๋‘๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์œˆ๋„์šฐ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰์ฐฝ์— ํ”„๋ก์‹œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”„๋ก์‹œ ์„ค์ • ๋ณ€๊ฒฝ ๋ฉ”๋‰ด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
image

์„ค์ • ๋ฉ”๋‰ด๋กœ ์ง„์ž…ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋‰ด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

ํ•˜๋‹จ์ฒ˜๋Ÿผ ์ฃผ์†Œ์—๋Š” ํ…Œ์ŠคํŠธ ํ•˜๊ณ  ์‹ถ์€ ์ฃผ์†Œ ํฌํŠธ์—๋Š” ์›ํ•˜๋Š” ํฌํŠธ๋ฅผ ์ž…๋ ฅํ•ด์ค€๋‹ค.

๋‚˜๋Š” ๋กœ์ปฌ์„œ๋ฒ„๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— localhost๋ฅผ ์ž…๋ ฅํ•ด์คฌ๋‹ค.
image

์„ค์ •์„ ์™„๋ฃŒํ•˜๊ณ  ์ €์žฅ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ”„๋ก์‹œ ์„ค์ •์ด ์™„๋ฃŒ ๋˜์—ˆ๋‹ค.

HTTP(S) Test Script Recorder

Proxy๋ฅผ ์„ค์ •ํ•˜์—ฌ ์š”์ฒญ URL์„ ์ˆ˜์ง‘ํ•˜์—ฌ sampler๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด๋‹ค.
Recorder๋ฅผ ํ‚ค๊ณ  ๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์›น์ƒ์—์„œ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์ด ํ–‰๋™๋“ค์ด ๋…นํ™”๋˜์–ด ๋˜‘๊ฐ™์ด ํ…Œ์ŠคํŠธ๋œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ํŽธํ•˜๋‹ค.

image

ํ…Œ์ŠคํŠธ ๊ณ„ํš์— ์ •์ƒ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

image

์ด์–ด์„œ ํ”„๋ก์‹œ ์„ค์ •์‹œ ์ง„ํ–‰ํ•œ ํฌํŠธ ๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ๊ณ 
ํƒ€๊ฒŸ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ…Œ์ŠคํŠธ ๊ณ„ํš์ƒ์„ฑ ํƒญ์—์„œ ํ…Œ์ŠคํŠธ๊ณ„ํš > ์“ฐ๋ ˆ๋“œ ๊ทธ๋ฃน์œผ๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.

๋˜ํ•œ ํ•˜๋‹จ์˜ Redirect๋“ค์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ๋ฅผ ํ•ด์ œํ•ด์ค€๋‹ค.
image

์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์‹œ์ž‘๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ํ…Œ์ŠคํŠธ ์›ํ•˜๋Š” ์ž‘์—…์„ ๋…นํ™”ํ•œ๋‹ค.

image

์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์ค‘์ง€๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์“ฐ๋ ˆ๋“œ ๊ทธ๋ฃน์„ ์—ด์–ด๋ณด์ž
๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŽ์€ ํ•ญ๋ชฉ๋“ค์ด ์ƒ๊ฒผ์„ ๊ฒƒ์ด๋‹ค.
์ด sampler๋ฅผ ๊ฐ€์ง€๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

image

์ด์ œ ํ…Œ์ŠคํŠธ๊ณ„ํš์„ ์ €์žฅํ•ด๋ณด์ž
ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์„ ํƒํ•˜๊ณ  ์ €์žฅ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด jmxํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
image

JMeter๋กœ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ

์œ„์—์„œ jmxํŒŒ์ผ๋„ ์ค€๋น„ํ–ˆ๊ณ  ์„ค์น˜๋„ ์™„๋ฃŒํ–ˆ์œผ๋‹ˆ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋„๋ก ํ•˜์ž.
๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋ฉด ๋œ๋‹ค.

$(์œ„์น˜)jmeter.sh -n -t (jmxํŒŒ์ผ์œ„์น˜) -j (output์œ„์น˜)/output/run.log -l (output์œ„์น˜)/output/result.jtl -e -o (output์œ„์น˜)/output/html 

์ด ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด jmeter.sh๋กœ jmx์„ ์‹คํ–‰ํ•˜์—ฌ outputํŒŒ์ผ๋“ค์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

result ํŒŒ์ผ๋“ค์„ ๋ณด๋ฉฐ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Jmeter๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ dstat์„ ์‚ฌ์šฉํ•˜๋ฉด cpu๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋“ฑ ํ•˜๋“œ์›จ์–ด ๋ถ€ํ•˜์— ๋Œ€ํ•œ ์ˆ˜์น˜๋ฅผ ์‰ฝ๊ฒŒ ์‚ดํŽด ๋ณผ์ˆ˜ ์žˆ๋‹ค.

dstat

  1. ์„ค์น˜
    yum install dstat

  2. ์‚ฌ์šฉ

    dstst์„ ์˜ต์…˜์—†์ด ์‹คํ–‰ํ•˜๋ฉด -cdngy ์˜ต์…˜์„ ์ค€๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฉฐ, CPU,disk,network,paging,system ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉฐ ๋ณด์—ฌ์ค€๋‹ค.

  3. ๋กœ๊ทธํŒŒ์ผ ํŒŒ์ผ๋กœ ์ €์žฅ

    dstat --output dstat-log.csv -cdnpmrt

๋จผ์ € dstat์„ ์‹คํ–‰ํ•œ ๋’ค์— run์„ ์‹คํ–‰ํ•˜์—ฌ jmeter๋กœ result ํŒŒ์ผ์œผ๋กœ๋Š” ์‘๋‹ต์†๋„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ , dstat์œผ๋กœ ํ•˜๋“œ์›จ์–ด ๋ถ€ํ•˜๋Ÿ‰์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณผ์ˆ˜ ์žˆ๋‹ค.

๊ณต์œ ํ•˜๊ธฐ

brinst
๊ธ€์“ด์ด
brinst
Backend Developer

๋ชฉ์ฐจ