๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ‍๐Ÿ’ป TECH

[TECH] ์„œ๋ฒ„ API ์„ฑ๋Šฅ๊ฐœ์„ ๊ธฐ(1)

by may_yy 2023. 9. 27.

[ํ‹ฐ๋Œ] ํ‹ฐ๋Œ ์„œ๋ฒ„ API ์„ฑ๋Šฅ๊ฐœ์„ ๊ธฐ(1)

์•ˆ๋…•ํ•˜์„ธ์š” ํ‹ฐํ”Œ์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ๊น€์œ ์ •์ž…๋‹ˆ๋‹ค :)

์ด๋ฒˆ ๊ธ€์€ ์šด์˜ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ์–ด ์„œ๋ฒ„๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ํ•œ๊ณ„์ ์„ ์ฐพ๊ณ , API ์ฟผ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•ด ๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌ๋กœ๋Š” nGrinder๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ์š”. nGrinder์€ ์›น UI๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ณ , ์ž๋ฐ”์™€ ๋น„์Šทํ•œ groovy์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ž์œ ๋กญ๊ฒŒ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ nGrinder์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ  ๋งฅ์—์„œ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!


๐Ÿ‘ฉโ€๐Ÿ’ป nGrinder์ด๋ž€?

nGrinder๋Š” ๋„ค์ด๋ฒ„์—์„œ ์„ฑ๋Šฅ ์ธก์ • ๋ชฉ์ ์œผ๋กœ jython(JVM์œ„์—์„œ ํŒŒ์ด์ฌ์ด ๋™์ž‘)์œผ๋กœ ๊ฐœ๋ฐœ ๋œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋ฉฐ, 2011๋…„์— ๊ณต๊ฐœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
 
nGrinder๋Š” ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋ฅผ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์„ฑ๋Šฅ ์ธก์ •์ด๋ž€ ์‹ค์ œ์™€ ๊ฐ™์€ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์–ผ๋งˆ ๋งŒํผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์‹คํ—˜ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ด์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด, ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋™์‹œ ์ ‘์†์ž๋ฅผ 1000๋ช…์ •๋„๋กœ ์˜ˆ์ƒํ•˜๊ณ  ์ด์— ๋งž๋Š” ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์˜ˆ์ƒ์— ๋„˜๋Š” ๋™์‹œ ์ ‘์†์ž๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฒ„๋ฆฌ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ ค ์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
 
์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ง„ํ–‰ํ•˜์—ฌ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป nGrinder Architecture

ngrinder์€ controller, agent, target๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
1. controller
controller๋Š” web application์œผ๋กœ tomcat๊ณผ ๊ฐ™์€ ์›น์„œ๋ฒ„ ์—”์ง„์„ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค ์ •์˜, ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
agent์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ผ์ž„ํ•ฉ๋‹ˆ๋‹ค.
 
2. agent
controller๋กœ๋ถ€ํ„ฐ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„, ์‹ค์ œ๋กœ ํƒ€๊นƒ ์„œ๋ฒ„์— ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€์ƒ ์‹œ์Šคํ…œ์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๊ฐ€์ƒ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋Œ€์ƒ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ(CPU/๋ฉ”๋ชจ๋ฆฌ)์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
 
3. target
ํƒœ์ŠคํŠธํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป ์‹คํ–‰๊ณผ์ •

nGrinder

1. agent๊ฐ€ ์‹คํ–‰๋˜๋ฉด controller์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์—์ด์ „ํ”„ ํ’€ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” AgentControllerServer์˜ ๊ตฌ์„ฑ์š”์†Œ์— ์—ฐ๊ฒฐ ๋ฉ๋‹ˆ๋‹ค.
2. ์‚ฌ์šฉ์ž๊ฐ€ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค agent๋ฅผ ์กฐ์ •ํ•˜๋Š” ์ƒˆ ์ฝ˜์†”์ด ์ƒ์„ฑ๋˜๊ณ , ํ•„์š”ํ•œ ์ˆ˜์˜ agent๊ฐ€ AgentControllerServer์—์„œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
 
3. SingleCossole์€ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ์™€ ํ…Œ์ŠคํŠธ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ• ๋‹น๋œ ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๋ฅผ Agent Controller์— ๋ณด๋‚ด๊ณ , ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ํ…Œ์ŠคํŠธ ํ๋ฆ„์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
4. ํ…Œ์ŠคํŠธ๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„, ์‚ฌ์šฉํ•œ agent๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก AgentControllerServer๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
5. SingleConsole์€ ConsoleManager์— ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. 


๐Ÿ‘ฉโ€๐Ÿ’ป Mac์—์„œ nGrinder ์„ค์น˜ํ•˜๊ธฐ

 
1. ์•„๋ž˜ ๋งํฌ๋กœ ๋“ค์–ด๊ฐ€์„œ ์ตœ์‹  ๋ฒˆ์ „ warํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค. 
https://github.com/naver/ngrinder/releases

Releases ยท naver/ngrinder

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

 
2. ํ„ฐ๋ฏธ๋„์—์„œ warํŒŒ์ผ์„ ์‹คํ–‰

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

์œ„ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด, ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰

java -Djava.io.tmpdir=/Users/kimyujeong/ngrinder/lib -jar ngrinder-controller-3.5.8.war โ€”-port=8300

 
3. ๋ธŒ๋ผ์šฐ์ €์— ์ง€์ •ํ•ด๋‘” port๋กœ ์ ‘์† (http://localhost:8300/)

์„ฑ๋Šฅํ…Œ์ŠคํŠธ

 
4. ngrinder ๋กœ๊ทธ์ธ
์ดˆ๊ธฐ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ชจ๋‘ admin์ž…๋‹ˆ๋‹ค.
 
5. ngrinder-agent ์„ค์น˜
๋กœ๊ทธ์ธ ์™„๋ฃŒ ํ›„, ์‚ฌ์ดํŠธ์˜ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ ๋ฉ”๋‰ด ํƒญ์—์„œ admin -> Download Agent๋ฅผ ํด๋ฆญํ•˜์—ฌ Agent๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค. 
 
6. ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๊ฒฝ๋กœ๋กœ ์ด๋™ ํ›„, tarํŒŒ์ผ ์••์ถ• ํ’€๊ธฐ

tar -xvf ngrinder-agent-3.5.8-localhost.tar

 
7. ์••์ถ• ํ’€๋ฆฐ agent ํด๋” ๊ฒฝ๋กœ๋กœ ์ด๋™

cd ngrinder-agent

8. agent ์‹คํ–‰
controller๊ฐ€ ์‹คํ–‰๋œ ์ƒํƒœ์—์„œ agent๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
 


๐Ÿ‘ฉโ€๐Ÿ’ป ์„ค์น˜ ๋„์ค‘ ๋งŒ๋‚œ ์—๋Ÿฌ

1) โŒ Please set 'java.io.tmpdir' property
์—๋Ÿฌ) Please set java.io.tmpdir property like following. tmpdir should be different from the OS default tmpdir.
 
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•) nGrinder ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ์ž„์‹œ ํŒŒ์ผ์˜ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์•„์„œ ๋‚˜๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹คํ–‰ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž„์‹œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

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

 
2) โŒ Unsupported class file major version 60 *[TECH] ์„œ๋ฒ„ API ์„ฑ๋Šฅ๊ฐœ์„ ๊ธฐ(2) ๊ธ€์˜ ์Šคํฌ๋ฆฝ ์‹คํ–‰๊ณผ ์—ฐ๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์—๋Ÿฌ) nGrinder์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, Unsupported class file major version 60 ์—๋Ÿฌ ๋ฐœ์ƒ
Java.lang.IllegalArgumentException: Unsupported class file major version 60" ์—๋Ÿฌ๋Š” Java ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋ฉ”์ด์ € ๋ฒ„์ „ 60์ด ์ง€์›๋˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
 
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•) ์ž๋ฐ” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ 

1. cd /Library/Java/JavaVirtualMachines ์ž…๋ ฅํ•˜์—ฌ ์ด๋™

2. ls ๋ช…๋ น์–ด๋กœ ์„ค์น˜ํ•œ jdk ํด๋”๋ช… ํ™•์ธ

3. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•  jdk ๊ฒฝ๋กœ ๋ณต์‚ฌ (/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home)

4. ๋ณต์‚ฌํ•œ ๊ฒฝ๋กœ๋ฅผ zshrc์— ๋ถ™์—ฌ๋„ฃ์–ด JAVA ๊ฒฝ๋กœ ์„ค์ • (5๋ฒˆ)

5. vim ./zshrc ์œผ๋กœ ํŽธ์ง‘๊ธฐ ์—ด๊ธฐ 

export JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home ์ž‘์„ฑ ํ›„, esc+:wq!๋กœ ์ €์žฅ

6. ์ปดํ“จํ„ฐ ์žฌ์‹œ์ž‘

 
3)  โŒ Can not check available ports because given local IP address 'XXX.XX.XXX.XX' is unreachable.
์—๋Ÿฌ) Caused by: org.ngrinder.common.exception.NGrinderRuntimeException: Can not check available ports because given local IP address 'XXX.XX.XXX.XX' is unreachable. Please check the /etc/hosts file or manually specify the local IP address in ${NGRINDER_HOME}/system.conf.
 
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•) local IP Address๋ฅผ system.conf์— ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

1. cd /users/kimyujeong/.ngrinder

2. vim system.conf

3. ngrinder.controller.ip=${LOCAL_IP_ADDRESS} //local ip ์ฃผ์†Œ ์„ค์ •

4. wq!

 
4) ngrinder-agent ์‹คํ–‰ ์ค‘ ์—๋Ÿฌ
์—๋Ÿฌ) Error while connecting to agent controller server at /127.0.0.1:16001
 
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•) agent์—์„œ controller์— ์ ‘๊ทผํ• ๋•Œ ์ฃผ์†Œ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ log์— ๋‚˜์™€์žˆ๋Š” localhost๋กœ ์‹œ๋„ํ•˜๋Š”๋ฐ, 3๋ฒˆ์—์„œ host ์ฃผ์†Œ๋ฅผ ๋ฐ”๊ฟ”์คฌ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋„ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

1. cd downloads/ngrinder-agent
2. vi __agent.conf

// ์•„๋ž˜ ์ž‘์„ฑ
common.start_mode=agent
agent.controller_host= (Controller IP์ฃผ์†Œ)
agent.controller_port=16001 # (์„ค์ •์„ ๋ฐ”๊พธ์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ 16001์ด๋‹ค)
agent.resion = N

3. esc+:wq!๋กœ ํŽธ์ง‘๊ธฐ ์ €์žฅ
4. ./run_agent.sh๋กœ ์‹คํ–‰

๐Ÿ‘ฉโ€๐Ÿ’ป ๋งˆ์น˜๋ฉฐ

์„œ๋ฒ„ ์„ฑ๋Šฅ๊ฐœ์„ ๊ธฐ(1)์— ๋Œ€ํ•œ ๊ธ€์„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
 
๋‹ค์Œ ๊ธ€์—๋Š” ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ , ์‹ค์ œ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.
 
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„
 
โฌ‡๏ธ ์ง€๊ธˆ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด์—์„œ ํ‹ฐ๋Œ ๋‹ค์šด ๋ฐ›๊ธฐ
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR

 
๐Ÿ“ฉ Contact : uuuuujeong00000@naver.com
๐Ÿ“ฒ SNS : https://www.instagram.com/may_u_j__