๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] ์„ฑ๋Šฅ ์ตœ์ ํ™” 1ํŽธ - ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ngrinder ์„ค์น˜ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐’๐ฉ๐ซ๐ข๐ง๐ 

[Spring] ์„ฑ๋Šฅ ์ตœ์ ํ™” 1ํŽธ - ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ngrinder ์„ค์น˜ํ•˜๊ธฐ

๐ŸคRyusun๐Ÿค 2024. 3. 9. 00:36

ngrinder

  • ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. nGrinder๋Š” Java ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  nGrinder์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ€์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค์–ด ํŠธ๋ž˜ํ”ฝ์— ๋ชฐ๋ ธ์„ ๋•Œ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

1. ngrinder ์„ค์น˜ํ•˜๊ธฐ

https://github.com/naver/ngrinder/releasesโ€‹ ์—์„œ ngrinder-controller-3.5.5-p1.war ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋œ๋‹ค.

 

๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ngrinder ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ์„ ์œ„์น˜์‹œํ‚ค์ž.

ํ•ด๋‹น ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ 

java -jar ngrinder-controller-3.5.9.war --port=8300 ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์‹คํ–‰๋œ๋‹ค.

java -jar ngrinder-controller-3.5.9.war --port=8300

 

 

ํ•˜์ง€๋งŒ ์—๋Ÿฌ๋ฐœ์ƒ...

ํ•ด๋‹น ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ nGrinder ์ปจํŠธ๋กค๋Ÿฌ(ngrinder-controller.war)๋ฅผ ์‹คํ–‰ํ•  ๋•Œ java.io.tmpdir ์†์„ฑ์„ ์„ค์ •ํ•˜๋ผ๋Š”๊ฑฐ๋‹ค.

 

ERROR

Please set `java.io.tmpdir` property like following. tmpdir should be different from the OS default tmpdir.

`java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller.war`

 

 

ํ•ด๊ฒฐ์ฝ”๋“œ

์•„๋ž˜ ์ฝ”๋“œ๋กœ ์‹คํ–‰์‹œ ํฌํŠธ ์ถฉ๋Œ์ด ๋‚˜์„œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค! ๋”ฐ๋ผ์„œ ์Šคํ”„๋ง๋ถ€ํŠธ ํฌํŠธ๋ฅผ 8082๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ ์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž˜ ์‹คํ–‰์ด ๋œ๋‹ค!!

// java -Djava.io.tmpdir={ngrinder์„ค์น˜ํ•œ ๊ฒฝ๋กœ๋‚ด libํด๋” ์œ„์น˜} -jar {์„ค์น˜ํ•œ warํŒŒ์ผ์ด๋ฆ„}
java -Djava.io.tmpdir=/Users/ryusunny/utils/ngrinder/ngrinder-ngrinder-3.5.9.230227/lib -jar ngrinder-controller-3.5.9.war

 

์œ„ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ์ด ํ•˜๋‚˜ ๋” ์ƒ์„ฑ๋˜๋”๋‹ˆ ์‹คํ–‰๋๋‹ค.

 

 

ํ•„์ž์˜ ๊ฒฝ์šฐ 8080ํฌํŠธ๋กœ ์ง€์ •ํ•ด์„œ http://localhost:8080๋กœ ์ ‘์†ํ–ˆ๋‹ค.

์ ‘์† ์„ฑ๊ณต~!

์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋Š” admin, admin์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ด์ œ agent๋ฅผ ์„ค์น˜ํ•˜์ž.

๋กœ๊ทธ์ธํ•˜๊ณ  ๋“ค์–ด์˜ค๋ฉด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— admin์˜ ์—์ด์ „ํŠธ ๋‹ค์šด๋กœ๋“œ ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

 

๋‹ค์šด๋กœ๋“œ ๋˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ngrinder ํŒŒ์ผ๋“ค์„ ์„ค์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜์‹œํ‚ค๊ณ  ๋‹ค์šด๋ฐ›์€ tar ํŒŒ์ผ์˜ ์••์ถ•์„ ํ’€๋ฉด ๋œ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ƒˆ๋กœ์šด ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์—ด์–ด  ngrinder-agent ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์ž.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด agent๋ฅผ ์‹คํ–‰๋œ๋‹ค.

// mac
./run_agent.sh

// window
./run_agent.bat

 

 

์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

 

์ด์ œ ๋‹ค์‹œ ์›น์œผ๋กœ ๊ฐ€์„œ ์—์ด์ „ํŠธ ๊ด€๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด

 

 

์—์ด์ „ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ๊ฒƒ์„ ๋ณผ์ˆ˜์žˆ๋‹ค.

 

2. ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  script ์ž‘์„ฑ

 

 

 

 

์›นํŽ˜์ด์ง€ ๋งจ ์œ„์˜ ์Šคํฌ๋ฆฝํŠธ -> ๋งŒ๋“ค๊ธฐ ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ…Œ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•  api ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ฃผ์˜ํ• ์ ์€ http://localhost:8082/api ์—์„œ localhost ๋ฅผ 127.0.0.1 ๋กœ IPv4 ์ฃผ์†Œ๋ฅผ ์จ์ค˜์•ผํ•œ๋‹ค.

http://localhost:8082/api  -> http://127.0.0.1 :8082/api 

ํ…Œ์ŠคํŠธํ•  ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๊ทธ๋ฆฌ๊ณ ์„œ ์šฐ์ธก ์ƒ๋‹จ์˜ ๊ฒ€์ฆ์„ ๋ˆŒ๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์‹คํ–‰ํ•ด๋ณธ๋‹ค.

 

๊ทผ๋ฐ ๊ฐ‘์ž๊ธฐ ๋˜ ์—๋Ÿฌ...

 

Caused by: java.lang.ClassNotFoundException: sun.net.spi.nameservice.NameService
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

๋Œ€์ถฉ ์ด๋Ÿฌ๋Š”๋ฐ... 

์ฐพ์•„๋ณด๋‹ˆ๊น ์ž๋ฐ” ๋ฒ„์ „์ด ์•ˆ๋งž์•„์„œ ๋‚˜๋Š” ์—๋Ÿฌ์˜€๋‹ค.

์ž๋ฐ” ๋ฒ„์ „์ด ๋ฌด์กฐ๊ฑด 11 ์ด์—ฌ์•ผ ์‹คํ–‰์ด ๋˜๋Š”๊ฒƒ๊ฐ™๋‹ค.

๊ทธ๋ž˜์„œ ์ž๋ฐ” 11 ๋ฒ„์ „์„ ์ƒˆ๋กœ ๊น”์•„์คฌ๋‹ค.

์ž๋ฐ”๋ฒ„์ „ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๊ฐ€ ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ์–ด ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„๋“ฏํ•˜๋‹ค.

 

https://whitepaek.tistory.com/28

 

macOS Java ํ™˜๊ฒฝ๋ณ€์ˆ˜(PATH) ์„ค์ • ๋ฐฉ๋ฒ•

macOS Java ํ™˜๊ฒฝ๋ณ€์ˆ˜(PATH) ์„ค์ •ํ•˜๊ธฐ!Homebrew๋ฅผ ์ด์šฉํ•ด์„œ Java๋ฅผ ์ตœ์‹  ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ๊น JDK 1.8 ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ํ•„์š”์„ฑ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.macOS ํ™˜๊ฒฝ์—์„œ JDK

whitepaek.tistory.com

 

์ž๋ฐ” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹คํ–‰ํ•˜๋‹ˆ๊น

์„ฑ๊ณต!!!!

 

 

 

์ด์ œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋กœ ๊ฐ€์„œ ํ…Œ์ŠคํŠธ ์ƒ์„ฑํ›„ ์ €์žฅํ›„ ์‹œ์ž‘์„ ๋ˆŒ๋Ÿฌ๋ณด์ž.

ํ•„์ž๋Š” ์—์ด์ „ํŠธ 1, ๊ฐ€์ƒ์‚ฌ์šฉ์ž 10, ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ 30์ดˆ ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ ๋ณด์•˜๋‹ค.

 

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

 

 

์š”์•ฝ์— ์ ํžŒ ์šฉ์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

 

  • TPS (Transactions Per Second)
    • ์ฒ˜๋ฆฌ๋Ÿ‰. ์ฆ‰, "์ดˆ๋‹น ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•œ ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜"์ด๋‹ค.
    • TPS๊ฐ€ 100์ด๋ผ๋ฉด ์ดˆ๋‹น ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์ž‘์—…์ด 100์ด๋‹ค ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    • TPS ์ˆ˜์น˜๊ฐ€ ๋†’์„ ์ˆ˜๋ก ์งง์€ ์‹œ๊ฐ„์— ๋งŽ์€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Vuser (Virtual User)
    • ๊ฐ€์ƒ ์‚ฌ์šฉ์ž
    •  ๊ฐ€์ƒ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์‹œ์Šคํ…œ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์ž‘ํ•˜๋Š”๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

TPS ์ˆ˜์น˜๋Š” ๋†’๊ณ  ํ‰๊ท  ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์€ ๋‚ฎ์„ ์ˆ˜๋ก ์„ฑ๋Šฅ์ ์œผ๋กœ ๊ธ์ •์ ์ด๋‹ค.