[ํฐ๋] ํฐ๋ ์๋ฒ 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
ํ์คํธํ๊ณ ์ ํ๋ ๋์ ์๋ฒ๋ฅผ ์๋ฏธํฉ๋๋ค.
๐ฉโ๐ป ์คํ๊ณผ์

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__
'๐ฉโ๐ป TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TECH] ์๋๋ก์ด๋ ๋ค์ํ ์ํคํ ์ณ ํจํด(MVC, MVP, MVVM) (0) | 2023.10.19 |
---|---|
[TECH] ๊ฐ์ธ์ ๋ณด์ ๊ฐ๋ช ์ ๋ณด ๊ทธ๋ฆฌ๊ณ ์ต๋ช ์ ๋ณด๋? (1) | 2023.10.11 |
[TECH] Kotlin Coroutine์ ์จ์ผํ๋ ์ด์ (0) | 2023.09.22 |
[TECH] ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ๊ณผ ๋ง 14์ธ ๋ฏธ๋ง์ ๊ฐ์ธ์ ๋ณด ์์ง ํญ๋ชฉ (0) | 2023.09.14 |
[TECH] GitHub Actions๋ก CI/CD ๊ตฌ์ถํ๊ธฐ(2) (0) | 2023.09.05 |