2024. 4. 2. 01:33ใBackend
ํ์ฌ ์ง์ธ ๋ถ๋ค๊ณผ ํฐ์ผํ ์ฌ์ดํธ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๋ค.
ํด๋น ํ๋ก์ ํธ์ ๋ฉ์ธ ์ฃผ์ ๋ ๋ฐ๋ก '๋์์ฑ ์ด์ ํธ๋ค๋ง'์ธ๋ฐ, ์ด๋ฅผ ์ํด ๋ถํ ํ ์คํธ๋ฅผ ์งํํ ๊ณํ์ด ์๋ค.
์ด๋ฅผ ์ํด, ํด๋น ๊ธ์์๋ ์ฌ๋ฌ ๋ถํ ํ ์คํธ ํด ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง ๊ณ ๋ฏผํ ๊ณผ์ ๊ณผ ์ต์ข ์ ์ผ๋ก ์ ํํ๊ฒ ๋ ํด์ ๋ํด ์๊ฐํ๊ณ ์ ํ๋ค.
ํ ์คํ ํด ์ ์ ์ ๊ณ ๋ ค ์ฌํญ
๋จผ์ ํ ์คํ ํด ์ ์ ์ ๊ณ ๋ คํ ์ฌํญ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ธฐ๋ณธ์ ์ธ ๋ถํํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ ๊ฐ๋ฅ์ฑ
- ์ฑ๋ฅ (์ถฉ๋ถํ ๋ถํ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋๊ฐ)
- Docker(Compose)๋ฅผ ํตํ ์๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ๊ฐ๋ฅ์ฑ
- ๊ด๋ จ ๋ ํผ๋ฐ์ค
- Grafana์์ ์ฐ๋์ฑ
๊ณ ๋ ค๋ ๋ฐฉ์๋ค์ด ์ ์ฌํญ๋ค์ ๋ชจ๋ ๋ง์กฑํ ํ์๋ ์์ผ๋ ๋ง์ด ๋ง์กฑํ ์๋ก ๊ฐ์ฐ์ ์ ์ฃผ์๋ค.
Grafana๋ ์?
๋ถํํ ์คํธ ํด์ ์ ์ ํ๋๋ฐ Grafana์์ ์ฐ๋์ฑ์ ๋ถํ์ํ์ง ์๋๋ผ๊ณ ํ ์ ์๊ณ , ํ๋นํ ์๋ฌธ์ด๋ค.
๋ค๋ง ์ฌ๊ธฐ์์ Grafana๊น์ง ๊ณ ๋ คํ๋ ๊ฒ์ ์ดํ ํ๋ก์ ํธ์ ๊ฐ์์ฑ์ ์ํด Grafana๋ฅผ ๋์ ํ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๊ณ ์๊ณ , ๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ ํ๋์ ์๊ฐํ ํด์ ํ์ฉํ์ฌ ๋ถํ ํ ์คํธ ๊ฒฐ๊ณผ๊น์ง ํ์ธ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๋ถํํ ์คํธ ํด์ ์ ์ ํ๊ธฐ ์ํ ๊ณ ๋ ค ์ฌํญ์ ์๋์ง๋ง ํ๋ก์ ํธ์ ๋ฐฉํฅ์ฑ์ ์ํด ๊ณ ๋ ค๋๋ ์ฌํญ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ฐฉ์ 1. nGrinder
nGrinder๋ ๋ค์ด๋ฒ์์ ๊ฐ๋ฐํ ์คํ์์ค๋ก, ๋ถํํ ์คํธ๋ฅผ ์ํ ๋ฐฉ๋ฒ๋ก ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์๊ฐํ๋ฅผ ํจ๊ป ๋์์ ์ ๊ณตํ๋ ํด์ด๋ค.
nGrinder๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ฒ ๋๋๋ฐ, Groovy, Jython(Python) ๋ฑ์ด ์ด์ฉ ๊ฐ๋ฅํ์ฌ ๊ธฐ์กด Java ํน์ Python์ผ๋ก ๊ฐ๋ฐํด์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฌด๋ฆฌ ์์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ค.
์ค์ ๋ก ์๋ ๋งํฌ์๋ nGrinder์์ ์ง์ ์ ๊ณตํ๋ login ํ ์คํธ ์ฉ ์์ Groovy ์ฝ๋๊ฐ ์๋๋ฐ, ๊ทธ๋ฅ Java ์ฝ๋๋ผ๊ณ ํด๋ ๋ฌด๋ฐฉํ ์์ค์ด๋ค.
nGrinder๋ docker-compose๋ฅผ ํตํด ์๋ ํ๊ฒฝ ๊ตฌ์ฑ์ ์ํํ ์ ์๋ค.
์๋๋ ์ง์ ์์ฑํ docker-compose.yml ํ์ผ์ด๋ค.
// docker-compose.yml
services:
controller:
image: ngrinder/controller:3.5.5
restart: always
ports:
- 9000:80
- 16001:16001
- 12000-12009:12000-12009
volumes:
- ./ngrinder-controller:/opt/ngrinder-controller
agent1:
image: ngrinder/agent:3.5.5
restart: always
links:
- controller
agent2:
image: ngrinder/agent:3.5.5
restart: always
links:
- controller
agent3:
image: ngrinder/agent:3.5.5
restart: always
links:
- controller
agent4:
image: ngrinder/agent:3.5.5
restart: always
links:
- controller
๊ณต์ ํ์ด์ง ์์์ ์ธ๊ธํ๋ ํ์ฌ ๊ฐ์ฉ ๋ฒ์ ์ 3.5.5์ด๊ธฐ ๋๋ฌธ์ ๋ฒ์ ์ ์์ ๊ฐ์ด ๋ง์ถฐ์ฃผ์๊ณ , ํ ์คํธ์ ํ์ฉํ agent์ ์๋ฅผ 4๋ก ๋ง์ถฐ์ฃผ๊ธฐ ์ํด agent๋ค์ ์์ ๊ฐ์ด ๊ตฌ์ฑํด์ฃผ์๋ค. ๊ผญ 4๊ฐ์ผ ํ์๋ ์์ผ๋ฉฐ, ํ๋ ์ด์์ ์ง์ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฌธ์ ์๋ค.
์์ฒ๋ผ docker-compose.yml ํ์ผ์ ์์ฑํ ๋ค docker-compose up -d ๋ช ๋ น์ด๋ฅผ ์คํ์ํค๋ฉด ์ผ๋ง ๋ค์ localhost:9000์ ์ ์์ด ๊ฐ๋ฅํ๋ค. (์ด ๋ ํฌํธ ๋ฒํธ๋ ์ค์ ํ๊ธฐ ๋๋ฆ)
์ด๊ธฐ ID, PW๋ ๋ชจ๋ admin์ด๋ฉฐ, ์ค์ ๋ถํํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ํ๋ฅญํ ํ๊ธ ๋ ํผ๋ฐ์ค๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋งํฌ๋ก ๋์ฒดํ๋ค.
์ง์ nGrinder๋ฅผ ์ฌ์ฉํด๋ณธ ๋ค ๋๋ ์ฅ์ ์ ์๋์ ๊ฐ๋ค.
๋จผ์ ์ ์ ์ด ๊ฐ๋จํ๋ค. ํ์ํ ์์กด์ฑ์ nGrinder๊ฐ ๋์ด๊ธฐ ๋๋ฌธ์, compose ํ์ผ์ ํตํด nGrinder๋ฅผ ์คํ์ํจ ๋ค ์ฌ์ ์ ์์ฑํ or ์ ๊ท ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ํ ์คํธ๋ฅผ ์ํ ์ค๋น๊ฐ ๋์ด ๋๋ค.
๋ํ ์น๋ธ๋ผ์ฐ์ UI ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ง์ง๋ง์ผ๋ก ๋ค์ด๋ฒ์ ์คํ์์ค์ด๋ค๋ณด๋ ํ๊ตญ์ด ๋ ํผ๋ฐ์ค๊ฐ ๊ฝค ๋ง๋ค๋ ์ ๋ ์ฅ์ ์ด ๋ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ค๋ง ์์ฌ์ด ์ ๋ ์์๋ค.
๋จผ์ nGrinder๋ ๋ก์ปฌ ํ๊ฒฝ ๊ธฐ์ค์ผ๋ก, ํฐ ๊ท๋ชจ์ ๋ถํ๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ๋ ์ฝ์ง ์์๋ค. ์กฐ๊ธ๋ง ๊ท๋ชจ๊ฐ ์ปค์ ธ๋ ๊ณง๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ์ธํด ํ ์คํธ๊ฐ ์คํจํ๊ณค ํ์๋ค. ์ข ์ฐพ์๋ณด๋ ์ด๊ฑด ์์ฒด UI๋ฅผ ์ ๊ณตํ๋ ํด๋ค์ ํ๊ณ๋ก๋ ๋ณผ ์ ์๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์๋ค.
๋๋ฒ์งธ๋ ์๊ฐํ์ ์์ฌ์์ด๋ค. ๋ค๋ฅธ ํด์ ๋นํด nGrinder์ ํ ์คํธ ๊ฒฐ๊ณผ ์๊ฐํ๋ ์ข ์์ฝ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋ง์ง๋ง์ผ๋ก๋ Grafana์์ ์ฐ๋์ด ์ฝ์ง ์์๋ค. ๋ฌผ๋ก ์์ฒด ์๊ฐํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ๊ฒ์ ๋ง์ง๋ง ์ ์ด์ ๊ณ ๋ คํ๊ธฐ๋ก ํ ์ฌ์์๋ ๋ง์ง ์๋ ๊ฒ์ด ์ฌ์ค์ด๋ค.
๋ฐฉ์ 2. k6 + influxDB + Grafana
Grafana k6๋ Javascript ๊ธฐ๋ฐ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ ๋ถํํ ์คํธ ํด์ด๋ค.
๋ ๋์ ์ฑ๋ฅ์ ์ํด ์น๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ UI๋ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, ๊ฐ์ ์ด์ ๋ก Go ์ธ์ด ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
์๋๋ ๊ณต์ ํํ์ด์ง์์ ์ ๊ณตํ๋ ๋ก๊ทธ์ธ ํ ์คํธ ์์์ธ๋ฐ, js ์ง์์ด ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋ฐ๋ก ์ดํดํ ์ ์์ ์ ๋๋ก ์คํฌ๋ฆฝํธ ์์ฑ์ ์์ด ์ง๊ด์ฑ์ ๊ฐ์ง ์ ์๋ค.
import http from 'k6/http'
import { check, sleep } from 'k6'
export default function () {
const data = { username: 'username', password: 'password' }
let res = http.post('https://myapi.com/login/', data)
check(res, { 'success login': (r) => r.status === 200 })
sleep(0.3)
}
k6๋ ์์ฒด ์๊ฐํ๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ํ ๊ณณ์ ๋ด๋ณด๋ผ ์ ์๊ณ ์ด๋ฅผ ํตํด ๋ค๋ฅธ ํด์ ์ด์ฉํ์ฌ ์๊ฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด ๋ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ๋ ์ธํธ๊ฐ ๋ฐ๋ก k6 + InfluxDB + Grafana์ด๋ค.
k6์์ ์ํํ ๋ถํํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ InfluxDB๋ก ๋ด๋ณด๋ธ ๋ค, Grafana์์ datasource ์ค์ ์ ํตํด InfluxDB์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๋์๋ณด๋๋ฅผ ์์ฑํ๋ ํ๋ก์ฐ๋ฅผ ๊ฐ๋๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋์๋ณด๋๋ ์๋์ ๊ฐ์ ํํ๋ฅผ ๊ฐ๋๋ค.
์ด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ ๋ํ ๋ ํผ๋ฐ์ค๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋งํฌ๋ก ๋์ฒดํ๋ค.
ํด๋น ๊ตฌ์ฑ์ ์ง์ ์ฌ์ฉํด๋ณธ ๋ค ๋๋์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐ์ ๋ก์ปฌ ๊ธฐ์ค์ผ๋ก nGrinder์ ๋น๊ตํ์ ๋, k6๋ฅผ ํตํ ๋ถํํ ์คํธ๊ฐ ๋ ๋ง์ vUser๋ฅผ ๋ค๋ฃฐ ์ ์์๋ค. nGrinder์์ 4๊ฐ์ agent์ ๊ฐ๊ฐ 200๊ฐ์ vUser๋ฅผ ํ ๋นํ์ฌ ํ ์คํธ ํด๋ณธ ๊ฒ์ด ์ต๋์ธ ๋ฐ๋ฉด, k6์์๋ vUser๊ฐ 1000์ธ ์ํฉ์์๋ ๋๋ํ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ํ ๋์๋ณด๋์ ์ถ๋ ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ๋ ๋ค์ฑ๋กญ๊ณ ๋์ ์ ๋ค์ด์จ๋ค๋ ์ฅ์ ์ด ์์๋ค.
๋ง์ง๋ง์ผ๋ก ๋ ํผ๋ฐ์ค ๋ํ nGrinder ๋งํผ์ ์๋๋ผ๋, ๊ณต์ ๋ฌธ์๊ฐ ์๋์ด์์ด ์ด๋ ต์ง ์๊ฒ ํ ์คํธ๋ฅผ ์งํํ ์ ์์๋ค.
ํ์ง๋ง ์์ฌ์ด ์ ๋ ์์๋ค.
์ด ๊ตฌ์ฑ์์๋ ํ์์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋์ผ๋ก ๊ตฌ์ฑ์ ์๋ฃํด์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๋ ํผ๋ฐ์ค ๋๋ถ๋ถ์ด InfluxDB - Grafana ์ฐ๋์ ์๋์ผ๋ก ์งํํ๊ณ ์์๋๋ฐ, ์ด๋ ๋๋ฌด ํฐ ์์๋ผ๊ณ ์๊ฐ๋์ด ์๋ํ ๋ฐฉ์์ ๋ฆฌ์์นํ๋ค. Grafana์ Provisioning ๊ธฐ๋ฅ์ ํตํด ์ด๋ฅผ ๋ฌ์ฑํ๊ณ ์ ํ๋๋ฐ, ์ง์ ํด๋ณด๊ณ ์๊ฒ ๋ ๊ฒฐ๋ก ์ "๋ถ๊ฐ๋ฅํ๋ค" ์๋ค. ์ด๊ฒ ๋ถ๊ฐ๋ฅํ ์ด์ ๋ Grafana - InfluxDB๋ฅผ ์ฐ๋ํ๊ธฐ ์ํด์๋ InfluxDB ์ธก์์ accessToken์ ์ง์ ๋ฐ๊ธ ํ ์ด๋ฅผ Provisioning ํ์ผ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด ๊ณผ์ ์์ ์ด์ฉ ์ ์์ด ์ง์ InfluxDB๋ฅผ ๋ง์ ธ์ผํ๋ ์์๊ฐ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ตญ ์๋ํ๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฐฉ์์ ์ฐ์ ์์๋ฅผ ๋ง์ด ๋ฎ์ถ ์ ๋ฐ์ ์์๋ค.
๋ฐฉ์ 3. k6 + Prometheus + Grafana
์์ ๋ฐฉ์ 2์ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น ๊ณ ๋ฏผํ๋ค๊ฐ, InfluxDB ๋์ Prometheus๋ฅผ ์ถ๊ฐํ๋ ๊ตฌ์ฑ์ด ์์ด์ ์ด์ ๋ํด ์ถ๊ฐ์ ์ธ ๋ฆฌ์์น๋ฅผ ์งํํ๋ค. ์ด ๊ตฌ์ฑ์์ ์ค์ํ ๊ฒ์ ๊ฒฐ๊ตญ '์ด๋ค ํด๋ก ๋ถํํ ์คํธ๋ฅผ ์งํํ๋๋' ์ '์ด๋ค ํด๋ก ์๊ฐํ ํ๋๋' ์ด๊ธฐ ๋๋ฌธ์ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํ๋ InfluxDB๊ฐ Prometheus๋ก ๋ฐ๋๋ ๊ฑด ํฐ ๋ฌธ์ ๊ฐ ์์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ "์๋ํ๊ฐ ๊ฐ๋ฅํ๋ค" ์๋ค.
Grafana์ Provisioning์ ํตํด ํจ๊ป ๋์ธ Prometheus ์ปจํ ์ด๋๋ฅผ datasource๋ก ์ฌ์ ์ ๋ฑ๋กํด์ฃผ๊ณ ์ด๋ฅผ ์๊ฐํํ dashboard๋ง ๊ตฌ์ฑํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ต์ง ์๊ฒ ๊ฐ๋ฅํด ๋ณด์๋ค.
๋ค๋ง, ์ด์ ๋ํ ๋ ํผ๋ฐ์ค๊ฐ ๋ถ์กฑํ์ฌ ์ง์ ์ปดํฌ์ฆ ํ์ผ์ ์์ฑํ๋ค. ์๋ ๋งํฌ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
ํด๋น ๋ฐฉ๋ฒ์ ํตํด ๊ตฌ์ฑ๋๋ ๋์๋ณด๋๋ ์๋์ ๊ฐ๋ค.
์ด ๋ฐฉ์์ k6๋ฅผ ์ฌ์ฉํ์ ๋ ์ป์ ์ ์๋ ์ฑ๋ฅ์ ์ธ ์ด์ ๋ฟ๋ง ์๋๋ผ, ์ปดํฌ์ฆ ํ์ผ์ ํตํ ์๋ํ๋ ๊ฐ๋ฅํ๋ค.
๋ค๋ง ํ๊ฐ์ง ์์ฌ์ด ์ ์ InfluxDB๋ฅผ ํตํ Grafana ๋์๋ณด๋์ ๋นํด ์ด ์ชฝ์ด ์กฐ๊ธ ๋ ์ด๋ผ(?)ํ๋ค๋ ์ ์ด๋ค.
๊ฒฐ๋ก
์์์ ๊ณ ๋ คํ ๋ฐฉ์๋ค์ ํน์ง์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
nGrinder | k6 + InfluxDB + Grafana | k6 + Prometheus + Grafana | |
ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ ์ฉ์ด์ฑ | Java์ ์ ์ฌํ Groovy๋ฅผ ํตํด ์์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ | Js๋ฅผ ํตํด ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ | Js๋ฅผ ํตํด ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ |
์ฑ๋ฅ | k6์ ๋น๊ตํ์ฌ ๋ ๋ฎ์ ์ฑ๋ฅ | nGrinder์ ๋น๊ตํ์ฌ ๋ ๋์ ์ฑ๋ฅ | nGrinder์ ๋น๊ตํ์ฌ ๋ ๋์ ์ฑ๋ฅ |
Docker๋ฅผ ํตํ ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ | ์ปดํฌ์ฆ ํ์ผ์ ํตํด ์๋ ํ๊ฒฝ ๊ตฌ์ฑ ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ (InfluxDB - Grafana ์ฐ๋์ ์์ด ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ํด์ผ ํ ํ์ ์กด์ฌ) | ์ปดํฌ์ฆ ํ์ผ์ ํตํด ์๋ ํ๊ฒฝ ๊ตฌ์ฑ ๊ฐ๋ฅ |
๋ ํผ๋ฐ์ค | ํ๊ธ ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ | ๊ณต์๋ฌธ์, ํด์ธ ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ | ๊ณต์๋ฌธ์, ํด์ธ ๋ ํผ๋ฐ์ค๊ฐ ๋ง์ |
Grafana ์ฐ๋์ฑ | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋น๊ต๋ฅผ ํตํด ์ต์ข ์ ์ผ๋ก
k6 + Prometheus + Grafana๋ฅผ ์ ํํ์๋ค.
๊ฐ์ฅ ๋ง์์ ๋ค์๋ ์ง์ ์ ์ฑ๋ฅ์ด ์ค์ํ๋ฉด์๋,
๋ถํ ํ ์คํธ ๊ณผ์ ์ docker-compose up ๋ช ๋ น์ด ํ๋๋ก ์๋ํํ ์ ์๋ค๋ ์ .
'Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถํํ ์คํธ๋ฅผ ์ํด k6 + Prometheus + Grafana ์๋ ํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ (with Docker-compose) (1) | 2024.04.02 |
---|