๋ค์ค ์ ํ ์ํํธ์จ์ด ๊ณต๊ธ์
์ฒด๊ฐ ์์ฃผ ์ง๋ฉดํ๋ ๋ฌธ์ ์ค ํ๋๋ ๊ฑฐ์ ๋ชจ๋ ํ์์ ์์ง๋์ด(๊ฐ๋ฐ์, ํ
์คํฐ ๋ฐ ์ธํ๋ผ ๊ด๋ฆฌ์)์ ์ญ๋์ด ์ค๋ณต๋๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ถํ ํ
์คํธ ๋ถ์ผ์ ์ ๋ฌธ๊ฐ์ธ ๊ฐ๋น์ผ ์์ง๋์ด์๊ฒ๋ ์ ์ฉ๋ฉ๋๋ค.
์ง์ ์ ๋ฌด๋ฅผ ์ํํ๊ณ ๊ณ ์ ํ ๊ฒฝํ์ ์ฌ์ฉํ์ฌ ๋ถํ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋ ๋์ ๋ฐฉ๋ฒ๋ก , ์ต์ ์ ๋ฉํธ๋ฆญ์ ์ ํํ๊ณ ๋ถํ ํ๋กํ์ ๋ฐ๋ผ ์๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋์ ์์ง๋์ด๋ ์ข ์ข ์ฒ์๋ถํฐ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๋ฐฐํฌํ๊ณ ๋ถํ ๋๊ตฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ํฌํจํด์ผ ํฉ๋๋ค. CI ์์คํ ์์ ์ค์ค๋ก ๋ณด๊ณ ์์ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒ์๋ฅผ ์ค์ ํฉ๋๋ค.
Positive Technologies์์ ์ฌ์ฉํ๋ ํ
์คํธ์์ ์ผ๋ถ ์กฐ์ง ๋ฌธ์ ์ ๋ํ ์๋ฃจ์
์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฐ๋ ์ ๋ณธ์ง
์๋น์ค๋ก์์ ๋ถํ ํ ์คํธ ๊ฐ๋ ์ ๋ถํ ๋๊ตฌ Apache JMeter, Yandex.Tank ๋ฐ ์์ฒด ํ๋ ์์ํฌ๋ฅผ ์์์ ์ฐ์ ํตํฉ ์์คํ ์ ํตํฉํ๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ชจ๋ GitLab CI์ฉ์ด์ง๋ง ์์น์ ๋ชจ๋ CI ์์คํ ์ ๊ณตํต์ ๋๋ค.
์๋น์ค๋ก์์ ๋ถํ ํ ์คํธ๋ ๋ถํ ํ ์คํธ๋ฅผ ์ํ ์ค์ ์ง์ค์ ์๋น์ค์ ๋๋ค. ๋ถํ ํ ์คํธ๋ ์ ์ฉ ์์ด์ ํธ ํ์์ ์คํ๋๋ฉฐ ๊ฒฐ๊ณผ๋ GitLab Pages, Influx DB ๋ฐ Grafana ๋๋ ํ ์คํธ ๋ณด๊ณ ์์คํ (TestRail, ReportPortal ๋ฑ)์ ์๋์ผ๋ก ๊ฒ์๋ฉ๋๋ค. ์๋ํ ๋ฐ ํ์ฅ์ GitLab CI ํ๋ก์ ํธ์์ ์ผ๋ฐ์ ์ธ gitlab-ci.yml ํ ํ๋ฆฟ์ ์ถ๊ฐํ๊ณ ๋งค๊ฐ๋ณ์ํํ์ฌ ๊ฐ๋ฅํ ํ ๊ฐ๋จํ๊ฒ ๊ตฌํ๋ฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ์ ์ ์ฒด CI ์ธํ๋ผ, ๋ก๋ ์์ด์ ํธ, ๋ก๋ ์์ค์ ๋์ปค ์ด๋ฏธ์ง, ํ ์คํธ ํ์ดํ๋ผ์ธ ๋ฐ ๊ฒ์ ๋ณด๊ณ ์๊ฐ ์ค์ ์ง์ค์ ์๋ํ ๋ถ์(DevOps ์์ง๋์ด)์ ์ํด ์ ์ง ๊ด๋ฆฌ๋๋ ๋ฐ๋ฉด ๋ก๋ ํ ์คํธ ์์ง๋์ด๋ ํ ์คํธ ๊ฐ๋ฐ์ ๋ ธ๋ ฅ์ ์ง์คํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ธํ๋ผ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ์ง ์๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํฉ๋๋ค.
์ค๋ช ์ ๊ฐ๋จํ ํ๊ธฐ ์ํด ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ํ ์คํธ ์ค์ธ ์๋ฒ๊ฐ ์ด๋ฏธ ๋ฐฐํฌ๋๊ณ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(Python, SaltStack, Ansible ๋ฑ์ ์๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์์). ๊ทธ๋ฐ ๋ค์ ์๋น์ค๋ก์์ ๋ถํ ํ ์คํธ์ ์ ์ฒด ๊ฐ๋ ์ ์ธ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค. ์ค๋น, ํ ์คํธ, ๋ณด๊ณ ์ ๋ฐํ. ๋ค์ด์ด๊ทธ๋จ์ ๋ํ ์์ธํ ๋ด์ฉ(๋ชจ๋ ์ฌ์ง์ ํด๋ฆญํ ์ ์์):
๋ถํ ํ ์คํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ฐ ์ ์
๋ถํ ํ
์คํธ๋ฅผ ์ํํ ๋ ๋ค์์ ์ค์ํ๋ ค๊ณ ํฉ๋๋ค.
๋ก๋ ์์ด์ ํธ - ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๊ฐ์ ๋จธ์ - ๋ก๋ ์์ค(Apache JMeter, Yandex.Tank ๋๋ ์์ฒด ์์ฑ ๋ก๋ ๋ชจ๋).
ํ ์คํธ ๋ชฉํ(๋์) - ๋ก๋ ๋์์ด ๋ ์๋ฒ ๋๋ ์๋ฒ์ ์ค์น๋ ์ ํ๋ฆฌ์ผ์ด์ .
ํ ์คํธ ์๋๋ฆฌ์ค(ํ ์คํธ ์ผ์ด์ค) - ์ผ๋ จ์ ๋งค๊ฐ๋ณ์ํ๋ ๋จ๊ณ: ์ง์ ๋ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๊ณ ์ ๋ ๋คํธ์ํฌ ์์ฒญ ๋ฐ ์๋ต์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์กฐ์น ๋ฐ ์ด๋ฌํ ์กฐ์น์ ๋ํ ์์ ๋ฐ์.
ํ๋กํ ๋๋ ๋ถํ ๊ณํ(ํ๋กํ) -์
์ํ โ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ ๋งค๊ฐ๋ณ์ ์ธํธ๊ฐ ์๋ ์คํฌ๋ฆฝํธ.
ํ ์คํธ ๊ณํ(ํ ์คํธ ๊ณํ) - ์ผ๋ จ์ ํ ์คํธ ๋ฐ ๋ถํ ํ๋กํ.
ํ ์คํธ๋ฐ(testrun) - ์์ ํ ์คํ๋ ๋ถํ ์๋๋ฆฌ์ค ๋ฐ ์์ ๋ ๋ณด๊ณ ์๋ก ํ๋์ ํ ์คํธ๋ฅผ ์คํํ๋ ํ๋์ ๋ฐ๋ณต.
๋คํธ์ํฌ ์์ฒญ(์์ฒญ) โ ์์ด์ ํธ์์ ๋์์ผ๋ก ๋ณด๋ธ HTTP ์์ฒญ์ ๋๋ค.
๋คํธ์ํฌ ์๋ต(response) โ ๋์์์ ์์ด์ ํธ๋ก ๋ณด๋ธ HTTP ์๋ต์
๋๋ค.
HTTP ์๋ต ์ฝ๋(HTTP ์๋ต ์ํ) - ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ ํ์ค ์๋ต ์ฝ๋์
๋๋ค.
ํธ๋์ญ์
์ ์์ ํ ์์ฒญ-์๋ต ์ฃผ๊ธฐ์
๋๋ค. ํธ๋์ญ์
์ ์์ฒญ(request) ์ ์ก ์์๋ถํฐ ์๋ต(response) ์์ ์๋ฃ๊น์ง ์นด์ดํธ๋ฉ๋๋ค.
๊ฑฐ๋ ์ํ - ์์ฒญ-์๋ต ์ฃผ๊ธฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ์ ์์๋์ง ์ฌ๋ถ. ์ด ์ฃผ๊ธฐ์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ์ ์ฒด ํธ๋์ญ์ ์ด ์คํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์๋ต ์๊ฐ(๋๊ธฐ ์๊ฐ) - ์์ฒญ(request) ์ ์ก์ ๋์์ ์๋ต(response) ์์ ์์๊น์ง์ ์๊ฐ.
์ธก์ ํญ๋ชฉ ๋ก๋ - ๋ก๋ ํ ์คํธ ๊ณผ์ ์์ ๊ฒฐ์ ๋ ๋ก๋๋ ์๋น์ค ๋ฐ ๋ก๋ ์์ด์ ํธ์ ํน์ฑ.
๋ถํ ๋งค๊ฐ๋ณ์ ์ธก์ ์ ์ํ ๊ธฐ๋ณธ ๋ฉํธ๋ฆญ
๋ฐฉ๋ฒ๋ก ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ๊ถ์ฅ๋๋ ์ผ๋ถ
๋ก๋ ์์ด์ ํธ์ ๋ํ ์งํ
๋ก๋ ์ํ์์ ํ
์คํธ ์ค์ธ ๋์ ์์คํ
๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์งํ
์ vCPU ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ต ๋จ,
๋์คํฌ - ํ์ค์ ์ "์ฒ " ํน์ฑ
CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ์ฌ์ฉ๋ - CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ๋์คํฌ ๋ก๋ฉ์ ์ญํ
ํ
์คํธ ๊ณผ์ ์์. ์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ๋ถ์จ๋ก ์ธก์
์ฌ์ฉ ๊ฐ๋ฅํ ์ต๋๊ฐ
๋คํธ์ํฌ ์ฒ๋ฆฌ๋ (๋ถํ ์์ด์ ํธ์์) - ์ฒ๋ฆฌ๋
์๋ฒ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค,
๋ก๋ ์์ด์ ํธ๊ฐ ์ค์น๋ ์์น.
์ผ๋ฐ์ ์ผ๋ก ์ด๋น ๋ฐ์ดํธ(bps)๋ก ์ธก์ ๋ฉ๋๋ค.
๋คํธ์ํฌ ์ฒ๋ฆฌ๋(๋์์์) - ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๋์ญํญ
๋์ ์๋ฒ์์. ์ผ๋ฐ์ ์ผ๋ก ์ด๋น ๋ฐ์ดํธ ์(bps)๋ก ์ธก์
๊ฐ์ ์ฌ์ฉ์- ๊ฐ์ ์ฌ์ฉ์ ์,
๋ถํ ์๋๋ฆฌ์ค ๊ตฌํ ๋ฐ
์ค์ ์ฌ์ฉ์ ํ๋ ๋ชจ๋ฐฉ
๊ฐ์ ์ฌ์ฉ์ ์ํ, Passed/Failed/Total โ ์ฑ๊ณต ํ์ ๋ฐ
๊ฐ์ ์ฌ์ฉ์์ ์คํจํ ์ํ
๋ถํ ์๋๋ฆฌ์ค ๋ฐ ์ด ์.
์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์๋ฃํ ์ ์์ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
๋ก๋ ํ๋กํ์ ์ง์ ๋ ๋ชจ๋ ์์
.
๋ชจ๋ ์ค๋ฅ๋ ์ค์ ์ฌ์ฉ์๊ฐ
์์คํ
์์
์ ๋ฌธ์ ํด๊ฒฐ
์ด๋น ์์ฒญ(๋ถ)- ์ด๋น(๋๋ ๋ถ๋น) ๋คํธ์ํฌ ์์ฒญ ์.
๋ก๋ ์์ด์ ํธ์ ์ค์ํ ํน์ฑ์ ์์ฑํ ์ ์๋ ์์ฒญ ์์
๋๋ค.
์ฌ์ค ์ด๊ฒ์ ๊ฐ์ ์ฌ์ฉ์๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ก์ธ์คํ๋ ๊ฒ์ ๋ชจ๋ฐฉํ ๊ฒ์
๋๋ค.
์ด๋น ์๋ต(๋ถ)
- ์ด๋น(๋๋ ๋ถ๋น) ๋คํธ์ํฌ ์๋ต ์.
๋์ ์๋น์ค์ ์ค์ํ ํน์ฑ: ์ผ๋ง๋
๋ค์์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ์ ๋ํ ์๋ต์ ์์ฑํ๊ณ ๋ณด๋
๋๋ค.
๋ก๋ฉ ์์ด์ ํธ
HTTP ์๋ต ์ํโ ๋ค๋ฅธ ์๋ต ์ฝ๋์ ์
๋ก๋ ์์ด์ ํธ๊ฐ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์์.
์๋ฅผ ๋ค์ด 200 OK๋ ์ฑ๊ณต์ ์ธ ํธ์ถ์ ์๋ฏธํ๊ณ ,
๋ฐ 404 - ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์
์จ์ด ์์ (์๋ต ์๊ฐ) - ๋์์ ์๊ฐ
์๋ต(์๋ต)์ ๋ฐ๊ธฐ ์์ํ๊ธฐ ์ ์ ์์ฒญ(์์ฒญ)์ ๋ณด๋
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋ฆฌ์ด(ms) ๋จ์๋ก ์ธก์
ํธ๋์ญ์
์๋ต ์๊ฐโ ํ๋์ ์์ ํ ํธ๋์ญ์
์๊ฐ,
์์ฒญ-์๋ต ์ฃผ๊ธฐ ์๋ฃ.
์์ฒญ(์์ฒญ) ์ ์ก ์์๋ถํฐ ์๊ฐ์
๋๋ค.
์๋ต(์๋ต)์ ์์ ํ ๋๊น์ง.
ํธ๋์ญ์
์๊ฐ์ ์ด(๋๋ ๋ถ) ๋จ์๋ก ์ธก์ ํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก: ์ต์๊ฐ์ ๊ณ ๋ คํ๊ณ ,
์ต๋, ํ๊ท ๋ฐ ์๋ฅผ ๋ค์ด 90๋ฒ์งธ ๋ฐฑ๋ถ์์์
๋๋ค.
์ต์ ๋ฐ ์ต๋ ํ๋
๊ฐ์ด ๊ทน๋จ์ ์
๋๋ค.
์์คํ
์ฑ๋ฅ ์ํ.
XNUMX๋ฒ์งธ ๋ฐฑ๋ถ์์๊ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ,
๋๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ ํ์๋๋ฏ๋ก
์์คํ
์ฑ๋ฅ์ ์๊ณ๊ฐ์์ ํธ์ํ๊ฒ ์๋
์ด๋น ํธ๋์ญ์
(๋ถ) - ์๋ฃ ์
์ด๋น ํธ๋์ญ์
(๋ถ),
์ฆ, ์ ํ๋ฆฌ์ผ์ด์
์ด ์ผ๋ง๋ ์์ฉํ ์ ์์๊ณ
์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํฉ๋๋ค.
์ค์ ๋ก ์ด๊ฒ์ ์์คํ
์ ์ฒ๋ฆฌ๋์
๋๋ค.
๊ฑฐ๋ ์ํ , ํฉ๊ฒฉ / ๋ถํฉ๊ฒฉ / ํฉ๊ณ - ์ซ์
์ฑ๊ณต, ์คํจ ๋ฐ ์ด ๊ฑฐ๋ ์.
์คํจํ ์ค์ ์ฌ์ฉ์์ ๊ฒฝ์ฐ
๊ฑฐ๋๋ ์ค์ ๋ก ์๋ฏธํฉ๋๋ค
๋ถํ๊ฐ ๊ฑธ๋ฆฐ ์์คํ
์์ ์์
ํ ์ ์์
๋ถํ ํ ์คํธ ํ๋ก๋
๋ถํ ํ ์คํธ์ ๊ฐ๋ ์ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ์ด๋ฏธ ์ธ๊ธํ ์ธ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ค๋น-์ํ-๋ณด๊ณ ์์ฆ, ํ ์คํธ ๋ชฉํ๋ฅผ ์ค๋นํ๊ณ ๋ก๋ ์์ค์ ๋ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ ๋ค์ ๋ก๋ ํ ์คํธ๋ฅผ ์คํํ๊ณ ๋ง์ง๋ง์ ํ ์คํธ ๋ณด๊ณ ์๋ฅผ ์์ฑ ๋ฐ ๊ฒ์ํฉ๋๋ค.
๊ฐ๋ต๋:
- QA.Tester๋ ๋ถํ ํ ์คํธ ์ ๋ฌธ๊ฐ์ด๋ฉฐ,
- ๋์์ ๋ก๋ ์ ๋์์ ์๊ณ ์ ํ๋ ๋์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๋ค์ด์ด๊ทธ๋จ์ ์ํฐํฐ, ๋จ๊ณ ๋ฐ ๋จ๊ณ ๋ถ๋ฅ์
๋จ๊ณ ๋ฐ ๋จ๊ณ
์ด๋ป๊ฒ ๋ ๊น?
์
๊ตฌ์ ์๋ ๊ฒ์
์ถ๋ ฅ์ ๋ฌด์์
๋๊น
์ค๋น: ํ ์คํธ๋ฅผ ์ํ ์ค๋น ๋จ๊ณ
๋งค๊ฐ๋ณ์ ๋ก๋
์ค์ ๋ฐ ์ด๊ธฐํ
์ฌ์ฉ์
๋ถํ ๋งค๊ฐ๋ณ์,
๋ฉํธ๋ฆญ ์ ํ ๋ฐ
ํ
์คํธ ๊ณํ ์ค๋น
(ํ๋กํ์ผ ๋ก๋)
์ฌ์ฉ์ ์ง์ ์ต์
๋ก๋ ์์ด์ ํธ ์ด๊ธฐํ
ํ
์คํธ ๊ณํ
ํ
์คํธ ๋ชฉ์
VM
ํด๋ผ์ฐ๋ ๋ฐฐํฌ
๊ฐ์ ๋จธ์
ํ์ ํน์ฑ
๋ก๋ ์์ด์ ํธ์ ๋ํ VM ์ค์
์๋ํ ์คํฌ๋ฆฝํธ
VM ์์ฑ
๊ตฌ์ฑ๋ VM
๊ตฌ๋ฆ
ํ๊ฒฝ
OS ์ค์ ๋ฐ ์ค๋น
~์ ์ํ ํ๊ฒฝ
๋ก๋ ์์ด์ ํธ ์์
์ ๋ํ ํ๊ฒฝ ์ค์
๋ก๋ ์์ด์ ํธ
์๋ํ ์คํฌ๋ฆฝํธ
ํ๊ฒฝ ์ค์
์ค๋น๋ ํ๊ฒฝ:
OS, ์๋น์ค ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
,
์
๋ฌด์ ํ์ํ
๋ก๋ ์์ด์ ํธ
๋ก๋ ์์ด์ ํธ
์ค์น, ๊ตฌ์ฑ ๋ฐ ๋งค๊ฐ๋ณ์ํ
๋ก๋ฉ ์์ด์ ํธ.
๋๋ ๋ค์์์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ ๋ก๋ ์์ค
์์ค ๋์ปค ์ด๋ฏธ์ง ๋ก๋
(YAT, JM ๋๋ ์์ฒด ์์ฑ ํ๋ ์์ํฌ)
์ค์
๋ก๋ ์์ด์ ํธ
์ค์ ๋ฐ ์ค๋น
์์
๋ถํ ์์ด์ ํธ
ํ ์คํธ: ๋ถํ ํ ์คํธ๋ฅผ ์คํํ๋ ๋จ๊ณ์ ๋๋ค. ์์ค๋ GitLab CI ์ ์ฉ ์์ด์ ํธ ํ์ ๋ฐฐํฌ๋ ๋ก๋ ์์ด์ ํธ์ ๋๋ค.
ํ์ค
๋ก๋ ์์ด์ ํธ ์์
์ ํํ ํ
์คํธ ๊ณํ์ผ๋ก
๋ฐ ๋ก๋ ๋งค๊ฐ๋ณ์
์ฌ์ฉ์ ์ต์
์ด๊ธฐํ๋ฅผ ์ํด
๋ก๋ ์์ด์ ํธ
ํ
์คํธ ๊ณํ
ํ
์คํธ ๋ชฉ์
์คํ ๋ก๊ทธ
๋ถํ ํ
์คํธ
์์คํ
๋ก๊ทธ
๋ชฉํ ๋ฉํธ๋ฆญ ๋ฐ ๋ถํ ์์ด์ ํธ์ ๋ณํ ์ญํ
์์ด์ ํธ ์คํ
์์ด์ ํธ ์คํ
๋ง์ ํ
์คํธ ์คํฌ๋ฆฝํธ
์ ๋ฐ๋ผ
๋ก๋ ํ๋กํ
๋ก๋ ์์ด์ ํธ ์ํธ ์์ฉ
ํ
์คํธ ๋ชฉ์ ์ผ๋ก
ํ
์คํธ ๊ณํ
ํ
์คํธ ๋ชฉ์
๋ก๊ทธ
"์์" ๋ก๊ทธ ์์ง
๋ถํ ํ
์คํธ ์ค:
์์ด์ ํธ ํ๋ ๊ธฐ๋ก ๋ก๋,
ํ
์คํธ ๋์์ ์ํ
์์ด์ ํธ๋ฅผ ์คํํ๋ VM
์คํ ๋ก๊ทธ
๋ถํ ํ
์คํธ
์์คํ
๋ก๊ทธ
ํต๊ณ
ํ
์คํธ ์ค "์์" ๋ฉํธ๋ฆญ ์์ง
๋ชฉํ ์งํ ๋ณํ์ ์ญํ
๋ฐ ๋ถํ ์์ด์ ํธ
๋ณด๊ณ ์: ํ ์คํธ ๋ณด๊ณ ์ ์ค๋น ๋จ๊ณ
๋ฐ์ ๊ธฐ
์์ง๋ ์ฒ๋ฆฌ
๋ก๋ฉ ์์คํ
๋ฐ
๋ชจ๋ํฐ๋ง ์์คํ
"raw"
๋ฉํธ๋ฆญ ๋ฐ ๋ก๊ทธ
๋ณด๊ณ ์ ์์ฑ
์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์
์์๋ก ๊ฐ๋ฅ
๋ถ์
์คํ ๋ก๊ทธ
๋ถํ ํ
์คํธ
์์คํ
๋ก๊ทธ
๋ฉํธ๋ฆญ ๋ณํ์ ์ญํ
๋์ ๋ฐ ๋ก๋ ์์ด์ ํธ
์ฒ๋ฆฌ๋ "์์" ๋ก๊ทธ
์ ์ ํฉํ ํ์์ผ๋ก
์ธ๋ถ ์ ์ฅ์์ ์
๋ก๋
์ ์ ๋ถํ ๋ณด๊ณ ์,
์ฌ๋์ด ์ฝ์ ์ ์๋
๊ฒ์์ด๋ค.
๋ณด๊ณ ์ ๋ฐ๊ฐ
๋ถํ์ ๋ํด
์ธ๋ถ์์ ํ
์คํธ
์๋น์ค
๊ฐ๊ณต๋ "์์"
์ ์ ํ ํ์์ ๋ก๊ทธ
์ธ๋ถ๋ก ์ธ๋ก๋
๊ธ๊ณ
์ธ๋ถ์ ์ ์ฅ๋จ
์คํ ๋ฆฌ์ง ๋ณด๊ณ ์
ํ์ค, ์ ํฉ
์ธ๊ฐ ๋ถ์์ ์ํด
CI ํ ํ๋ฆฟ์์ ๋ก๋ ์์ค ์ฐ๊ฒฐ
์ค์ฉ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋์ด ๊ฐ์๋ค. ํ์ฌ์ ์ผ๋ถ ํ๋ก์ ํธ์์ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค.
๋จผ์ DevOps ์์ง๋์ด์ ๋์์ ๋ฐ์ ๋ถํ ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด GitLab CI์ ์ ์ฉ ์์ด์ ํธ ํ์ ๋ง๋ค์์ต๋๋ค. ์ด์
๋ธ๋ฆฌ ํ๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ
ํ๋ฆฟ๊ณผ ํผ๋ํ์ง ์๊ธฐ ์ํด ์ด๋ฌํ ์์ด์ ํธ์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
ํ๋์จ์ด๋ณ๋ก ํ์ํ ์ ๋ ฅ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ๋ก๋ ์์ด์ ํธ์ ํน์ฑ(์ถฉ๋ถํ ์์ vCPU, RAM ๋ฐ ๋์คํฌ)์ ์์ด์ ํธ์์ Docker, Python(Yandex.Tank์ ๊ฒฝ์ฐ), GitLab CI ์์ด์ ํธ, Java(Apache JMeter์ ๊ฒฝ์ฐ)๊ฐ ์คํ๋์ด์ผ ํ๋ค๋ ์ฌ์ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค. . JMeter์์ Java์ ๊ฒฝ์ฐ ์ต์ 512MB์ RAM์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฐ๋ผ์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๋ก๋ ์์ด์ ํธ์ ์ต์ 4๊ฐ์ vCPU, 4GB RAM, 60GB SSD๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋คํธ์ํฌ ์นด๋์ ์ฒ๋ฆฌ๋์ ๋ก๋ ํ๋กํ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฃผ๋ก Apache JMeter์ Yandex.Tank ๋์ปค ์ด๋ฏธ์ง๋ผ๋ ๋ ๊ฐ์ง ๋ก๋ ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ฌ ๋ด์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ
์คํฐ๊ฐ ์ง์ ํ๊ฒฝ์ ๋ณ๊ฒฝํ๊ณ ์ถ๊ฐํ ์ ์๋๋ก GitLab CI์์ ๋ก๋ ์์ค์ ๋์ปค ์ด๋ฏธ์ง ๋น๋๋ฅผ ๋ง๋ค์ด ๋ด๋ถ์ ๊ฒ์ํ์ต๋๋ค.
Yandex.Tank์ฉ ๊ธฐ๋ณธ ๋์ปค ํ์ผ์ ๊ฐ์ ธ์์ต๋๋ค.
Dockerfile
1 | FROM direvius/yandex-tank
2 | ENTRYPOINT [""]
๊ทธ๋ฆฌ๊ณ Apache JMeter์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Dockerfile
1 | FROM vmarrazzo/jmeter
2 | ENTRYPOINT [""]
"์ง์์ ์ธ ํตํฉ ์์คํ
์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ธฐ์ฌ์์ ์ฝ์ ์ ์์ต๋๋ค.
ํ ํ๋ฆฟ ๋ฐ ํ์ดํ๋ผ์ธ
๋ถํ ํ
์คํธ๋ฅผ ์ํํ๊ธฐ ์ํ ํ
ํ๋ฆฟ์ ์๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ํ
ํ๋ฆฟ์ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ์์ ๋ค์ด์ด๊ทธ๋จ์ ์ค๋ช
๋ ๋ถํ ํ
์คํธ์ ์ธ ๋จ๊ณ์ธ ๋ณด๊ณ ์ ์ค๋น, ํ
์คํธ ๋ฐ ๊ฒ์๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ด์ ๋ํ ์ฑ
์
- ๋ฌด๋
Prepare ํ ์คํธ ๋์์ ๋ฏธ๋ฆฌ ๊ตฌ์ฑํ๊ฑฐ๋ ๊ฐ์ฉ์ฑ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ก๋ ์์ค์ ๋ํ ํ๊ฒฝ์ ๊ตฌ์ฑํ ํ์๊ฐ ์์ผ๋ฉฐ ๋์ปค ์ด๋ฏธ์ง๋ก ๋ฏธ๋ฆฌ ๋น๋๋์ด ๋์ปค ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์๋ฉ๋๋ค. ํ ์คํธ ๋จ๊ณ์์ ์ํ๋ ๋ฒ์ ์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฅผ ๋ค์ ๋น๋ํ๊ณ ์์ ๋ง์ ์์ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. - ๋ฌด๋
Test ๋ก๋ ์์ค ์ง์ , ํ ์คํธ ์คํ ๋ฐ ํ ์คํธ ์ํฐํฉํธ ์ ์ฅ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจ๋ ๋ก๋ ์์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค: Yandex.Tank, Apache JMeter, ์์ฒด ๋๋ ๋ชจ๋ ํจ๊ป. ๋ถํ์ํ ์์ค๋ฅผ ๋นํ์ฑํํ๋ ค๋ฉด ์์ ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ญ์ ํ์ญ์์ค. ๋ก๋ ์์ค์ ์ง์ ์ :- Yandex.Tank์ ์คํ ๋งค๊ฐ๋ณ์๋ .
/ํ ์คํธ/yandextank.sh , - Apache JMeter ์์ ๋งค๊ฐ๋ณ์๋ ํ์ผ์ ์ง์ ๋ฉ๋๋ค.
./tests/jmeter.sh .
์ฐธ๊ณ : ์ด์ ๋ธ๋ฆฌ ๊ตฌ์ฑ ํ ํ๋ฆฟ์ CI ์์คํ ๊ณผ์ ์ํธ ์์ฉ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ํ ์คํธ ๋ก์ง์ ๋ฐฐ์น๋ฅผ ์๋ฏธํ์ง๋ ์์ต๋๋ค. ํ ์คํธ์ ๊ฒฝ์ฐ ์ ์ด bash ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์ง์ ์ ์ด ์ง์ ๋ฉ๋๋ค. ํ ์คํธ ์คํ ๋ฐฉ๋ฒ, ๋ณด๊ณ ์ ์์ฑ ๋ฐ ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ฒด๋ QA ์์ง๋์ด๊ฐ ๊ตฌํํด์ผ ํฉ๋๋ค. ๋ฐ๋ชจ์์ ๋ ๋ก๋ ์์ค์ ๋ํด Yandex ๊ธฐ๋ณธ ํ์ด์ง ์์ฒญ์ด ๊ฐ์ฅ ๊ฐ๋จํ ํ ์คํธ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์คํฌ๋ฆฝํธ ๋ฐ ํ ์คํธ ๋งค๊ฐ๋ณ์๋ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.
./ํ ์คํธ . - Yandex.Tank์ ์คํ ๋งค๊ฐ๋ณ์๋ .
- ๋ฌด๋ ์์
Report ํ ์คํธ ๋จ๊ณ์์ ์ป์ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ถ ์ ์ฅ์(์: GitLab ํ์ด์ง ๋๋ ํน์ ๋ณด๊ณ ์์คํ )์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํด์ผ ํฉ๋๋ค. GitLab Pages๋ ./public ๋๋ ํ ๋ฆฌ๊ฐ ๋น์ด ์์ง ์์์ผ ํ๋ฉฐ ํ ์คํธ๊ฐ ์๋ฃ๋ ํ ์ต์ํ index.html ํ์ผ์ ํฌํจํด์ผ ํฉ๋๋ค. GitLab Pages ์๋น์ค์ ๋์์ค์ ๋ํด ์ฝ์ ์ ์์ต๋๋ค.๋งํฌ .๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์:
- JMeter์์
GitLab ํ์ด์ง , - Yandex.Tank์์
InfluxDB ๋ฐ Grafana .
์ค์ ์ง์นจ ๊ฒ์:
- HTML ์ ์
GitLab ํ์ด์ง , - InfluxDB๋ก ์ด๋ํ ๋ค์
๊ทธ๋ผ ํ๋ .
- JMeter์์
๋ฐ๋ชจ ์์ ์์ ๋ถํ ํ ์คํธ์ ๋ ๊ฐ์ ๋ถํ ์์ค(๋ถํ์ํ ๊ฒ์ ๋นํ์ฑํํ ์ ์์)๊ฐ ์๋ ํ์ดํ๋ผ์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Apache JMeter๋ HTML ๋ณด๊ณ ์ ์์ฒด๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ํ์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ GitLab ํ์ด์ง์ ์ ์ฅํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํฉ๋๋ค. Apache JMeter ๋ณด๊ณ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Yandex.Tank์ ๋ฐ๋ชจ ์์์์๋
๊ฐ์
๊ธฐ์ฌ์์๋ "์๋น์ค๋ก์์ ๋ถํ ํ
์คํธ"(load testing as a service)์ ๊ฐ๋
์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ธฐ๋ณธ ์์ด๋์ด๋ ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ ๋ก๋ ์์ด์ ํธ ํ, ๋ก๋ ์์ค์ ๋์ปค ์ด๋ฏธ์ง, ๋ณด๊ณ ์์คํ
๋ฐ ๊ฐ๋จํ .gitlab-ci.yml ํ
ํ๋ฆฟ(์:
PS ์ฐ๋ฆฌ ํ์ฌ์์ ๋ถํ ํ ์คํธ ๊ฐ๋ ์ ์๋น์ค๋ก ๊ตฌํํ๋ ๋ฐ ๊ธฐ์ ์ง์์ ์ ๊ณตํ ๋๋ฃ์ธ Sergey Kurbanov์ Nikolai Yusev์๊ฒ ํฐ ๊ฐ์ฌ๋ฅผ ์ ํ๊ณ ์ถ์ต๋๋ค.
์ ์:
์ถ์ฒ : habr.com