KV cache์ ๋ํ ์ดํด
- kkumtree
2026-06-20T17:57:45+09:00
์ง๋ ์ฃผ ์ผ์์ผ๋ถํฐ CloudNet@์์ ์งํํ๊ณ ์๋ (์ดํ, AIDC)์ ์ฐธ์ฌํ๊ฒ ๋์์ต๋๋ค.
์์๋ PC์ ๋ฌ๋ฆฐ ๊ทธ๋ํฝ์นด๋ ํ์ฉ์ ์ํด, ์ด๊ฒ์ ๊ฒ(RAG, ASR ๋ฐ ์ผ๋ฐ์ ์ธ ์ถ๋ก ๋ชจ๋ธ) ๋๋ ค๋ณด๋ ์ค์ธ๋ฐ ๊ทธ ์ค์์ ๋งํ๋๊ฒ KV cache์ ๋ํ ์ดํด ๋ถ์กฑ์ผ๋ก Hermes Agent์ฉ ๋ชจ๋ธ ์ ์ ์ ์ ๋ฅผ ๋จน๊ณ ์์์ต๋๋ค. ๊ทธ๋์ ์ด์ ํ๋ ๊น์ ํฐ ์์ฌ์ ๋ฒ๋ฆฌ๊ณ KV cache์ ๋ํ ์ดํด๋ฅผ ํด๋ณด๊ณ ์ ํฉ๋๋ค.
์์์ ์คํฐ๋์์ ์ฐธ๊ณ ์ฉ์ผ๋ก ์ถ์ฒํด์ฃผ์ ์ ๋ง์ ์์๋ค ์ค์์ [KV cache ์๊ฐํ๋ก ์ค๋ช ] ์์์ ์ฐธ๊ณ ํ์์ต๋๋ค.
1. KV cache ๋?
์ดํดํ๊ณ ์๋ ๋ด์ฉ์ผ๋ก๋ ์ญ์ ๋ง ๊ทธ๋๋ก Key-Value ํํ์ ์บ์ฑ์ ๋๋ค.
Vault HA ๋ฐ Metric ์์ง ์ค์ - CI/CD ์คํฐ๋ 8์ฃผ์ฐจ
- kkumtree
2025-12-07T05:59:10+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 8์ฃผ์ฐจ์๋ Vault์ HA(High Availability)์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ์ด๋ก ์ ๋ถ๋ถ์ ๋จ์ํ์ผ๋, ์์ํ ๊ตฌ์ฑ ๋ฐฉ๋ฒ๊ณผ ๋ฌ๋ผ์ ์ ๊ฐ ๋์ค์ ์ฐธ๊ณ ํ๋ ค๊ณ ๋ถ์ฐ์ค๋ช ์ ํด๋๋ ค๊ณ ํฉ๋๋ค.
๋๋ถ์ด ๋์๋ณด๋์์ Vault ๊ด๋ จ ๋ฉํธ๋ฆญ์ ๋ณด๊ณ ์ถ์ด์, Datadog๊ณผ ์ฐ๋ํ์ฌ ๊ด์ธกํ์์ต๋๋ค.
0. ์ค์ต ํ๊ฒฝ ์ค๋น
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค.
https://github.com/kkumtree/ci-cd-cloudnet-study ์ 8w ํด๋ Helm v4 ์ถ์ ํ ํ ๋ฌ๋ ์๋ ์์ ์ ์์ฑ๋์๊ธฐ์, v3์ ํธํ๋๋ ์ฐจํธ ๋ฒ์ ์ ๋ช ์ํ์ฌ ๋ฐฐํฌํ์ต๋๋ค.
kind ๋ฐฐํฌ์ ingress-nginx, ๊ทธ๋ฆฌ๊ณ vault-worker ๊น์ง ๋ฐฐํฌํ๋ฉด, ์๋์ ๊ฐ์ ๊ตฌ์ฑ๋๊ฐ ๋ฉ๋๋ค.
Vault 101 in Kubernetes - CI/CD ์คํฐ๋ 7์ฃผ์ฐจ
- kkumtree
2025-11-30T08:59:34+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 7์ฃผ์ฐจ์๋ Vault๋ฅผ ๋ค๋ฃจ์์ต๋๋ค.
์์ธํ ์ค๋ช ์ ํด๋น ๊ณต์ ํ์ด์ง์์ ํด์ฃผ๊ณ ์์ง๋ง, ๊ทธ์ 1password ๊ฐ์ ํจ์ค์๋ ๊ด๋ฆฌ ์๋น์ค๊ฐ ์๋์ ์ ๋์์ด๋ผ๋ฉด Vault๋ ์ธํ๋ผ ๊ด๋ฆฌ์ ๋์์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ ์ ๊ฒ๋ ํฅ๋ฏธ๋ก์ด ์ฃผ์ฐจ์์ต๋๋ค.
์ด๋ฒ ์คํฐ๋์์๋ ๊ณ์ํด์ kind๋ก ๋ก์ปฌ Kubernetes(k8s)๋ฅผ ํ์ฉํ๊ธฐ์, ์ด๋ฒ์๋ ๋น์ทํ๊ฒ ๋ฐฐํฌํด๋ณด๊ฒ ์ต๋๋ค.
0. ์ค์ต ํ๊ฒฝ ์ค๋น - kind ํด๋ฌ์คํฐ ๋ฐฐํฌ
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค.
https://github.com/kkumtree/ci-cd-cloudnet-study ์ 7w ํด๋
kind create cluster --name vault --image kindest/node:v1.32.8 --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
labels:
ingress-ready: true
extraPortMappings:
- containerPort: 80
hostPort: 30080
EOF
echo "[Provisoning..] ingress-nginx in vault cluster"
kubectl config use-context kind-vault
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
sudo tailscale serve -bg localhost:30080
kubectl apply -f whoami.yaml
์ด๋ฒ์๋ UI ๊ด๋ จํด์ 80ํฌํธ ํ๋๋ง ๋ซ์ด๋๊ณ ์ฌ์ฉํ๊ณ ์ถ์๋๋ฐ, ๋ญ๊ฐ ํ๋์ฉ ๋งํ๋ ์ค์
๋๋ค.
๊ทธ๋์ traefik/whoami ์ด๋ฏธ์ง๋ฅผ ํ์ฉํ์ฌ ๋๋ฒ๊น
์ ํ๊ธฐ๋ก ํ์ต๋๋ค.
ArgoCD Cluster ๋ฐ Prefix ๊ด๋ฆฌ - CI/CD ์คํฐ๋ 6์ฃผ์ฐจ
- kkumtree
2025-11-22T20:56:43+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 6์ฃผ์ฐจ์๋ ArgoCD๋ฅผ ๋ง์ง๋ง์ผ๋ก ๋ค๋ฃจ์์ต๋๋ค.
Cluster๋ฅผ ์ถ๊ฐํด๋ณด๊ณ Gitea๋ฅผ ๋ถ์ด๊ธฐ ์ ์, ArgoCD๋ฅผ Prefix๋ก ๋ผ์ฐํ
ํ๋ ค๊ณ ํ๋๋ฐ ๋ก๊ทธ์์ํ๊ณ ๋์ ์์น์๋ ๊ฒฝ๋ก๋ก ๋น ์ง๋ ๋ฐ๋์
์ด๊ฒ์ ๊ฒ ์ดํด๋ณด๊ณ ์์ ์ ํ์ฌ ์ํ๋ ๋๋ก ๊ตฌ๋๋๋๋ก ์
์
ํ์ต๋๋ค.
0. ์ค์ต ์ค๋น
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค.
https://github.com/kkumtree/ci-cd-cloudnet-study ์ 6w ํด๋
์ด์ ํฌ์คํ Tailscale์ ํ๊ณ , ArgoCD์ ์ ๊ทผํด๋ณด๊ธฐ์ ํ์๋ค๋ฉด, ๋ฆฌ์์ค ์ ๋ฆฌ๋ฅผ ํฉ๋๋ค.
kind ๋ฐฐํฌ ์, ํฌํธ ์ ์ ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
sudo tailscale serve --tcp 443 off

Tailscale์ ํ๊ณ , ArgoCD์ ์ ๊ทผํด๋ณด๊ธฐ
- kkumtree
2025-11-17T10:23:03+09:00
์ด์ ๊ฒ์๋ฌผ, ArgoCD with Ingress์ ๋๋ฉ์ธ ์ค์ ์ ํ๋ค๊ฐ ๋ฌธ๋, Tailscale์ serve๊ธฐ๋ฅ์ ํ์ฉํ์ฌ Tailscale ๋ด๋ถ ๋คํธ์ํฌ(์ดํ, tailnet)์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ArgoCD ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ฉด ๋์ง ์์๊น? ํ์ฌ ๊ตฌ์ฑํด๋ณด์์ต๋๋ค.

kind๋ฅผ ์ด์ฉ ์ค์ธ Host์ ์ ์ํ Client๋ค์ Tailscale ์ค์น๋์ด ์์ด์ผํฉ๋๋ค.
1. Tailscale๊ณผ Serve
์ ํต์ ์ธ ์ค์์ง์ค์(Hub-Spoke) VPN์ด ์๋์ ๊ฐ๋ค๋ฉด,

Tailscale์ ๊ฒฝ์ฐ, Mesh ๋คํธ์ํฌ์ ํํ๋ฅผ ๊ฐ์ง๋ฉฐ Wireguard๋ฅผ ํ์ฉํฉ๋๋ค.

| ๊ตฌ๋ถ | ์ ํต์ ์ค์์ง์ค์ VPN | Tailscale (๋ฉ์ฌ VPN) |
|---|---|---|
| ๋คํธ์ํฌ ๊ตฌ์กฐ | ์ค์ ์๋ฒ๋ฅผ ํตํ ๋ชจ๋ ํธ๋ํฝ ๊ฒฝ์ โ | P2P ์ง์ ์ฐ๊ฒฐ, ๋ถ์ฐํ ๋ฉ์ฌ ๋คํธ์ํฌโ |
| ๋ฐ์ดํฐ ๊ฒฝ๋ก | ํด๋ผ์ด์ธํธ โ VPN ์๋ฒ โ ๋ชฉ์ ์งโ | ํด๋ผ์ด์ธํธ โ ๋ชฉ์ ์ง (์ง์ ์ฐ๊ฒฐ)โ |
| ํ๋กํ ์ฝ | OpenVPN(TCP/UDP), IKEv2, L2TP | WireGuard(UDP ๊ธฐ๋ฐ) |
| ์ฑ๋ฅ | ์ค์ ์๋ฒ ๋ณ๋ชฉ ๋ฐ์, ์ง์ฐ ์ฆ๊ฐโ | ์ง์ ์ฐ๊ฒฐ๋ก ์ง์ฐ ์ต์ํ, ๋น ๋ฅธ ์๋ |
| ์ค์ ๋ณต์ก๋ | ์๋ฒ ๊ตฌ์ถ, ํฌํธ ํฌ์๋ฉ ํ์โ | ๋ก๊ทธ์ธ๋ง์ผ๋ก ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅโ |
| NAT ํต๊ณผ | ์๋ ํฌํธ ํฌ์๋ฉ ํ์โ | ์๋ NAT Traversal ์ง์ |
| ํ์ฅ์ฑ | ์๋ฒ ์ฉ๋์ ๋ฐ๋ผ ์ ํโ | ๊ฐ ๋ ธ๋ ๋ ๋ฆฝ์ , ํ์ฅ ์ฉ์ด |
| ๋ณด์ | ์ค์ ์๋ฒ๊ฐ ๋ชจ๋ ํธ๋ํฝ ํ์ธ ๊ฐ๋ฅโ | ์ข ๋จ ๊ฐ ์ํธํ, P2P ์ ์กโ |
Tailscale์ serve์ ๊ฐ์ ๊ฒฝ์ฐ๋, ngrok์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๊ณผ ์ ์ฌํ funnel๊ณผ ๋ฌ๋ฆฌ
tailnet์ ์ํ ๊ธฐ๊ธฐ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
ArgoCD with Ingress - CI/CD ์คํฐ๋ 5์ฃผ์ฐจ
- kkumtree
2025-11-16T17:38:34+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 5์ฃผ์ฐจ์๋ ArgoCD๋ฅผ ์ข๋ ๋ค๋ฃจ์์ต๋๋ค.
0. ์ค์ต ์ค๋น
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค. https://github.com/kkumtree/ci-cd-cloudnet-study ์ 5w ํด๋
์ฐ์ 80/443 ํฌํธ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ์ฌ์ผํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
์ค์ ๋ก ํด๋ณด์์ ๊ฒฝ์ฐ tailscale์ด ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ค์ธํ์ฌ ํด๋น ์๋น์ค๋ฅผ ์ค์งํด๋ณด์์ต๋๋ค.
๋ค๋ง, ๋จ์ํ kind YAML์ ์๋ชป ์์ฑํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.

(1) kind ๋ฐ kube-ops-view
์ด๋ฒ์๋ Ingress์ ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํ ๋ฐ์์
์ผ๋ก
Control Node์ ๋ผ๋ฒจ๋ง์ ์งํํฉ๋๋ค.
์ด๋ ๋ค์์ ์ด์ด์ง ingress-nginx ๋ฐฐํฌ ์, nodeSeletor ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
ArgoCD 101 - CI/CD ์คํฐ๋ 4์ฃผ์ฐจ
- kkumtree
2025-11-09T08:44:34+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 4์ฃผ์ฐจ์๋ ArgoCD๋ฅผ ๋ค๋ฃจ๊ธฐ ์์ํ์ต๋๋ค.
Kubernetes(์ดํ, k8s) ์์์ ArgoCD๋ Controller๋ณด๋ค๋ Operator์ ๊ฐ๊น์ด ํฌ์ง์
์ ๊ฐ๋๋ค๊ณ ํ์ฌ,
์ด๋ฒ ๊ธฐํ์ ์ค์ต์ ํ๋ฉด์ ์ฒด๊ฐ์ ํ๋ ๊ฒ์ ๋ชฉ์ ์ ๋์์ต๋๋ค.
- Controller: live state(์ค์ ์ํ)์ desired state(์ํ๋ ์ํ)๊ฐ ์ผ์นํ๋์ง ๊ด์ฐฐ ๋ฐ ์ง์์ ์กฐ์
- Operator: Controller๊ฐ k8s ๋ด๋ถ object์์ ๋์ํ๋ค๋ฉด, Operator๋ k8s ์ธ์ ๊ฒ๋ค๋ ๋ค๋ฃฐ ์ ์์
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค.
https://github.com/kkumtree/ci-cd-cloudnet-study ์ 4w ํด๋
0. ์ค์ต ์ค๋น
์ด์ ๊ฒ์๋ฌผ, Jenkins, git and kubernetes์ kind ๋ฐ kube-ops-view ์ค์ ๊ณผ ๋์ผํ์ฌ ์๋ตํฉ๋๋ค.
Jenkins, git and kubernetes - CI/CD ์คํฐ๋ 3์ฃผ์ฐจ
- kkumtree
2025-11-02T08:51:39+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 3์ฃผ์ฐจ์๋ Jenkins์ ArgoCD์ ๋ค๋ค์ต๋๋ค.
์ด๋ฒ์๋ kubernetes(์ดํ, k8s)์ self-host Git๊ณผ Jenkins๋ฅผ ๋ฐฐํฌ ํ CI/CD ๋ถ๋ถ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
ํ๋ค๋ณด๋ ๊ฐ์ธ์ ์ผ๋ก, ์๋ 3๊ฐ์ง๊ฐ ์ฃผ๋ก ๊ธฐ์ต์ ๋จ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
- Docker UDS์ GID
- Gitea์ Multibranch Pipeline์ ๊ฒฐํฉ
- Local PV์ Taint ๋ฐ Node ์ง์
๋๋ถ์ด, Gitea์ ๋ํด Basic Auth๋ฅผ ํตํ CLI ์ ๊ทผ์ ๋ง์๋ณด๋ ๊ฒ๋ ์๋ก์ด ํด๋ณด์์ต๋๋ค.
ํด๋น ๊ตฌ์ฑ๋ค์ ์๋ GitHub์ ํ์ฌ๋์ด ์์ต๋๋ค.
https://github.com/kkumtree/ci-cd-cloudnet-study ์ 3w ํด๋
0. ์ค์ต ์ค๋น
(1) kind
kind ์ค์น์ ๊ฒฝ์ฐ ๋ค์ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ ์ ์์ต๋๋ค.
๋ฆฌ๋ ์ค์ KIND ์ค์นํ๊ธฐ w/golang
Docs: https://kind.sigs.k8s.io/
Helm ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฌ์ฉ์ฑ ๋์ด๊ธฐ - CI/CD ์คํฐ๋ 2์ฃผ์ฐจ
- kkumtree
2025-10-26T03:16:04+09:00
์ด๋ฒ์๋ ์ฌ์ฌ์ฉ์ฑ์ ์ํด์ _helpers.tpl ํ์ผ์ ํ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ์กด์ Helm 101 - CI/CD ์คํฐ๋ 2์ฃผ์ฐจ์์ ์ด์ด์ง๋๋ค.
1. _helpers.tpl์ ํตํ ๊ณตํต ๋ณ์ ์ฌ์ฌ์ฉ
(1) ๊ณตํต์ฌํญ ์์ง
์ด์ ์ ์์ฑํ deployment.yaml๊ณผ service.yaml์ selector ๋ถ๋ถ์ ๊ณตํต์ ์ด ์์ต๋๋ค.
# `{{ .Values.replicaCount }}
## deployment.yaml
spec.selector.matchLabels
spec.template.metadata.labels
## service.yaml
spec.selector
(2) ํ ํ๋ฆฟ ์์ฑ
ํด๋น label์ ์ถ๊ฐ/์ญ์ ํ๋ ค๋ฉด, ์ฌ๋ฌ ํ๋๋ฅผ ์
๋ฐ์ดํธ๋ฅผ ํ์ฌ์ผํฉ๋๋ค.
๋์ _helpers.tplํ์ผ์ ์์ฑํ์ฌ ๊ตฌ์ฑ์ ํฉ๋๋ค.
_helpers.tpl๋ฟ๋ง ์๋๋ผ, ๋งจ ์์_๋ก ์์ํ๊ธฐ๋ง ํ๋ฉด ๋๋ฉฐ,
์ด ํ์ผ์ k8s manifest ํ์ผ๋ก ์ทจ๊ธ๋์ง ์์ต๋๋ค.
Helm 101 - CI/CD ์คํฐ๋ 2์ฃผ์ฐจ
- kkumtree
2025-10-24T01:17:39+09:00
CloudNet@์์ ์งํํ๊ณ ์๋ CI/CD Study 2์ฃผ์ฐจ์๋ Helm๊ณผ Tekton์ ๋ค๋ค์ต๋๋ค.
์ด๋ฒ์๋ Helm์ ๊ธฐ๋ณธ์ ์ธ ๋ถ๋ถ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
1. Helm์ ์ญํ ๊ณผ ์ค์ต ์ค๋น์ฌํญ
Helm?
ํ ํ๋ฆฟ ๊ธฐ๋ฐ ์๋ฃจ์ . ์ฆ, ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ๊ณต์ , ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ์ํฐํฉํธ๋ฅผ ์์ฑํ๋๋ก ๋์ต๋๋ค.
-
Helm chart(์ฐจํธ)
- ๊ณต์ ๊ฐ๋ฅํ Kubernetes(์ฟ ๋ฒ๋คํฐ์ค, ์ดํ k8s) ํจํค์ง๋ฉฐ, ์ฐจํธ ๊ฐ ์์กด์ฑ ๋ฑ ๋ค์ํ ์์๋ฅผ ํฌํจํฉ๋๋ค.
- k8s๋ฅผ ๋ค๋ฃจ๋ฉด Helm์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ๊ทธ ์ด์ ์ค ํ๋๊ฐ chart ๊ฐ๋ ์ ๋๋ค.
-
Rolling Update for ConfigMap
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก k8s์ ConfigMap์ ๋์๋๋ ์์ฑ์ ๋๋ค.
- ConfigMap: ์์ ๋์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋กค๋ง ์
๋ฐ์ดํธ ์ , ์ฆ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ ์ฌ์์ ํ๊ธฐ ์ ๊น์ง๋ ๊ฐ์ด ์ ์ฉ๋์ง ์์ต๋๋ค.
- Helm์ ConfigMap์ด ๋ณ๊ฒฝ๋๋ฉด, ์๋์ผ๋ก Rolling Update๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค.
์ค์ต ์ค๋น
-
kind