-
grpc 서버 성능 테스트테스트 2025. 5. 3. 18:41
이번에 다른 서버에 구현되어 있던 로직을 회원 서버로 이관하게 되면서 추가적인 부하가 발생하는 것에 대비하여 회원팀에서 관리하는 서버에 성능 테스트가 필요하여 공부한 내용을 정리한다.
해당 서버에서는 grpc Service로 해당 기능을 구현하여 제공하기 때문에 grpcService 서버의 성능 테스트를 수행하는 방법을 공부하였다.
성능 테스트 사전설정
테스트는 xk6, grafana, influxdb 를 사용하였다.
테스트 스크립트를 구현하기 전에 먼저 기존의 평균 RPS, 최대 RPS, 일일 방문자 수, latency를 활용해서 평균 및 최대 VUser와 목표 RPS를 설정하였다.
참고)
https://dodop-blog.tistory.com/322
부하 테스트 ( + k6, grafana + influxdb, ngrinder)
이번엔 도구를 이용하여 부하테스트를 진행하는 방법을 배웠다. 부하테스트 부하테스트는 서버가 어느정도의 부하를 견딜 수 있는지 확인하기 위한 테스트 이다. 서버의 한계치를 확인함으로
dodop-blog.tistory.com
1) 로컬에서 테스트 하기
k6 에서 grpc 호출 테스트 환경 구성
k6는 기본적으로 HTTP 기반의 부하테스트를 위한 도구인데, 비 HTTP 테스트 기능을 사용하기 위해서는 xk6가 필요하다.
xk6는 확장 프로그램과 함께 k6 바이너리를 빌드하는 데 사용되는 도구로 xk6 build 명령어로 확장 프로그램이 추가된 k6 바이너리를 읽을 수 있다.
xk6-grpc 를 이용해서 grpc 부하 테스트를 수행할 수 있다.
참고 : https://github.com/grafana/xk6-grpc
GitHub - grafana/xk6-grpc
Contribute to grafana/xk6-grpc development by creating an account on GitHub.
github.com
다음의 명령어로 설치하면 된다.
# 설치를 위해서 go를 사용하기 때문에 go를 먼저 설치 brew install go # xk6-grpc 설치 go install go.k6.io/xk6/cmd/xk6@latest
참고로 여기서 나는 예전 버전의 go를 가지고 있고, 새로 brew를 통해서 go를 설치 했는데, 계속 예전 버전으로 인한 충돌이 발생해서 다음과 같이 해결했다.
# 현재 버전 확인 go version # 어디에 위치한 go를 사용하는지 확인 which go brew info go # 기존 설치 버전 삭제 rm -rf /user/local/go # 버전 업데이트 brew upgrade go
만약 xk6를 설치했는데, xk6 build가 제대로 동작하지 않고,
zsh: command not found: xk6
응답이 발생한다면 path 설정이 되지 않은 것이므로 다음과 같이 작업해준다.
# xk6 위치 확인 whereis xk6 echo $PATH # 설정값 패스에 추가 # export PATH="$HOME/go/bin:<이곳에 위에 나온 패스 추가>" vi .zshrc # 설정값 적용 source ~/.zshrc
k6 테스트 스크립트 작성하기
테스트 스크립트는 다음과 같이 작성할 수 있다.
import grpc from 'k6/net/grpc'; import { check, sleep } from 'k6'; const client = new grpc.Client(); client.load(['/protos'], 'schema.proto'); export default () => { client.connect('grpc-service-helm-chart.test.svc.cluster.local:9090', { plaintext: true }); const res = client.invoke('com.yunhalee.performance_test.BookAuthorService/getAuthor', { "author_id": 13, "book_id": 5185, "first_name": "john", "gender": "female", "last_name": "lee" }); check(res, { 'status is OK': (r) => r && r.status === grpc.StatusOK, }); client.close(); sleep(1); };
여기서 사용해야 하는 proto 타입은 스크립트 파일이 찾을 수 있도록 정확한 위치를 작성해야 한다.
만약 여러개의 proto 타입을 사용해야 한다면 다음과 같이 적용할 수 있다.
추가적으로 google 에서 제공하고 있는 proto 타입을 사용하고 있었는데, 프로젝트 빌드를 할때는 자동으로 가져올 수 있도록 설정했지만, 테스트를 위해서 레포를 clone 받아서 해당 파일을 스크립트 위치에 넣어주었다.
https://github.com/googleapis/googleapis/blob/master/google/type/date.proto
googleapis/google/type/date.proto at master · googleapis/googleapis
Public interface definitions of Google APIs. Contribute to googleapis/googleapis development by creating an account on GitHub.
github.com
client.load( [ '/protos', '../../googleapis', ], 'schema.proto' );
다음의 명령어로 테스트를 수행할 수 있다.
k6 run smoke.js
/\ Grafana /‾‾/ /\ / \ |\ __ / / / \/ \ | |/ / / ‾‾\ / \ | ( | (‾) | / __________ \ |_|\_\ \_____/ execution: local script: smoke.js output: - scenarios: (100.00%) 1 scenario, 1 max VUs, 40s max duration (incl. graceful stop): * default: 1 looping VUs for 10s (gracefulStop: 30s) █ THRESHOLDS checks ✓ 'rate==1.0' rate=100.00% grpc_req_duration ✓ 'avg<300' avg=178.11ms ✓ 'p(95)<500' p(95)=409.03ms █ TOTAL RESULTS checks_total.......................: 7 0.674745/s checks_succeeded...................: 100.00% 7 out of 7 checks_failed......................: 0.00% 0 out of 7 ✓ status is OK EXECUTION iteration_duration.....................: avg=1.48s min=1.27s med=1.43s max=2s p(90)=1.7s p(95)=1.85s iterations.............................: 7 0.674745/s vus....................................: 1 min=1 max=1 vus_max................................: 1 min=1 max=1 NETWORK data_received..........................: 6.6 kB 636 B/s data_sent..............................: 2.2 kB 208 B/s GRPC grpc_req_duration......................: avg=178.11ms min=77.58ms med=132.35ms max=487.55ms p(90)=330.52ms p(95)=409.03ms running (10.4s), 0/1 VUs, 7 complete and 0 interrupted iterations default ✓ [======================================] 1 VUs 10s
다음의 명령어로 실행하면 k6에서 제공하는 대시보드로도 결과를 확인할 수 있다.
K6_WEB_DASHBOARD=true K6_WEB_DASHBOARD_EXPORT=./report/smoke.html K6_WEB_DASHBOARD_PERIOD=1s k6 run smoke.js
테스트 시나리오는 다음과 같이 구성할 수도 있다. (임의의 값)
# smoke.js export const options = { vus: 1, duration: '10s', thresholds:{ 'grpc_req_duration': ['avg<300', 'p(95)<500'], 'checks':['rate==1.0'], } }; # load.js export const options = { scenarios: { load_test: { executor: 'ramping-arrival-rate', startRate: 10, timeUnit: '1s', preAllocatedVUs:200, maxVUs: 50, stages: [ { target: 30, duration: '2m' }, { target: 60, duration: '2m' }, { target: 120, duration: '3m' }, { target: 0, duration: '1m' }, ], exec: 'default', }, }, thresholds:{ 'grpc_req_duration': ['avg<300', 'p(95)<500'], 'checks':['rate==1.0'], } }; # stress.js export const options = { scenarios: { stress_test: { executor: 'ramping-arrival-rate', startRate: 30, timeUnit: '1s', preAllocatedVUs: 50, maxVUs: 250, stages: [ { target: 80, duration: '1m' }, { target: 150, duration: '2m' }, { target: 180, duration: '2m' }, { target: 210, duration: '2m' }, { target: 250, duration: '2m' }, { target: 0, duration: '1m' }, ], exec: 'default', }, }, thresholds:{ 'grpc_req_duration': ['avg<500', 'p(95)<800', 'p(99)<1000'], 'checks':['rate>0.95'], } };
여기서 테스트 스크립트를 작성할 때, 파드가 연결을 맺으면 이를 재사용하지만, 랜덤으로 파드 연결을 추가수행하는 경우도 있지 않은지에 대한 피드백이 있어서 이에 대한 테스트 코드를 임시로 다음과 같이 작성해보았다.
(이 부분은 아직 잘 몰라서 gprc의 연결이 어떻게 동작하는지에 대한 학습이 선행되어야 할 것 같다...!)
export default () => { if (!connected) { client.connect('dns:///grpc-service-helm-chart.test.svc.cluster.local:9090', { plaintext: true }); connected = true; } if (Math.random() < 0.01) { client.close(); sleep(Math.random() * 1); client.connect('dns:///grpc-service-helm-chart.test.svc.cluster.local:9090', { plaintext: true }); } const memberId = Math.floor(Math.random() * 50000000 + 1).toString(); const data = { // ... }; const response = client.invoke('/...', data); check(response, { 'status is OK': (r) => r && ( r.status === grpc.StatusOK || r.status === grpc.StatusNotFound || r.status === grpc.StatusInvalidArgument ), }); }; export function teardown() { client.close(); }
테스트 결과 influx DB로 전송하기
처음에는 influxDB v2를 이용해서 테스트 결과를 확인을 시도했는데, k6에서 influxDBV2를 지원하지 않음을 알게 되었다.
https://malwareanalysis.tistory.com/827
grafana k6 데이터를 influxDb v2에 저장하는 방법
이 글은 k6 데이터를 influxDB v2에 저장하는 방법을 설명합니다. 요약2025.4월 기준 k6의 데이털는 influxdb v2를 저장하지 못합니다. 만약 저장해야 한다면 xk6-output-influxdb플러그인을 사용해야 합니다.
malwareanalysis.tistory.com
별도의 xk6-output-influxdb를 사용하면 연결할 수 있는 것으로 보이는데, 나는 설치한 버전과 충돌이 나서 해당 플러그인을 사용하지는 않고 이전 버전 influxDB를 보도록 했다.
https://github.com/grafana/xk6-output-influxdb
GitHub - grafana/xk6-output-influxdb: k6 extension to output real-time test metrics to an InfluxDB 2.x database.
k6 extension to output real-time test metrics to an InfluxDB 2.x database. - grafana/xk6-output-influxdb
github.com
influxdb 1.8버전을 재설치했다.
참고 : https://stackoverflow.com/questions/70420288/running-cli-on-influxdb1-installed-via-homebrew
https://formulae.brew.sh/formula/influxdb@1
influxdb@1
Homebrew’s package index
formulae.brew.sh
brew install influxdb@1 brew install influxdb-cli brew services start influxdb
먼저 influxDB 에 테스트 결과를 담을 데이터베이스를 생성하고 다음의 명령어로 테스트를 수행하면 데이터를 확인할 수 있다.
k6 run --out influxdb=http://localhost:8086/k6 smoke.js
그라파나 대시보드 확인하기
로컬에서 데이터 대시보드를 확인하기 위해 그라파나를 도커로 띄웠다.
참고 : https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/
Run Grafana Docker image | Grafana documentation
Run Grafana Docker image You can use Grafana Cloud to avoid installing, maintaining, and scaling your own instance of Grafana. Create a free account to get started, which includes free forever access to 10k metrics, 50GB logs, 50GB traces, 500VUh k6 testin
grafana.com
docker run -d -p 3000:3000 --name=grafana grafana/grafana-enterprise
여기서 도커로 띄운 그라파나에서 influxdb에 연결할 때 다음과 같이 host.docker.internal로 연결해야 한다.
대시보드를 생성할때 다음의 사이트에서 원하는 템플릿을 활용해서 대시보드를 구성할 수 있다.
https://grafana.com/grafana/dashboards/21825-k6-load-testing-results-simple-filters/
k6 Load Testing Results Simple filters | Grafana Labs
export K6_INFLUXDB_USERNAME=login export K6_INFLUXDB_PASSWORD=password export K6_INFLUXDB_PUSH_INTERVAL=3s export K6_SUMMARY_EXPORT=summary.json export K6_NO_USAGE_REPORT=true k6 run --out influxdb=http://influxdb:8086/k6 ./scenario.js It supports http, ws
grafana.com
2) Helm으로 테스트 팟을 구성하고, 테스트 수행하기
외부에서 호출되는 서비스의 경우 로컬 호출이 가능하겠지만, 내부 호출로 구성된 서비스는 파드끼리의 통신으로 이루어지는 경우가 많았다. 테스트는 라우팅을 통해서도 가능했는데, 정확한 테스트를 위해서는 성능테스트를 위한 파드를 구성하고 여기서 호출하도록 구성이 필요하지 않을까 하는 생각이 들어서 혼자 테스트 해보았다.
우선 테스트 환경 구성은 grafana-influxdb를 동시에 서비스하는 하나의 서비스를 띄우고, 테스트용 k6 job을 구성하도록 했다.
테스트용을 위해서 하나의 helm chart로 구성하다보니, grafana-influxdb와 k6를 구분하기 위한 인자도 들어가있다.
먼저 테스트를 위한 헬름 차트는 다음과 같이 구성되어있다.
performance라는 차트 안에 protos, scripts, templates, 등으로 구성되어있다.
values.yaml 설정
먼저 values 설정 값을 보자.
간단한 influxdb 설정, grafana 설정, k6 스크립트 설정이 되어있고, 배포 단위를 구분하기 위한 인자가 설정되어있다.
# Default values for k6. # This is a YAML-formatted file. # Declare variables to be passed into your templates. influxdb: image: influxdb:1.8 database: k6 username: k6 password: k6pass grafana: image: grafana/grafana adminUser: admin adminPassword: admin k6: scriptFile: smoke.js components: grafanaInfluxdb: false k6: true
grafana-influxdb 구성하기
grafana-influxdb-service.yaml을 보자.
간단하게, grafana와 influxdb의 포트를 설정한다.
해당 설정값은 grafanaInfluxdb 배포 일때만 활용될 수 있도록 설정했다.
{{- if .Values.components.grafanaInfluxdb }} apiVersion: v1 kind: Service metadata: name: grafana-influxdb spec: selector: app: grafana-influxdb ports: - name: grafana port: 3000 targetPort: 3000 - name: influxdb port: 8086 targetPort: 8086 {{- end }}
이제 grafana-influxd-pod.yaml 설정을 보자.
influx db와 grafana를 설치할 정보를 적용한다.
{{- if .Values.components.grafanaInfluxdb }} apiVersion: v1 kind: Pod metadata: name: grafana-influxdb labels: app: grafana-influxdb spec: containers: - name: influxdb image: influxdb:1.8 env: - name: INFLUXDB_DB value: k6 - name: INFLUXDB_ADMIN_USER value: k6 - name: INFLUXDB_ADMIN_PASSWORD value: k6pass ports: - containerPort: 8086 - name: grafana image: grafana/grafana env: - name: GF_SECURITY_ADMIN_USER value: admin - name: GF_SECURITY_ADMIN_PASSWORD value: admin ports: - containerPort: 3000 {{- end }}
grafana-influxdb 를 배포해보자.
설정값을 이용해서 두가지 서비스만 배포할 수 있다.
helm install grafana-influx ./performance --namespace test \ --set components.grafanaInfluxdb=true \ --set components.k6=false
파드 배포 후 다음의 명령어로 배포를 확인한다.
# 파드 배포 성공 확인 ## grafana-influxdb 2/2 Running 0 51m kubectl get pod -n test kubectl get svc grafana-influxdb -n test
포트 포워딩을 통해서 grafana에 접속 가능함을 확인하다.
# 포트 포워딩으로 grafana 접속 ## localhost:3000으로 접속 가능 kubectl port-forward svc/grafana-influxdb 3000:3000 -n test
여기서 influxdb에 테스트 결과를 담을 k6 데이터 베이스를 먼저 담아주어야 한다.
# influxdb 포트 포워딩 kubectl port-forward svc/grafana-influxdb 8086:8086 -n test # k6 데이터 베이스 생성 ## HTTP/1.1 200 OK curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE k6" # 데이터 베이스 생성 확인 ## k6 생성됨 확인 - {"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["k6"],["_internal"]]}]}]} curl -G http://localhost:8086/query \ --data-urlencode "q=SHOW DATABASES" # k6 데이터 베이스 데이터 확인 ## {"results":[{"statement_id":0}]} curl -G http://localhost:8086/query \ --data-urlencode "db=k6" \ --data-urlencode "q=SHOW MEASUREMENTS"
k6 job 구성하기
이번엔, 테스트를 수행하기 위한 k6 잡을 구성해보자.
k6 의 테스트를 수행하기 위해서는 proto 파일과 스크립트 파일이 필요한데, 이 파일을 사용하게 하기 위해서 config map으로 구성했다.
상단에 올려둔, 파일 구조와 동일하게 proto 파일은 protos 폴더 안에, script 파일은 scripts 폴더 안에 구성했다.
script가 여러개가 생겼을때를 대비하여 values에 지정한 script로 동작할 수 있도록 구성했다.
먼저 k6-script-configmap.yaml은 다음과 같다.
scripts 폴더 안의 script 파일들을 모두 읽어온다.
{{- if .Values.components.k6 }} apiVersion: v1 kind: ConfigMap metadata: name: k6-script namespace: {{ .Release.Namespace }} data: {{- range $path, $_ := .Files.Glob "scripts/*.js" }} {{ base $path }}: | {{ $.Files.Get $path | indent 4 }} {{- end }} {{- end }}
k6-protos-configmap.yaml은 다음과 같다.
protos 폴더 안의 proto 파일들을 읽어온다.
{{- if .Values.components.k6 }} apiVersion: v1 kind: ConfigMap metadata: name: k6-proto namespace: {{ .Release.Namespace }} data: {{- range $path, $_ := .Files.Glob "protos/*.proto" }} {{ base $path }}: | {{ $.Files.Get $path | indent 4 }} {{- end }} {{- end }}
테스트를 위한 k6.yaml 파일은 다음과 같다.
go를 설치하고, go를 이용해서 xk6-grpc를 설치한다.
script를 이용해 k6 테스트를 수행하고 변수로 전달된 influxdb에 테스트 결과를 전달한다.
{{- if .Values.components.k6 }} apiVersion: batch/v1 kind: Job metadata: name: k6 spec: template: spec: restartPolicy: Never containers: - name: k6 image: golang:1.23 env: - name: K6_OUT value: influxdb=http://grafana-influxdb:8086/k6 command: ["/bin/sh", "-c"] args: - | set -e go install go.k6.io/xk6/cmd/xk6@v0.10.0 /go/bin/xk6 build v0.49.0 --with github.com/grafana/xk6-grpc --output ./k6 ./k6 run /scripts/{{ .Values.k6.scriptFile }} volumeMounts: - name: script-volume mountPath: /scripts readOnly: true - name: proto-volume mountPath: /protos readOnly: true volumes: - name: script-volume configMap: name: k6-script - name: proto-volume configMap: name: k6-proto {{- end }}
파드 배포는 다음과 같은 명령어로 수행할 수 있다.
# k6 파드 배포 helm install k6 ./performance --namespace test \ --set components.grafanaInfluxdb=false \ --set components.k6=true # 파드 배포 성공 확인 # NAME READY STATUS RESTARTS AGE #grafana-influxdb 2/2 Running 0 78m #grpc-service-helm-chart-d568bdc99-7lvnp 0/1 Running 0 7h17m #k6-nx8qf 0/1 Completed 0 3m4s kubectl get pod -n test
여기서 job의 명이 같이 때문에 다시 재수행이 필요한 경우 다음과 같이 수행해야 한다.(이건 추가 작업을 통해 자동화 할 수 있을 것으로 보인다. )
# Job의 재실행이 필요한 경우 (job 이름이 같기 떄문에) kubectl delete job k6 -n test helm upgrade k6 ./performance --namespace test \ --set components.grafanaInfluxdb=false \ --set components.k6=true
k6가 정상적으로 배포 된 이후에 여기서 grafana-influxdb 파드에 접근이 가능한지 확인하려면, 다음과 같이 ping으로 확인할 수 있다.
# 파드에서 서비스 파드 접근 가능 여부 테스트 kubectl exec -it k6-nnns8 -n test -- curl -i http://grafana-influxdb:8086/ping
배포 결과 모니터링은 다음의 명령어들로 수행할 수 있다.
kubectl logs -f k6-pdfrl -n test kubectl describe pod k6-pdfrl -n test kubectl logs job/k6 -n test kubectl logs job/k6 -n test | tail -n 50
끝-! ✨✨✨✨✨
내가 혼자 공부한 내용은 여기서 확인해볼 수 있다...!
https://github.com/yunhalee05/TIL/tree/master/performance_test
TIL/performance_test at master · yunhalee05/TIL
공부용 레포입니다. ✏️. Contribute to yunhalee05/TIL development by creating an account on GitHub.
github.com
💡 참고 )
https://alswns7984.tistory.com/139
K6 + InfluxDB + Grafana를 활용한 부하테스트 진행하기(docker)
1. K6란?개발을 하다 보면, "우리 서비스에 갑자기 수백 명, 수천 명이 몰리면 서버가 과연 잘 버틸까?"라는 고민을 하게 됩니다. 특히 API 서버나 웹 서비스는 예기치 못한 트래픽 상황에서 무너질
alswns7984.tistory.com
https://hub.docker.com/repository/
https://grafana.com/grafana/dashboards/21825-k6-load-testing-results-simple-filters/
k6 Load Testing Results Simple filters | Grafana Labs
export K6_INFLUXDB_USERNAME=login export K6_INFLUXDB_PASSWORD=password export K6_INFLUXDB_PUSH_INTERVAL=3s export K6_SUMMARY_EXPORT=summary.json export K6_NO_USAGE_REPORT=true k6 run --out influxdb=http://influxdb:8086/k6 ./scenario.js It supports http, ws
grafana.com
https://alswns7984.tistory.com/139
K6 + InfluxDB + Grafana를 활용한 부하테스트 진행하기(docker)
1. K6란?개발을 하다 보면, "우리 서비스에 갑자기 수백 명, 수천 명이 몰리면 서버가 과연 잘 버틸까?"라는 고민을 하게 됩니다. 특히 API 서버나 웹 서비스는 예기치 못한 트래픽 상황에서 무너질
alswns7984.tistory.com
부하테스트를 위해 k6 + Prometheus + Grafana 자동 환경 구성하기 (with Docker-compose)
k6를 통하면 부하테스트를 js 기반 스크립트로 손쉽게 작성이 가능하다. 다만 k6는 단순 테스트 만을 수행해주기 때문에 추가적인 시각화 구성을 진행해야 할 필요가 있다. 이를 위해 구글링을 해
one-armed-boy.tistory.com
https://baby-care-dev.tistory.com/68
부하 테스트 - K6, Grafana, InfluxDB
들어가며 저번 글 3개에서 간단한 REST API를 만들어 Docker로 컨테이너화 하고 Spring Actuator, Prometheus, Grafana로 모니터링 시스템 구축까지 해보았다. 그럼 이제 부하 테스트를 진행하여 어느 수준의
baby-care-dev.tistory.com
https://medium.com/@rohithykrohith/how-to-deploy-argo-cd-in-kubernetes-cluster-72824a964737
How to deploy Argo CD in Kubernetes cluster.
we are going to use our previous Kubernetes deployment.
medium.com
K6 Load testing using Grafana, Influx DB and K6 in K8S cluster (sample GitHub workflow to automate…
I’m going to use a minikube cluster in my windows environment.
medium.com
(Docker)도커 - (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull)
(Docker)도커 - (Docker Hub) 도커 허브 사이트에 저장(push) 및 가져오기(pull) 도커 이미지를 저장하고, 다른 호스트에서 가져다가 사용하는 방법에는 3가지 방법이 있습니다. docker save 명령어로 저장 및
reddb.tistory.com
https://jay-ji.tistory.com/97 ✨✨
[쿠버네티스] docker 이미지 빌드 부터 helm 배포까지 [1부]
현재 메인으로 맡고 있는 서비스의 인프라는 쿠버네티스를 사용하고 있습니다. 다만 devOps팀, 저희 팀장님께서 거의 인프라 구성을 다 해주셔서 저는 잘 모르고 있는 상태라 어느 정도 스터디의
jay-ji.tistory.com
https://www.lainyzine.com/ko/article/how-to-sign-in-to-docker-from-the-command-line/
docker login 사용법: Docker 로그인하는 방법
Docker CLI 클라이언트에서 이미지를 푸시하려면 Docker Hub에 로그인을 해야합니다. 이 글에서는 CLI 클라이언트에서 Docker Hub에 로그인하는 방법을 소개합니다.
www.lainyzine.com
https://luvstudy.tistory.com/279
Argo CD 사용해 보기
Argo CD 소개 ArgoCD는 Kubernetes를 위한 GitOps CD 도구이다. Spinnaker처럼 여러 cloud platform을 지원하기 위한 cloud provider를 제공하지 않는다. 동작 자체가 매우 간단하기 때문에 사용하기 편하다. kubernetes
luvstudy.tistory.com
Kubernetes 기본 명령어 사용하기
지난 시간에는 Kubernetes를 이해하기 이전에 컨테이너 기술이 무엇인지?, kubernetes의 이해, GCP를 활용해서 간단한 애플리케이션을 운영해 보았고, 온프레미스 환경에서 설치하는 스크립트를 업로
judo0179.tistory.com
https://www.itmaya.co.kr/wboard/view.php?wb=tech&idx=52
ITMAYA
www.itmaya.co.kr
https://maxima-lab.tistory.com/entry/Kubernetes-kubectl-create-apply-get-edit-scale
[Kubernetes] kubectl 개념 및 사용 방법 (create, apply, get, edit, scale 등)
안녕하세요, 오늘은 kubectl를 사용하는 방법에 대해서 알아보겠습니다. kubectl는 쿠버네티스에서 클러스터를 관리하기 위한 커맨드 라인 도구이며, kubectl 명령어를 사용하여 클러스터의 리소스를
maxima-lab.tistory.com
[쿠버네티스] docker 이미지 빌드 부터 helm 배포까지 [2부]
[쿠버네티스] docker 이미지 빌드 부터 helm 배포까지 [1부] 1부에 이어서 2부 시작하겠습니다! :D 1부에서는 도커 이미지를 빌드하고 빌드한 이미지로 k8s(쿠버네티스) 파드로 띄우기까지 했습니다! 2
jay-ji.tistory.com
https://geunzrial.tistory.com/204
[Docker] 스프링 부트 프로젝트를 Docker 이미지로 실행시키기
안녕하세요! 이번 포스팅에서는 스프링 부트 프로젝트를 Docker 이미지로 만들고 이를 실행시키는 내용을 작성해보겠습니다. 도커 관련해서 글을 쓴 것은 이번이 처음이고 부족한 부분이 많습니
geunzrial.tistory.com
https://sungjk.github.io/2023/07/01/intellij-grpc-test.html
IntelliJ 안에서 gRPC 호출 테스트하기
IntelliJ IDEA 안에서 gRPC 호출 테스트를 작성하는 방법을 살펴봅니다.
sungjk.github.io
https://bugs.eclipse.org/bugs/show_bug.cgi?id=477885
477885 – Jetty HTTP2 client fails to connect with Netty server - HTTP2 client preface missing or corrupt
Jetty client log no flags Details Netty server log no flags Details Jetty test client no flags Details
bugs.eclipse.org
https://hub.docker.com/_/influxdb
influxdb - Official Image | Docker Hub
Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/influxdb/README.md. See also docker/hub-feedback#238 and d
hub.docker.com
https://malwareanalysis.tistory.com/827
grafana k6 데이터를 influxDb v2에 저장하는 방법
이 글은 k6 데이터를 influxDB v2에 저장하는 방법을 설명합니다. 요약2025.4월 기준 k6의 데이털는 influxdb v2를 저장하지 못합니다. 만약 저장해야 한다면 xk6-output-influxdb플러그인을 사용해야 합니다.
malwareanalysis.tistory.com
https://stackoverflow.com/questions/70420288/running-cli-on-influxdb1-installed-via-homebrew
https://www.sktenterprise.com/bizInsight/blogDetail/dev/2437
[K6 성능테스트 도구 - 07] Constant arrival rate& Ramping arrival rate 알아보기 | 개발자 Story | SKT Enterprise
Constant arrival rate 지정된 시간동안 고정된 수의 반복이 수행된다. 이 실행기는 반복을 실행할 수 있는 VU가 있는 한 지정된 속도로 반복을 계속 시작한다. 반복 실행 시간은 테스트 로직이나 테스
www.sktenterprise.com