์๋ฒ์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ์์ ์ ํ๋ฉด์ ์ผ๋ง๋ ์๋ฒ์ ์ฑ๋ฅ์ด ๊ฐ์ ๋์๋์ง ๊ถ๊ธํด์ก๋ค.
ํ ์คํธ ๊ณผ์ ์์ ์๋ฒ์ ์ฌ๋ฌ ๋ช ์ ์ ์ ๊ฐ ๋ค์ด์ค๋ ์ํฉ์ ์ฐ์ถํ๊ณ , ์ฌ๋ฌ API์ ์ฑ๋ฅ์ ํ ๋์ ๋น๊ตํ๊ธฐ ์ํด์ ๋ถํ ํ ์คํธ ๋๊ตฌ๋ฅผ ํ์ฉํ๊ธฐ๋ก ํ๋ค.
๋ชฉํ : 100๋ช ์ด ์ ์ ๊ฐ ๋์์ ๋ค์ด์ค๋ ์ํฉ์ ์ฐ์ถํ๊ณ , API ์์ฒญ์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ๋น๊ตํ๊ธฐ
nGrinder, K6, JMeter์ ๋๊ตฌ๋ค์ด ์์๊ณ , ์ฌ๋ฌ ๋ถํ ํ ์คํธ ๋๊ตฌ๋ค์ ๋ํด ์กฐ์ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด ์ํฉ์ ๋ง๋ JMeter๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๋ถํ ํ ์คํธ ๋๊ตฌ๋ค์ ๋ํด ์๊ฐํ๊ณ , JMeter๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์ ๋ํด ์๊ฐํ๊ฒ ๋ค!
๐ ๋ถํ ํ ์คํธ ๋๊ตฌ๋ค ์กฐ์ฌ
nGrinder
- ์ด๊ธฐ ์ค์ ์ด ๋ค์ ๋ณต์กํ๋ค.
- GUI๋ฅผ ์ ๊ณตํ๋ค. GUI๊ฐ ์๋์ด ์๋ค.
- ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ธ๋ฐํ ํ ์คํธ ๊ฐ๋ฅํ๋ค.
- ๋ค์ํ ํต๊ณ์ ๋ ํฌํธ๋ฅผ ์ ๊ณตํ๋ค.
K6
- ์ค์น๊ฐ ๋น ๋ฅด๋ค.
- GUI๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฐจ์งํด ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค.
- ๋ณด๊ณ ์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์๋ค.
JMeter
- ์ค์น๊ฐ ๊ฐํธํ๋ค.(but ์๋ฐ ๊ฐ๋ฐํ๊ฒฝ ์ค์น ํ์)
- GUI๋ฅผ ์ ๊ณตํ๋ค. ์ง์ ์ฝ๋ฉํ ํ์ ์๋ค. ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค.
- ์ปค๋ฎค๋ํฐ์ ๋ฌธ์๊ฐ ๋ฐฉ๋ํด ์ฐธ๊ณ ํ๊ธฐ ์ข๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ์๋์ ์ผ๋ก ๋ง์ด ์ก์ ๋จน๋๋ค.
- ๋ณด๊ณ ์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค.
๋ถํ ํ ์คํธ๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด๊ธฐ ๋๋ฌธ์ ์ฐ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด์ฌ์ผ ํ๋ค.
JMeter๊ฐ ์ค์น๋ ๊ฐํธํ๊ณ , ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ํ์๋ ์๊ณ , GUI๋ฅผ ์ ๊ณตํ๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ด์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ์งํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ค์ํ์ง ์์๋ค.
์ค์นํ๊ธฐ
1. ์๋ฐ ์ค์นํ๊ธฐ
JMeter๋ฅผ ์ค์นํ๊ธฐ ์์์, ์๋ฐ๋ฅผ ์ค์นํด์ผ ํ๋ค. ์๋ฐ๊ฐ ์๋ค๋ฉด ํจ์คํ๋ค.
2. JMeter ์ค์นํ๊ธฐ
- macOS๋ผ๋ฉด brew๋ก ์ค์นํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
brew install jmeter
(์ฒ์์ brew๋ก ์๋ํด๋ดค๋๋ฐ, ๊ฝค ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์ค๊ฐ์ ์๋ฌ๊ฐ ๋์ ์ค์น์ ์คํจํ๋ค..)
- ์๋์ฐ๊ฑฐ๋, ๋งฅ์ธ๋ฐ ํ์ผ์ ๋ค์ด๋ฐ๊ณ ์ถ๋ค๋ฉด ๊ณต์ ํํ์ด์ง์์ ํ์ผ์ ๋ค์ด๋ฐ๋๋ค.(zip ํ์ผ)
(ํ๊ธํ์ผ๋ก ์ค์น๊ฐ ๋๋ค!)
https://jmeter.apache.org/download_jmeter.cgi
์คํํ๊ธฐ
์์ถํด์ ๋ฅผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์กฐ๊ฐ ๋์จ๋ค.
JMeter๋ฅผ GUI ํ๊ฒฝ์์ ์คํํ๋ ค๋ฉด bin ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ, ํฐ๋ฏธ๋์์ `jmeter.sh` ํ์ผ์ ์ด์ด์ค์ผ ํ๋ค.
(์๋์ฐ๋ `jmeter.bat`์ ์คํํ๋ฉด ๋๋ค.)
./jmeter.sh
ํ ์คํธ ์์ฑํ๊ธฐ
์ค๋ ๋ ๊ทธ๋ฃน์ ํ ์คํธ๋ฅผ ์คํ ๋จ์๋ก ๋ฌถ์ ๊ฒ์ ๋ํ๋ธ๋ค. ํ ์คํธ๋ฅผ ์ํ ๊ธฐ๋ณธ์ ์ธ ๊ทธ๋ฃน์ด๋ค.
- ์ค๋ ๋ ๊ทธ๋ฃน ์ถ๊ฐ : ํ ์คํธ ๊ณํ > ์ถ๊ฐ > ์ฐ๋ ๋๋ค(์ฌ์ฉ์๋ค) > ์ค๋ ๋ ๊ทธ๋ฃน
์ค๋ ๋ ์์ฑ ์ค์
- ์ฐ๋ ๋๋ค์ ์(์ฌ์ฉ์ ์) : ๋์์ ๋ช ๋ช ์ ์ฌ์ฉ์ ๋ค์ด์ฌ ๊ฒ์ธ์ง๋ฅผ ์ค์ ํ๋ค.
- Ramp-up ์๊ฐ : ์ฐ๋ ๋๋ฅผ ์์ํ๋ ๋ฐ(๋จํ์
)ํ๋ ๋ฐ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
- ์๋ฅผ ๋ค์ด, 10๊ฐ์ ์ฐ๋ ๋์ ๋จํ์ ๊ธฐ๊ฐ์ด 100์ด๋ฉด, 10๊ฐ์ ์ฐ๋ ๋๋ฅผ ์คํํ๋ ๋ฐ 100์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ๊ฐ ์ฐ๋ ๋๋ 10์ด(100/10) ๋ง๋ค ์คํ๋๋ค.
- ๋ฃจํ ์นด์ดํธ : ํ ์คํธ๋ฅผ ์คํํ ํ์๋ฅผ ์ค์ ํ๋ค.
๋๋ ๋์์ 100๋ช ์ ์ฌ์ฉ์๊ฐ ๋ค์ด์ค๋ ์ํฉ์ ์ฐ์ถํ๊ณ ์ถ์ด์, ์ฐ๋ ๋ ์๋ฅผ 100์ผ๋ก ์ค์ ํ๋ค.
์ํ๋ฌ ์ถ๊ฐ
์ํ๋ฌ๋ ์๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋๋ก ์ง์ํ๋ ์ญํ ์ ํ๋ค.
HTTP ์์ฒญ, FTP ์์ฒญ, JDBC ์์ฒญ, TCP ์์ฒญ ๋ฑ์ ์ค์ ํ ์ ์๋ค.
๋๋ REST API ๋ก ํต์ ํ๋ ์๋ฒ๋ฅผ ํ ์คํธํ๊ณ ์ถ์ด์ HTTP ์์ฒญ์ ์ํ๋ฌ๋ก ์ถ๊ฐํ๋ค.
- ์ฐ๋ ๋ ๊ทธ๋ฃน > ์ถ๊ฐ > ํ๋ณธ์ถ์ถ๊ธฐ > HTTP ์์ฒญ
- ํ๋กํ ์ฝ : http or https ๋ฅผ ์ ๋ ฅํด์ค๋ค.
- ์๋ฒ ์ด๋ฆ ๋๋ IP : ํ ์คํธํ ์๋ฒ๋ฅผ ์ ๋ ฅํด์ค๋ค.
- ํฌํธ ๋ฒํธ : ํฌํธ ๋ฒํธ ์ ๋ ฅํด์ค๋ค. (443, 80, 8080...)
- HTTP ์์ฒญ
- GET / POST / UPDATE / DELETE
- ๊ฒฝ๋ก : ํ ์คํธํ API์ ๊ฒฝ๋ก
- ํ๋ผ๋ฏธํฐ๋ค : '์ถ๊ฐ' ๋ฒํผ์ ๋๋ฌ ์ด๋ฆ๊ณผ ๊ฐ์ ํ๋ผ๋ฏธํฐ์ key, value๋ฅผ ์ถ๊ฐํด์ค๋ค.
๋๋ GET ์์ฒญ์ผ๋ก "http://localhost:8080/ranking/view1?sports=๋๊ตฌ&gameType=3vs3&sort=rating"๋ก ๋ณด๋ด๊ณ ์ ํ๋ค.
๋ฆฌ์ค๋ ์ถ๊ฐ
๋ฆฌ์ค๋๋ ํ ์คํธ์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. ์์ฝ ๋ณด๊ณ ์, ๊ทธ๋ํ ๋ฑ ๋ค์ํ ํํ๋ก ๋ณผ ์ ์๋ค.
- ์ฐ๋ ๋ ๊ทธ๋ฃน > ์ถ๊ฐ > ๋ฆฌ์ค๋ > ์์ฝ ๋ณด๊ณ ์
๋๋ API๊ฐ ํ ์คํธ ์๋๋ฆฌ์ค๋๋ก ์คํ๋๋ ๋ฐ ํ๊ท ๋ช ms์ด๊ฐ ๊ฑธ๋ ธ๋์ง ์๊ณ ์ถ์ผ๋ฏ๋ก, ์์ฝ ๋ณด๊ณ ์๋ฅผ ์ ํํ๋ค.
ํ ์คํธ ์คํํ๊ธฐ
- ์ด๋ก์ ๋ฒํผ์ ๋๋ฌ์ ์์ํ๋ค.
์์ฝ ๋ณด๊ณ ์
ํ๋ณธ์(์ฐ๋ ๋ ์ * ํ ์คํธ ํ์)์ ํจ๊ป ํ๊ท , ์ต์, ์ต๋ ์์ ์๊ฐ(ms)๊ฐ ๋์จ๋ค!
๐ ์ฐธ๊ณ
Comparing k6 and JMeter for load testing : https://grafana.com/blog/2021/01/27/k6-vs-jmeter-comparison/
JMeter ๊ณต์ ๋ฌธ์ : https://jmeter.apache.org/usermanual/test_plan.html
Apache JMeter๋ฅผ ์ด์ฉํ ๋ถํ ํ ์คํธ ๋ฐ ๋ฆฌํฌํธ ์์ฑ : https://creampuffy.tistory.com/209