์ฌ๋ฌ ๋ฐฑ์๋์ ํธ๋ํฝ์ ๋ถ์ฐํ๋ ๋ฉ์ปค๋์ฆ. ์ด๋ ๊ณ์ธต์์ ๋ถ์ฐํ๋๋(DNS / L4 / L7), VIP๋ฅผ ์ด๋ป๊ฒ ๋์ฐ๋๋(๊ณ ์ IP / VRRP / BGP), ํฌ์ค์ฒดํฌยทfailover๋ฅผ ์ด๋์ ์ฒ๋ฆฌํ๋๋๊ฐ ์ค๊ณ ์ถ์ด๋ค.
๋ถ๋ฅ
DNS ๋ ๋ฒจ
๋๋ฉ์ธ์ A ๋ ์ฝ๋์ ์ฌ๋ฌ IP๋ฅผ ๋งคํํด ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์๊ฐ๋ IP๋ฅผ ๋ถ์ฐ์ํค๋ ๋ฐฉ์. **DNS Round Robin (DNS RR)**์ด ๋ํ์ .
- ๋ณ๋ Load Balancer ์์ด DNS๋ง์ผ๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ.
- ํ๊ณ:
- ํฌ์ค์ฒดํฌ ๋ถ์ฌ: ๋ ธ๋ 1๋๊ฐ ๋ค์ด๋ผ๋ DNS๋ ๊ทธ IP๋ฅผ ๊ณ์ ๋ฐํ. ํด๋ผ์ด์ธํธ๊ฐ ์ฃฝ์ IP๋ฅผ ๋ฐ์ผ๋ฉด ๊ทธ๋ฅ ์คํจ.
- DNS ์บ์ฑ์ผ๋ก ๋ถ์ฐ ๋น๊ท ๋ฑ: TTL ๋์ ๋์ผ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ IP์ ๋ฌถ์.
- ์ฆ๊ฐ์ failover ๋ถ๊ฐ: DNS ๊ฐฑ์ ์ด TTL์ ๋ฌถ์ฌ ์ฆ์์ฑ์ด ์์.
- ๋ฐ์ ํ: GSLB(Route 53 health check, NS1 ๋ฑ)๋ DNS ์๋ต์ ๋์ ์ผ๋ก ์กฐ์ ํด ํฌ์ค์ฒดํฌยท์ง์ญ๋ณ ๋ผ์ฐํ ์ ์ฒ๋ฆฌํ๋ค.
L4 (์ ์ก ๊ณ์ธต)
IP์ Port๋ฅผ ๊ธฐ์ค์ผ๋ก TCP/UDP ์ฐ๊ฒฐ์ ๋ถ์ฐ. ์์ฉ ๊ณ์ธต์ Payload๋ฅผ ํด์ํ์ง ์์ผ๋ฏ๋ก ๋น ๋ฅด๊ณ ํ๋กํ ์ฝ ์ค๋ฆฝ์ .
- VIP(Virtual IP) + Failover: ์ฌ๋ฌ ๋
ธ๋๊ฐ ํ๋์ IP๋ฅผ ๊ณต์ ํ๊ณ , ์กํฐ๋ธ ๋
ธ๋๊ฐ ์ฃฝ์ผ๋ฉด ๋ค๋ฅธ ๋
ธ๋๊ฐ ์ธ๊ณ.
- Keepalived / VRRP: ์ ํต์ ์ธ On-premise ํจํด.
- MetalLB: Bare-metal K8s์ ๋ํ ๊ตฌํ. Layer 2 ๋ชจ๋๋ ํ ๋ ธ๋๊ฐ VIP๋ฅผ ๊ด๊ณ ํ๊ณ ์ฅ์ ์ ๋ค๋ฅธ ๋ ธ๋๊ฐ ์ธ๊ณํ๋ค. BGP ๋ชจ๋๋ ์ฌ๋ฌ ๋ ธ๋๊ฐ ๋๋ฑํ ๊ฒฝ๋ก๋ฅผ ๊ด๊ณ ํ๊ณ , Multipath๋ฅผ ์ง์ํ๋ ๋ผ์ฐํฐ๊ฐ ECMP๋ก ์ฐ๊ฒฐ์ ๋ถ์ฐํ๋ค.
- kube-vip: ์ปจํธ๋กค ํ๋ ์ธ VIPยทService VIP ๋ชจ๋ ์ฒ๋ฆฌ. ARP ๋๋ BGP ๊ธฐ๋ฐ.
- IPVS / LVS: Linux ์ปค๋ ๋ ๋ฒจ L4 LB. K8s
kube-proxy์ IPVS ๋ชจ๋๋ 1.35๋ถํฐ Deprecated๋์์ผ๋ฉฐ, ๊ธฐ์กด ํ๊ฒฝ์ ์๋ณํ๊ณ ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ ์ ๋๋ก๋ง ์์๋๋ฉด ๋จ. ๋์ฒด์ฌ์ธnftables๋ชจ๋๋ 1.33๋ถํฐ GA์ด๋ฉฐ, 1.37์์๋ ๊ธฐ๋ณธ๊ฐ์ ์์งiptables์ง๋ง ํฅํ ๋ณ๊ฒฝ์ ๋๋นํด ๋ชจ๋๋ฅผ ๋ช ์ํ์ง ์์ผ๋ฉด ๊ฒฝ๊ณ ํจ. - ํด๋ผ์ฐ๋ ๋งค๋์ง๋: AWS NLB, GCP Network LB, Azure LB. ํฌ์ค์ฒดํฌยท์๋ failoverยท๊ณ ๊ฐ์ฉ์ฑ์ ๋งค๋์ง๋๋ก ์ ๊ณต.
L7 (์์ฉ ๊ณ์ธต)
HTTP ํค๋ยท๊ฒฝ๋กยทํธ์คํธ ๊ธฐ๋ฐ ๋ผ์ฐํ . URL/path/Host/Header ๋ฃฐ๋ก ๋ฐฑ์๋ ์ ํ.
- ์ํํธ์จ์ด: NGINX, HAProxy, Envoy, Traefik.
- K8s: Ingress Controller, Gateway API ๊ตฌํ์ฒด(Envoy Gateway, Istio, NGINX Gateway Fabric, AGC ๋ฑ).
- ํด๋ผ์ฐ๋ ๋งค๋์ง๋: AWS ALB, GCP HTTP(S) LB, Azure Application Gateway.
์๊ณ ๋ฆฌ์ฆ
| ์๊ณ ๋ฆฌ์ฆ | ๋์ | ๋น๊ณ |
|---|---|---|
| Round Robin | ์์๋๋ก ๋ฐฑ์๋ ์ํ | ๊ฐ์ฅ ๋จ์, ๋ฐฑ์๋ ๋์ง ๊ฐ์ |
| Least Connections | ํ์ฌ ์ฐ๊ฒฐ ์ ๊ฐ์ฅ ์ ์ ๋ฐฑ์๋ | ์ฐ๊ฒฐ ์๊ฐ ํธ์ฐจ ํด ๋ ์ ํจ |
| Source IP Hash | ํด๋ผ์ด์ธํธ IP ํด์ ๊ธฐ๋ฐ ๊ณ ์ | sticky session ํจ๊ณผ |
| Weighted | ๊ฐ์ค์น ๋น๋ก ๋ถ์ฐ | ๋ฐฑ์๋ ์ฌ์ ์ฐจ์ด ๋ณด์ |
| Consistent Hash / Maglev | ์์ฒญ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฑ์๋ ๊ณ ์ | ๋ ธ๋ ์ถ๊ฐยท์ญ์ ์ ์ฌํ ๋น ์ต์ํ |
ํต์ฌ ๊ณ ๋ ค์ฌํญ
- ํฌ์ค์ฒดํฌ: ๋น์ ์ ๋ฐฑ์๋๋ฅผ ๋ถ์ฐ ๋์์์ ์ ์ธํ๊ฑฐ๋ failoverํ๋ ๊ธฐ์ค. ๋จ์ DNS RR์๋ ์์ง๋ง GSLB๋ Load Balancer๊ฐ ๋ณ๋๋ก ์ ๊ณตํ ์ ์์.
- ์ธ์ ์ ์ง(Sticky Session): ์ํ ์๋ ๋ฐฑ์๋๋ฅผ ์ํ ํด๋ผ์ด์ธํธ-๋ฐฑ์๋ ๊ณ ์ . cookie ๊ธฐ๋ฐ(L7) ๋๋ source IP hash(L4).
- TLS ์ข ๋จ: L7 LB๋ ๋ณดํต TLS termination์ ๋ด๋น. ๋ฐฑ์๋๊น์ง TLS๋ฅผ ๋๊ณ ๊ฐ์ง(end-to-end) ๊ฒฐ์ ํ์.
- PROXY protocol: L4 LB๊ฐ ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ฐฑ์๋์ ์ ๋ฌํ๋ ํ์ค. NGINXยทHAProxy ๋ชจ๋ ์ง์.
๋ฌด์ค๋จ ์ด๊ด (Zero-downtime Migration)
Docker Compose โ K8s์ฒ๋ผ ์ธํ๋ผ์ Application์ ์ด๊ดํ ๋์ ๊ธฐ๋ณธ ํจํด.
Backend: DNS์ LB์ ์ ํ ์ ๋ฐ๋
DNS ๊ฐ์ค์น ๋ผ์ฐํ (Route 53 weighted ๋ฑ)์ผ๋ก๋ ๊ตฌยท์ ํ๊ฒฝ์ ํจ๊ป ์ ์งํ๋ฉฐ ๋ฌด์ค๋จ ์ด๊ดํ ์ ์๋ค. ๋ค๋ง ResolverยทOSยทRuntime Cache ๋๋ฌธ์ ์ค์ ํ Weight๊ฐ ์ค์ ์ ์ ๋น์จ์ ์ ํํ ๋ฐ์๋์ง ์๊ณ , ๋ชจ๋ Client์ ์ ํ ์์ ๋ ํต์ ํ ์ ์๋ค. DNS๋ ๋์จํ ์ ์ง์ ์ด๊ด์๋ ์ธ ์ ์์ง๋ง ์ฆ์ ์ค์์นญ๊ณผ Rollback์๋ ์ ํฉํ์ง ์๋ค.
์ ๋ฐํ ์ ํ์ด ํ์ํ๋ฉด ๋จ์ผ LB ๋ค์ ๊ตฌยท์ ๋ฐฑ์๋ ํ์ ๋์์ ๋ฑ๋กํ๊ณ LB ๋ ๋ฒจ์์ ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ๋ค.
- Weight ๋ณ๊ฒฝ์ ์ด์์๋ ๋ฐฐํฌ Pipeline์ด ์ค์ ๋๋ API๋ก ๋ช ์์ ์ผ๋ก ์ํํ๋ฉฐ, LB๊ฐ ์๊ฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ด๊ดํ์ง๋ ์์
- ALB๋ Target Group ๋ด๋ถ์ ๊ฐ๋ณ Target์ ์๋์ผ๋ก Health Checkํ๊ณ , ๋ฑ๋ก ํด์ ๋ Target์ Connection์ Draining
- ํ Weighted Target Group ์ ์ฒด๊ฐ ๋น์ ์์ด ๋์ด๋ ๋ค๋ฅธ Group์ผ๋ก Weight๋ฅผ ์๋ ์ด์ ํ์ง ์์ผ๋ฏ๋ก ๋ณ๋ ๊ฐ์์ Rollback์ด ํ์
- ๋ ์ ๋ฐํ ์ ์ด๊ฐ ํ์ํ๋ฉด Service Mesh(Istio) traffic split
- DBยทSession Store๋ ๊ตฌยท์ ๋ฒ์ ์ด ํจ๊ป ๋์ํ๋๋ก ํธํ์ฑ์ ๋จผ์ ํ๋ณด
Frontend: Hash ๊ธฐ๋ฐ Cache Busting
Frontend์ API๋ฅผ ํจ๊ป ๋ณ๊ฒฝํ๋ฉด ๋ธ๋ผ์ฐ์ ยทCDN์ ๋จ์ ์ด์ Bundle์ด ์ API๋ฅผ ํธ์ถํ ์ ์์ผ๋ฏ๋ก, API ํ์ ํธํ์ฑ๊ณผ Cache ๊ฐฑ์ ์ ํจ๊ป ์ค๊ณํด์ผ ํ๋ค.
๊ธฐ๋ณธ ํจํด์ ๋ฒ๋ค ํ์ผ๋ช
์ contenthash๋ฅผ ๋ฐ์ ์ ๋ฒ์ ์ ์ ํ์ผ๋ก ๋ง๋ค๊ณ , HTML๋ง ์งง์ TTL/no-cache๋ก ๋๋ ๊ฒ์ด๋ค.
app.[contenthash].jsโ ๋ด์ฉ ๊ฐ์ผ๋ฉด ํ์ผ๋ช ๋์ผ, CDN immutable ์บ์ฑ ์ ๊ทน ํ์ฉ- HTML์ ๋งค๋ฒ fresh fetch โ ๊ทธ ์์ ์ hash ๋ฒ๋ค ์ฐธ์กฐ
- SPA์ Service Worker๊ฐ ์์ผ๋ฉด ๋ณ๋์ ๊ฐฑ์ ์ ์ฑ
์ด ํ์.
skipWaiting๊ณผclients.claim์ ์ Worker๋ฅผ ์ฆ์ ํ์ฑํํ๋ฏ๋ก ๊ธฐ์กด Page์์ ํธํ์ฑ ๋๋ ์๋ก๊ณ ์นจ ํ๋ฆ์ ํจ๊ป ์ค๊ณ
๊ฒฝํ ํ๊ณ
SK hynix On-premise (2021~2024)
๊นกํต ํ๋ก์ ๋ ธ๋ 3๋๋ฅผ ๋๊ณ , ๋๋ฉ์ธ์ A ๋ ์ฝ๋๋ฅผ 3๊ฐ IP์ ๋งคํํ์ฌ ํธ๋ํฝ์ ๋ถ์ฐํ๋ค. ํ๋ก์ ๋ ธ๋๋ ๋ฐฑ์๋๋ก ํฌ์๋ฉ๋ง ๋ด๋น.
- ํด๋ผ์ฐ๋ LB๋ K8s MetalLB/kube-vip๋ ์๋ ์ต์ ๊ตฌํ์ด์๋ค.
- ์ง๊ธ์ด๋ผ๋ฉด: ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ฐ๋ผ MetalLB ๋๋ kube-vip๋ก VIP Failover๋ฅผ ์๋ํํ ์์ญ์ด๋ค.