ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์ ๋์ญํญ ์ ์ด๋ฅผ ํตํ ํธ๋ํฝ ์ ฐ์ดํ์ ํ์ํฉ๋๋ค. ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํ๊ธฐ ์ํ ๊ตฌํ ์ ๋ต, ์ด์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์ฐ์ธ์.
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์ ํธ๋ํฝ ์ ฐ์ดํ: ๋์ญํญ ์ ์ด ๊ตฌํ
์ค๋๋ ๊ณผ ๊ฐ์ด ์ ์ธ๊ณ๊ฐ ์ฐ๊ฒฐ๋ ์ธ์์์๋ ์ผ๊ด๋๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ฌ์ฉ์์์ ์ฒซ ๋ฒ์งธ ์ ์ ์ธ ํ๋ฐํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ ๋ณต์กํด์ง๊ณ ์์ผ๋ฉฐ, ๋ง์ดํฌ๋ก์๋น์ค ๋ฐ API ๋คํธ์ํฌ์ ์์กดํ๊ณ ์์ต๋๋ค. ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋ ์ด๋ฌํ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ณ ํธ๋ํฝ ์ ฐ์ดํ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๊ฐ๋ ฅํ ํ๋ซํผ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์ ๋ด์์ ๋์ญํญ ์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ธต์ ์ผ๋ก ์ดํด๋ณด๊ณ , ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ ์ต์ ํ์ ์ด์ , ๊ณผ์ , ๊ทธ๋ฆฌ๊ณ ์ค์ฉ์ ์ธ ์ ๋ต์ ํ๊ตฌํฉ๋๋ค.
ํธ๋ํฝ ์ ฐ์ดํ์ ํ์์ฑ ์ดํดํ๊ธฐ
๊ธฐ์กด์ ๋คํธ์ํฌ ์ธํ๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ํธ๋ํฝ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์ธ๋ถํ๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค:
- ์ฑ๋ฅ ๋ณ๋ชฉ ํ์: ๋์ญํญ์ ๋ง์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ค์ํ ์๋น์ค๋ฅผ ์ ์ํ์ฌ ์ ์ฒด ์์คํ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ์ ์กฐํ ์ฌ์ฉ์ ๊ฒฝํ: ๋๋ฆฐ ๋ก๋ฉ ์๊ฐ๊ณผ ๋ฐ์ ์๋ ์ธํฐํ์ด์ค๋ ์ฌ์ฉ์์๊ฒ ๋ถํธ์ ์ฃผ๊ณ ๋น์ฆ๋์ค ๊ฒฐ๊ณผ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๋ณด์ ์ทจ์ฝ์ : ์ ์ด๋์ง ์๋ ํธ๋ํฝ์ ์ ์์ ์ธ ํ์์๊ฐ ์๋น์ค ๊ฑฐ๋ถ(DoS) ๊ณต๊ฒฉ์ ์์ํ๋ ๋ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค.
- ๋นํจ์จ์ ์ธ ๋ฆฌ์์ค ํ์ฉ: ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ์๊ฐ์๋ ๋ฆฌ์์ค๋ฅผ ๊ณผ๋ํ๊ฒ ํ๋ก๋น์ ๋ํ์ฌ ์ธํ๋ผ ๋น์ฉ ๋ญ๋น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
ํธ๋ํฝ ์ ฐ์ดํ์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ํ ์ธ๋ถํ๋ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ด๋ฆฌ์๋ ์ค์ํ ์๋น์ค๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๋์ญํญ ์๋น๋ฅผ ์ ํํ๋ฉฐ, ์ ๋ฐ์ ์ธ ์์คํ ํ๋ณตํ๋ ฅ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋?
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋ ํ๋ฐํธ์๋ ์๋น์ค์ ๊ทธ ์ข ์์ฑ ๊ฐ์ ํต์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ์ ์ฉ ์ธํ๋ผ ๊ณ์ธต์ ๋๋ค. ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ค์ ์ ๋๋ ๊ธฐ์กด ์๋น์ค ๋ฉ์์ ๋ฌ๋ฆฌ, ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋ ๋ณต์กํ ํ๋ฐํธ์๋ ์ํคํ ์ฒ ๊ด๋ฆฌ๋ผ๋ ๊ณ ์ ํ ๊ณผ์ ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๋ค๋ฃน๋๋ค.
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํธ๋ํฝ ๊ด๋ฆฌ: ๋ผ์ฐํ , ๋ก๋ ๋ฐธ๋ฐ์ฑ, ํธ๋ํฝ ์ ฐ์ดํ.
- ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ์ํ ๋ฉํธ๋ฆญ, ์ถ์ , ๋ก๊น .
- ๋ณด์: ์ธ์ฆ, ์ธ๊ฐ, ์ํธํ.
- ํ๋ณตํ๋ ฅ์ฑ: ์ํท ๋ธ๋ ์ดํน, ์ฌ์๋ ์ ์ฑ , ์ฅ์ ์ฃผ์ .
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋ ๋คํธ์ํฌ ํต์ ์ ๋ณต์ก์ฑ์ ์ถ์ํํจ์ผ๋ก์จ ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ ๊ตฌ์ถ๊ณผ ์ฌ์ฉ์์๊ฒ ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์์ ๋์ญํญ ์ ์ด์ ์ด์
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์ ๋ด์์ ๋์ญํญ ์ ์ด๋ฅผ ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํฅ์: ๋ ์ค์ํ ์๋น์ค์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ญํญ์ ์ ํํจ์ผ๋ก์จ ์ค์ํ ํ๋ฐํธ์๋ ๊ตฌ์ฑ ์์๊ฐ ํจ์จ์ ์ผ๋ก ์๋ํ๋ ๋ฐ ์ถฉ๋ถํ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ ์ ์์ต๋๋ค. ์ด๋ ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ, ๋ ๋ถ๋๋ฌ์ด ์ํธ ์์ฉ ๋ฐ ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ณด๋ค ๋ํํ ํธ๋ํฝ์ ์ฐ์ ์ํ์ฌ ํนํ ๋์ญํญ์ด ์ ํ๋ ์ง์ญ์์ ๋ฐ์์ด ๋น ๋ฅด๊ณ ์ฆ๊ฑฐ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
- ํ๋ณตํ๋ ฅ์ฑ ์ฆ๊ฐ: ๋์ญํญ ์ ์ด๋ ๋จ์ผ ์๋น์ค๊ฐ ์์คํ ์ ์๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์๊ธฐ์น ์์ ํธ๋ํฝ ๊ธ์ฆ์ ๋ํ ์ ๋ฐ์ ์ธ ์์ ์ฑ๊ณผ ํ๋ณตํ๋ ฅ์ฑ์ ํฅ์์ํต๋๋ค.
- ์ธํ๋ผ ๋น์ฉ ์ ๊ฐ: ๋ฆฌ์์ค ํ์ฉ์ ์ต์ ํํจ์ผ๋ก์จ ๋์ญํญ ์ ์ด๋ ๊ณผ๋ํ ํ๋ก๋น์ ๋์ ํ์์ฑ์ ์ค์ฌ ์๋นํ ๋น์ฉ ์ ๊ฐ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๊ด๋ฆฌ ๊ฐ์ํ: ์ค์ ์ง์ค์ ์๋น์ค ๋ฉ์๋ ํธ๋ํฝ ์ ์ฑ ๊ด๋ฆฌ๋ฅผ ์ํ ๋จ์ผ ์ ์ด ์ง์ ์ ์ ๊ณตํ์ฌ ์ด์์ ๋จ์ํํ๊ณ ๊ตฌ์ฑ ์ค๋ฅ์ ์ํ์ ์ค์ ๋๋ค.
- ๋ณด์ ๊ฐํ: ํน์ IP ์ฃผ์๋ ์ฌ์ฉ์์ ์์ฒญ ์๋ฅผ ์ ํํ์ฌ ์๋น์ค ๊ฑฐ๋ถ(DoS) ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด ์์ฒญ ์๋ ์ ํ(rate limiting)์ ๊ตฌํํ ์ ์์ต๋๋ค.
- A/B ํ ์คํ ๋ฐ ์นด๋๋ฆฌ ๋ฐฐํฌ: A/B ํ ์คํ ๋๋ ์นด๋๋ฆฌ ๋ฐฐํฌ๋ฅผ ์ํด ํ๋ฐํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ฒ์ ์ ํ ๋น๋ ํธ๋ํฝ์ ์ ๋ฐํ๊ฒ ์ ์ดํ์ฌ ํต์ ๋ ์ถ์์ ์ํ ์ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๋์ญํญ ์ ์ด๋ฅผ ์ํ ๊ตฌํ ์ ๋ต
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์์ ๋์ญํญ ์ ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฌ๋ฌ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
1. ์์ฒญ ์๋ ์ ํ(Rate Limiting)
์์ฒญ ์๋ ์ ํ์ ํน์ ์๊ฐ ๋ด์ ์๋น์ค์ ๋ณด๋ผ ์ ์๋ ์์ฒญ ์๋ฅผ ์ ํํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ์์ค์์ ๊ตฌํ๋ ์ ์์ต๋๋ค:
- ์ ์ญ ์๋ ์ ํ: ์์ค์ ๊ด๊ณ์์ด ์๋น์ค์ ๋ํ ๋ชจ๋ ์์ฒญ์ ์ ์ฉ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ณ ์๋ ์ ํ: ํน์ ํด๋ผ์ด์ธํธ(์: IP ์ฃผ์, ์ฌ์ฉ์ ID)๋ก๋ถํฐ์ ์์ฒญ ์๋ฅผ ์ ํํฉ๋๋ค.
- API๋ณ ์๋ ์ ํ: ํน์ API ์๋ํฌ์ธํธ์ ์ ์ฉ๋ฉ๋๋ค.
์์: ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ์๋น์ค์ ๋ํ ์์ฒญ ์๋ฅผ ์ ํํ์ฌ ๋จ์ฉ์ ๋ฐฉ์งํ๊ณ ๊ณต์ ํ ์ฌ์ฉ์ ๋ณด์ฅํฉ๋๋ค.
๊ตฌํ: Istio, Envoy, Gloo Edge์ ๊ฐ์ ์ต์ ์๋น์ค ๋ฉ์ ์๋ฃจ์ ์ ์์ฒญ ์๋ ์ ํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ์ด๋ฌํ ์๋ฃจ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ ํ์๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ํ๊ธฐ ์ํด ์๋ ์ ํ ์๋ฒ(์: Redis, Memcached)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Istio ์์ (`EnvoyFilter` ์ฌ์ฉ):
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: rate-limit-filter
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: GATEWAY
listener:
filterChain:
filter:
name: "envoy.filters.network.http_connection_manager"
subFilter:
name: "envoy.filters.http.router"
patch:
operation: INSERT_BEFORE
value:
name: envoy.filters.http.ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
domain: frontend-domain
failure_mode_deny: true
rate_limit_service:
grpc_service:
envoy_grpc:
cluster_name: ratelimit_cluster
timeout: 0.2s
--- # ์์ฒญ ์๋ ์ ํ ์๋น์ค ํด๋ฌ์คํฐ
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: ratelimit-service
spec:
hosts:
- ratelimit.example.com # ratelimit ์๋น์ค ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ธ์
ports:
- number: 8081 # ratelimit ์๋น์ค ํฌํธ๋ก ๋ฐ๊พธ์ธ์
name: grpc
protocol: GRPC
resolution: DNS
location: MESH_EXTERNAL
์ด ์์ ๋ ์๋ ์ ํ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ์๋ ์ ํ์ ์ ์ฉํ๋๋ก Envoy ํํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. `domain`์ ์๋ ์ ํ ๋๋ฉ์ธ์ ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ด ์๋ํ๋ ค๋ฉด Lyft์ ratelimit ์๋น์ค์ ๊ฐ์ด ์คํ ์ค์ธ ์๋ ์ ํ ์๋น์ค๊ฐ ํ์ํฉ๋๋ค.
2. ๊ฐ์ค ๋ผ์ด๋ ๋ก๋น(WRR)
WRR์ ์ฌ์ฉํ๋ฉด ๋ฏธ๋ฆฌ ์ ์๋ ๊ฐ์ค์น์ ๋ฐ๋ผ ์๋น์ค์ ๋ค๋ฅธ ๋ฒ์ ์ด๋ ๋ค๋ฅธ ์๋น์ค ์ธ์คํด์ค ๊ฐ์ ํธ๋ํฝ์ ๋ถ์ฐํ ์ ์์ต๋๋ค. ์ด๋ A/B ํ ์คํ ๋ฐ ์นด๋๋ฆฌ ๋ฐฐํฌ์ ํนํ ์ ์ฉํฉ๋๋ค.
์์: ํธ๋ํฝ์ 90%๋ฅผ ์๋น์ค์ ์์ ์ ์ธ ๋ฒ์ ์ผ๋ก ๋ณด๋ด๊ณ 10%๋ฅผ ํ ์คํธ์ฉ ์ ๋ฒ์ ์ผ๋ก ๋ณด๋ ๋๋ค.
๊ตฌํ: ๋๋ถ๋ถ์ ์๋น์ค ๋ฉ์ ์๋ฃจ์ ์ WRR์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๊ตฌ์ฑ ํ์ผ์ด๋ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Istio ์์ (`VirtualService` ์ฌ์ฉ):
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-frontend-service
spec:
hosts:
- "my-frontend-service.example.com" # ์๋น์ค ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ธ์
gateways:
- my-gateway # ๊ฒ์ดํธ์จ์ด๋ก ๋ฐ๊พธ์ธ์
http:
- route:
- destination:
host: my-frontend-service-v1 # ์๋น์ค v1 ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ธ์
port:
number: 80
weight: 90
- destination:
host: my-frontend-service-v2 # ์๋น์ค v2 ํธ์คํธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์ธ์
port:
number: 80
weight: 10
์ด ์์ ๋ ํธ๋ํฝ์ 90%๋ฅผ `my-frontend-service-v1`๋ก, 10%๋ฅผ `my-frontend-service-v2`๋ก ๋ผ์ฐํ ํฉ๋๋ค.
3. ์ฐ์ ์์ ๊ธฐ๋ฐ ํ์
์ฐ์ ์์ ๊ธฐ๋ฐ ํ์์ ๋ค์ํ ์ ํ์ ํธ๋ํฝ์ ์๋ก ๋ค๋ฅธ ์ฐ์ ์์๋ฅผ ํ ๋นํ์ฌ ๋ ์ค์ํ ์์ฒญ๋ณด๋ค ์ค์ํ ์์ฒญ์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ๊ฐ ๋์ ๊ธฐ๊ฐ์๋ ์ฐ์ ์์๊ฐ ๋์ ํธ๋ํฝ์ด ์ ์ํ๊ฒ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์: ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๋๊ธฐํ ์์ ๋ณด๋ค ๋ํํ ์ฌ์ฉ์ ์์ฒญ์ ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ตฌํ: ์ด๋ ์ข ์ข HTTP ํค๋ ๊ธฐ๋ฐ ๋ผ์ฐํ ๋ฐ ์๋น์ค ํ์ง(QoS) ์ ์ฑ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์๋น์ค ๋ฉ์ ๋ด์์ ์ฌ์ฉ์ ์ง์ ๊ตฌํ์ด ํ์ํฉ๋๋ค.
4. ์ง๋ฆฌ์ ์์น ๊ธฐ๋ฐ ํธ๋ํฝ ์ ฐ์ดํ ์ ์ฑ
์ฌ์ฉ์์ ์ง๋ฆฌ์ ์์น์ ๋ฐ๋ผ ๋์ญํญ ํ ๋น์ ์กฐ์ ํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์น ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๋์ญํญ ์ ํ์ ํด๊ฒฐํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ญํญ ์ ์ฝ์ด ์๋ ๊ฒ์ผ๋ก ์๋ ค์ง ์ง์ญ์ ์ฌ์ฉ์๋ ์ต์ ํ๋ ์ด๋ฏธ์ง์ ๊ฐ์๋ ๋ฐ์ดํฐ ์ ์ก์ผ๋ก ์ ๋์ญํญ ํ๊ฒฝ์ ์ ๊ณต๋ฐ์ ์ ์๊ณ , ๋คํธ์ํฌ๊ฐ ๊ฒฌ๊ณ ํ ์ง์ญ์ ์ฌ์ฉ์๋ ์์ ํ ์ถฉ์ค๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝํํ ์ ์์ต๋๋ค.
์์: ์ฌ์ฉ์์ ๊ฐ์ง๋ ์์น์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง ์์ถ ์์ค์ด๋ ๋น๋์ค ํด์๋๋ฅผ ๊ตฌํํฉ๋๋ค.
๊ตฌํ: ์ด๋ฅผ ์ํด์๋ ์ง๋ฆฌ์ ์์น ๋ฐ์ดํฐ(์: CDN ๋๋ ์ ์ฉ ์ง๋ฆฌ์ ์์น ์๋น์ค์์ ์ ๊ณต)๋ฅผ ์๋น์ค ๋ฉ์์ ํธ๋ํฝ ์ ฐ์ดํ ์ ์ฑ ์ ํตํฉํด์ผ ํฉ๋๋ค. HTTP ํค๋๋ ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์์น๋ฅผ ์๋ณํ๊ณ ์ ์ ํ ํธ๋ํฝ ์ ฐ์ดํ ๊ท์น์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ฌ๋ฐ๋ฅธ ์๋น์ค ๋ฉ์ ์ ํํ๊ธฐ
์ฌ๋ฌ ์๋น์ค ๋ฉ์ ์๋ฃจ์ ์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๊ณ ์ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ์ธ๊ธฐ ์๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Istio: ํ๋ถํ ๊ธฐ๋ฅ ์ธํธ์ ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ ์ง์์ ๊ฐ์ถ ๋๋ฆฌ ์ฑํ๋ ์คํ ์์ค ์๋น์ค ๋ฉ์์ ๋๋ค.
- Envoy: Istio์ ๊ฐ์ ์๋น์ค ๋ฉ์์ ๋ฐ์ดํฐ ํ๋ ์ธ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ๊ณ ์ฑ๋ฅ ํ๋ก์์ ๋๋ค. ๋ ๋ฆฝํ ์๋ฃจ์ ์ผ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Gloo Edge: Envoy๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ API ๊ฒ์ดํธ์จ์ด ๋ฐ ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ก, ๊ณ ๊ธ ํธ๋ํฝ ๊ด๋ฆฌ ๋ฐ ๋ณด์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- Nginx Service Mesh: ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๊ฐ ์ฌ์ด ๊ฒฝ๋ ์๋น์ค ๋ฉ์์ ๋๋ค.
- Linkerd: ๋จ์์ฑ๊ณผ ์ฑ๋ฅ์ ์ํด ์ค๊ณ๋ CNCF ์กธ์ ํ๋ก์ ํธ์ ๋๋ค.
์๋น์ค ๋ฉ์๋ฅผ ์ ํํ ๋ ๋ค์ ์์๋ฅผ ๊ณ ๋ คํ์ธ์:
- ๊ธฐ๋ฅ: ์๋น์ค ๋ฉ์๊ฐ ํธ๋ํฝ ์ ฐ์ดํ, ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ, ๋ณด์๊ณผ ๊ฐ์ด ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๊น?
- ์ฑ๋ฅ: ์๋น์ค ๋ฉ์์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ ์ด๋ ์ ๋์ ๋๊น?
- ๋ณต์ก์ฑ: ์๋น์ค ๋ฉ์๋ฅผ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ผ๋ง๋ ์ฝ์ต๋๊น?
- ์ปค๋ฎค๋ํฐ ์ง์: ์ง์๊ณผ ์๋ด๋ฅผ ์ ๊ณตํ ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ๊ฐ ์์ต๋๊น?
- ํตํฉ: ๊ธฐ์กด ์ธํ๋ผ์ ์ฝ๊ฒ ํตํฉ๋ฉ๋๊น?
๋ชจ๋ํฐ๋ง ๋ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ
ํจ๊ณผ์ ์ธ ๋์ญํญ ์ ์ด๋ฅผ ์ํด์๋ ๊ฐ๋ ฅํ ๋ชจ๋ํฐ๋ง๊ณผ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ด ํ์ํฉ๋๋ค. ํธ๋ํฝ ํจํด์ ์ถ์ ํ๊ณ , ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ฉฐ, ํธ๋ํฝ ์ ฐ์ดํ ์ ์ฑ ์ ์ํฅ์ ์ธก์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ชจ๋ํฐ๋งํ ์ฃผ์ ๋ฉํธ๋ฆญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์์ฒญ ์ง์ฐ ์๊ฐ: ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
- ์ค๋ฅ์จ: ์คํจํ๋ ์์ฒญ์ ๋น์จ์ ๋๋ค.
- ํธ๋ํฝ ์: ์ ์ก๋ ๋ฐ์ดํฐ์ ์์ ๋๋ค.
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ : ์๋น์ค์ ๋ฆฌ์์ค ์๋น๋์ ๋๋ค.
Prometheus, Grafana, Jaeger์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ฉํธ๋ฆญ์ ์์งํ๊ณ ์๊ฐํํ ์ ์์ต๋๋ค. ์๋น์ค ๋ฉ์ ์๋ฃจ์ ์ ์ข ์ข ์ด๋ฌํ ๋๊ตฌ์์ ๊ธฐ๋ณธ ์ ๊ณต ๋์๋ณด๋ ๋ฐ ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์์ ๋์ญํญ ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ์ ์์๊ฑฐ๋ ํ๋ซํผ: ์ผํ ์ฑ์๊ธฐ ๋์ ์ํ ์นดํ๋ก๊ทธ ๋ฐ ๊ฒฐ์ ํ์ด์ง๋ก์ ํธ๋ํฝ์ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ์ํํ๊ณ ์์ ์ ์ธ ์ผํ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ์ฃผ๋ฌธ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋์ญํญ์ ์ ํํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ํฉ๋๋ค.
- ์คํธ๋ฆฌ๋ฐ ์๋น์ค: ์ฌ์ฉ์์ ๋คํธ์ํฌ ๋์ญํญ์ ๋ฐ๋ผ ์ ์ํ ๋นํธ๋ ์ดํธ ์คํธ๋ฆฌ๋ฐ์ ๊ตฌํํฉ๋๋ค. ๊ณ ๋์ญํญ ์ฐ๊ฒฐ ์ฌ์ฉ์๋ ๊ณ ํด์๋ ๋น๋์ค๋ฅผ, ์ ๋์ญํญ ์ฐ๊ฒฐ ์ฌ์ฉ์๋ ์ ํด์๋ ๋น๋์ค๋ฅผ ์์ ํฉ๋๋ค.
- ์์ ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์ : ์ฌ์ฉ์๊ฐ ํน์ ์๊ฐ ๋ด์ ํ ์ ์๋ API ์์ฒญ ์๋ฅผ ์ ํํ์ฌ ๋จ์ฉ์ ๋ฐฉ์งํ๊ณ ๊ณต์ ํ ์ฌ์ฉ์ ๋ณด์ฅํฉ๋๋ค. ๋ฐ์ดํฐ ๋๊ธฐํ์ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ณด๋ค ๊ฒ์ ๋ฐ ๋๊ธ ๋ฌ๊ธฐ์ ๊ฐ์ ๋ํํ ๊ธฐ๋ฅ์ ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฒ์ ํ๋ซํผ: ์ค์๊ฐ ๊ฒ์ ํธ๋ํฝ์ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ์ง์ฐ ์๊ฐ์ ์ต์ํํ๊ณ ์ํํ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ๊ฒ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ๊ฒ์ ๋ค์ด๋ก๋ ๋ฐ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๋์ญํญ์ ์ ํํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ๋ด์ค ์น์ฌ์ดํธ: ์ฌ์ฉ์์ ์ง๋ฆฌ์ ์์น ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ต์ ํ๋ ์ด๋ฏธ์ง์ ๋น๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ญํญ์ด ์ ํ๋ ์ง์ญ์ ์ฌ์ฉ์๋ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ ์๊ณ ๋ฎ์ ํด์๋์ ์ด๋ฏธ์ง์ ๋น๋์ค๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋์ญํญ ์ ์ด๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๊ณผ์ ์ ๊ณ ๋ ค ์ฌํญ๋ ์์ต๋๋ค:
- ๋ณต์ก์ฑ: ์๋น์ค ๋ฉ์๋ฅผ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ผ๋ฉฐ ์ ๋ฌธ์ ์ธ ๊ธฐ์ ๊ณผ ์ ๋ฌธ ์ง์์ด ํ์ํฉ๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋: ์๋น์ค ๋ฉ์๋ ์ผ๋ถ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฏ๋ก ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ๊ตฌ์ฑ ๊ด๋ฆฌ: ํนํ ํฌ๊ณ ๋ณต์กํ ํ๊ฒฝ์์ ์๋น์ค ๋ฉ์์ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ: ํธ๋ํฝ ์ ฐ์ดํ ์ ์ฑ ์ด ์๋ํ ๋๋ก ์๋ํ๋์ง ํ์ธํ๋ ค๋ฉด ํจ๊ณผ์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ด ์ค์ํฉ๋๋ค.
- ํธํ์ฑ: ์๋น์ค ๋ฉ์๊ฐ ๊ธฐ์กด ์ธํ๋ผ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํธํ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ๊ณผ์ ์์ง๋์ด๋ง: ๋ณต์ก์ฑ์ด ์ด์ ๋ณด๋ค ํฌ๋ค๋ฉด ์๋น์ค ๋ฉ์๋ฅผ ๊ตฌํํ์ง ๋ง์ธ์. ์๊ตฌ ์ฌํญ์ด ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฐ ๋ ๊ฐ๋จํ ์๋ฃจ์ ์ผ๋ก ์์ํ์ธ์.
๋์ญํญ ์ ์ด ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์์ ๋์ญํญ ์ ์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- ์๊ฒ ์์ํ๊ธฐ: ์์ ํ์ผ๋ฟ ํ๋ก์ ํธ๋ก ์์ํ์ฌ ๊ฒฝํ์ ์๊ณ ์ ๊ทผ ๋ฐฉ์์ ๊ฒ์ฆํ์ธ์.
- ๋ช ํํ ๋ชฉํ ์ ์: ๋์ญํญ ์ ์ด ๊ตฌํ์ ๋ํ ๋ชฉํ์ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ์ ์ํ์ธ์.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์ธํ๋ผ์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํธ๋ํฝ ์ ฐ์ดํ ์ ์ฑ ์ ์ํฅ์ ์ธก์ ํ์ธ์.
- ๊ตฌ์ฑ ์๋ํ: ์ค๋ฅ ์ํ์ ์ค์ด๊ณ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋น์ค ๋ฉ์์ ๊ตฌ์ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์๋ํํ์ธ์.
- ๊ตฌ์ฑ ๊ด๋ฆฌ ๋๊ตฌ ์ฌ์ฉ: Ansible, Chef, Puppet๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๋ฉ์์ ๊ตฌ์ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ฝ๋ํ ์ธํ๋ผ(IaC) ์ฑํ: Terraform ๋๋ CloudFormation๊ณผ ๊ฐ์ IaC ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ์ ๋ฐฉ์์ผ๋ก ์ธํ๋ผ๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ์ธ์.
- ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ๊ตฌํ: ๋ฌด๋จ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๊ณ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์๋น์ค ๋ฉ์๋ฅผ ๋ณดํธํ์ธ์.
- ์ค์ ์ง์ค์ ๊ตฌ์ฑ ์ ์ฅ์ ์ฌ์ฉ: Git๊ณผ ๊ฐ์ ์ค์ ์ง์ค์ ์ ์ฅ์์ ์๋น์ค ๋ฉ์ ๊ตฌ์ฑ์ ์ ์ฅํ์ธ์.
- ๊ฐ๋ฐ ๋ฐ ์ด์ ํ๊ณผ ํ๋ ฅ: ๊ฐ๋ฐ ๋ฐ ์ด์ ํ์ด ๋์ญํญ ์ ์ด์ ๋ชฉํ์ ๋ชฉ์ ์ ๋ํด ์ผ์นํ๋์ง ํ์ธํ์ธ์.
- ์ง์ญ์ ์ฐจ์ด ๊ณ ๋ ค: ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ณ ๋ คํ์ฌ ์ฌ์ฉ์์ ์ง๋ฆฌ์ ์์น์ ๋ฐ๋ผ ๋์ญํญ ์ ์ด ์ ์ฑ ์ ์กฐ์ ํ์ธ์.
๊ฒฐ๋ก
ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์ ํธ๋ํฝ ์ ฐ์ดํ, ํนํ ๋์ญํญ ์ ์ด ๊ตฌํ์ ์ค๋๋ ์ ๋ณต์กํ๊ณ ๋ถ์ฐ๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์ ์ค๋ช ํ ์ด์ , ๊ณผ์ , ๊ตฌํ ์ ๋ต์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ์กฐ์ง์ ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์์ ํ์ ํ์ฉํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ผ๊ด๋๊ณ ์์ ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฑ๊ณต์ ์ธ ๊ตฌํ์ ์ํด ๋ชจ๋ํฐ๋ง, ์๋ํ ๋ฐ ํ์ ์ ์ฐ์ ์ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ํ๋ฐํธ์๋ ์ํคํ ์ฒ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์ ๊ด๋ฆฌ๋ ํ๋ฐํธ์๋ ์๋น์ค ๋ฉ์๋ ๊ธ๋ก๋ฒ ๊ณ ๊ฐ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ๊ณ ํ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ๊ฒ์ ๋๋ค.