[์ฃผ์ ๋ฅผ ๋ณด๊ณ ๋ ์๊ฐ]
- ์ ์ด๋ ต๋ค!
- ํฐ์ผํ
ํ ๋ ๋๊ธฐ์์๋ฅผ ์ฃผ๋๊ฒ ๋ณ๋ชฉ ํ์์ ์ํํ๊ธฐ ์ํ๊ฒ์ธ๋ฏ.
- ๊ทผ๋ฐ ๋๊ธฐ์์ ์กฐ์ฐจ๋ ํ๊ธธ๋๊ฐ ์๋๋ฐ, ์ด๊ฑด ๋ณ๋ชฉํ์์ ์ํํ์ง ๋ชปํ๊ฑด๊ฐ?
๋คํธ์ํฌ ๋ณ๋ชฉ ํ์
- ์ ์ : ๋คํธ์ํฌ ์์(๋์ญํญ, ๋ผ์ฐํฐ, ์ค์์น, ์๋ฒ ๋ฑ)์ ํ๊ณ๋ก ์ธํด ํน์ ์ง์ ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฒด๋๋ฉฐ ์ ์ฒด ๋คํธ์ํฌ ์ฑ๋ฅ์ด ์ ํ๋๋ ํ์
- ํนํ ๋๊ท๋ชจ ์ด๋ฒคํธ ์ผ๋๋, ํ์ ๋๋น ๋งค์ฐ ์งง์ ์๊ฐ์ ํญ๋ฐ์ ์ธ ํธ๋ํฝ์ด ์ง์ค๋๋ ์ํฉ ๋ฐ์ โ ์ด๋ ์๋ฒ๋ ๋คํธ์ํฌ ์ฒ๋ฆฌ ์ฉ๋, ์ ํ๋ฆฌ์ผ์ด์
์ฒ๋ฆฌ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ ์ค ๊ฐ์ฅ ์ฝํ ์ง์ ์์ ๋ณ๋ชฉ ๋ฐ์
- ์ฃผ์ ์์ธ
-
๋์ญํญ ๋ถ์กฑ : ํน์ ๊ตฌ๊ฐ์ ๋คํธ์ํฌ ํ์ /์ฅ๋น๊ฐ ์ฒ๋ฆฌํ ์์ด ๊ธฐ์กด๋ณด๋ค ๋ง์์ง ๊ฒฝ์ฐ
-
์๋ฒ ์ฑ๋ฅ ๋ฌธ์ : CPU/Thread ๊ณ ๊ฐ๋์ด ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ
-
์๋ชป๋ ๋คํธ์ํฌ ๊ตฌ์ฑ : ๋นํจ์จ์ ์ธ ๋คํธ์ํฌ ๊ตฌ์กฐ, ์๋ชป๋ ๋ผ์ฐํ
์ค์ ๋ฑ
โ ๊ฒฐ๊ตญ ์ฒ๋ฆฌ๋(Throughput)์ ๊ฐ์ํ๊ณ ์ง์ฐ(latency)๊ณผ ์คํจ์จ(error rate)์ ์์น
๋ณ๋ชฉ ํ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
- ๋ณ๋ชฉ ์ง์ ์ ํ์
ํด์ ํด๊ฒฐํ๊ธฐ
- ์์คํ
์ค๊ณ ์ฐจ์์์ ๋ณ๋ชฉ์ ์ค์ด๋ ๊ธฐ์ ์ /๊ตฌ์กฐ์ ์ต์ ํํ๊ธฐ โ ์ด๋ ๊ฒ ํ๊ธฐ์ํ ๊ธฐ์ ๋ค์ด ๋ ์ดํธ ๋ฆฌ๋ฏธํ
, CDN, Anycast, ์บ์ฑ ๋ฑ
- ์์คํ
์ด์ฉ์ ์ ์ ํํ๊ธฐ
- ์ ์ ์ธ์์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ค์ (๋๊ธฐ์ด, ์ ์ฐฉ์ ์ฐจ๋จ ๋ฑ)
- But, ๋๊ท๋ชจ ์ด๋ฒคํธ์์๋ ์ตํ์ ์๋จ..
๋ณ๋ชฉ ํ์ ์ํํ๊ธฐ ์ํ ๊ธฐ์ ๋ค
1๏ธโฃ ์บ์ฑ
- ์ ์
- ๋ฐ๋ณต์ ์ผ๋ก ์์ฒญ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๊ณ ๋น ๋ฅด๊ฒ ๋ฐํํ๋ ๋ฐฉ๋ฒ
- ์ฆ, ์์ฒญ์ โ๋์ฐฉ ์ง์ โ์ ์๋ฒ โ ์บ์๋ก ๋ฐ๊ฟ์ ์๋ฒ ๋ถํ๋ฅผ ์ค์
- ์๋ฆฌ
-
๋๊ท๋ชจ์์๋ ๋์ผํ ์์ฒญ์ด ์งง์ ์๊ฐ์ ์์ญ๋ง/์๋ฐฑ๋ง ๋ฒ ๋ฐ๋ณต
- ex ) ํฐ์ผํ
: โ์์ฌ ์ข์ ์ ๋ณด ์กฐํโ, ์ผํ๋ชฐ ์ธ์ผ: โ์ํ ์์ธ ์กฐํโ, โ๊ฐ๊ฒฉ/์ฌ๊ณ ํ์ธโ
# ๋งค ์์ฒญ๋ง๋ค DB ์กฐํ ๋ฐ์ -> ๋ฐ๋ณต๋ ์ ๋ณ๋ชฉํ์ ๋ฐ์ํจ
์ฌ์ฉ์ โ ์๋ฒ โ DB โ ์๋ฒ โ ์ฌ์ฉ์
-
์บ์ฑ์ด ์ ์ฉ๋๋ค๋ฉด?
# ์บ์์ ์์ฒญํ๋ ๊ฐ์ด ์์์์๋ ์๋ฒ/DB๊น์ง ์์ฒญ์ด ๋ด๋ ค๊ฐ์ง ์์
์ฌ์ฉ์ โ ์บ์(CDN/Redis) โ ์ฌ์ฉ์
-
๋ฐ๋ผ์, ์์ฒญ์ด ์๋ฒ๊น์ง ๋ด๋ ค๊ฐ๋ ํ์๋ฅผ ์ค์ฌ ๋ณ๋ชฉ์ โ๊ทผ๋ณธ์ ์ผ๋ก ์ฐจ๋จโ
- ํด๋ผ์ด์ธํธ, ์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ค์์ ์บ์ฑ์ ์ ์ฉ ๊ฐ๋ฅ
2๏ธโฃ CDN(Content Delivery Network)
- ์ ์ : ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์ฌ๋ฌ๊ฐ์ ์๋ฒ์ ์น ์ฝํ
์ธ ๋ค์ ๋ณต์ฌ๋ณธ์ ์ ์ฅํด๋๊ณ , ์ฌ์ฉ์๊ฐ ์์ฒญํ์๋ ์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด์ ์๋ ์๋ฒ์์ ์ฝํ
์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์
- 1๋ฒ ์บ์ฑ์ ๊ตฌํํํ๋ผ๊ณ ๋ณด๋ฉด ๋จ
- ์ฆ, ์บ์ฑ์ด๋ผ๋ ์๋ฆฌ ์์ฒด๋ ๊ฐ์ง๋ง, CDN์ ํนํ โ์ ์ธ๊ณ ์ฌ์ฉ์๊ฐ ๋ชฐ๋ฆด ๋โ ํจ๊ณผ๊ฐ ๊ทน๋ํ๋๋ ์บ์ฑ ์์น์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ์์ฑ
- ์๋ณธ ์๋ฒ๋ ์ค์ ๋ก ์์ฒญ์ ๋ฐ๋ ํ์๊ฐ ๋ํญ ๊ฐ์ โ ํฐ์ผํ
๊ฐ์ ์๊ฐ ํธ๋ํฝ์์ ์๋ณธ ์๋ฒ ๋ณดํธ
3๏ธโฃ Rate Limiting
-
์ ์ : ์๋ฒ๊ฐ ํน์ ์๊ณ์น๊น์ง๋ง ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํ์ฉํ๋ ์ ์ฑ
์ ์๋ฏธ ex) 1๋ถ๋น 60ํ
-
์๋ฆฌ
-
๋ฆฌ๋ฐ์์ด ์ฌ์ฉ์ ๋ชจ๋ ๋ฐ์๊ฒฝ์ฐ
์ฌ์ฉ์ โ ์๋ฒ โ ์ฐ๋ ๋/DB/CPU ๋ชจ๋ ์๋ชจ โ ์ฒ๋ฆฌ ๋๊ธฐ ์ค ์ฆ๊ฐ โ ์ง์ฐ ์ฆ๊ฐ โ ์๋ฒ ๋ค์ด
-
Rate Limiting ์ฌ์ฉํ ๊ฒฝ์ฐ
- ์ฆ, ์๋ฒ์ ์์ฒญ์ด "๋์ฐฉํ๊ธฐ ์ ์" ๊ณผ๋ํ ์์ฒญ์ ๋ง์ = ์๋ฒ๊ฐ ๊ฐ๋น ๊ฐ๋ฅํ ์๋ง ์ฒ๋ฆฌํ๋๋ก ๊ฐ์ ํ์ฌ ์๋ฒ๊ฐ ์ฃฝ์ง ์๋๋กํจ
์ฌ์ฉ์ โ (Rate Limiter) โ ์๋ฒ
โ
์ด๊ณผ ์์ฒญ์ ์ฆ์ ์ฐจ๋จ (429)
-
๊ตฌํ ์๊ณ ๋ฆฌ์ฆ(๋ํ์ ์ผ๋ก 2๊ฐ๋ง ์ค๋ช
)
- Token Bucket : ๋ฒํท์ ๋ด๊ธด ํ ํฐ์ ์(= ์์ฒญ๊ฐ๋ฅํ ํ์)๋ฅผ ํ์
ํ์ฌ ํ ํฐ์ด ์์์ ์์ฒญ ์ ํ
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ด์ง๋ง, ํ ํฐ์ด ๋๊ฐ๋ ์๊ธฐ์ ๋ฒํท์ ํ ํฐ์ด ์ฑ์์ง๋ ์๊ธฐ๊ฐ ๋์์ ๋ค์ด์ค๋ฉด Race Condition์ด ๋ฐ์ํ ์ ์์
- ์ผ์ ์๋๋ก ํ ํฐ ์์ฑ, ์์ฒญ ์ฒ๋ฆฌ ์ ํ ํฐ ์๋น

- Leaky Bucket : ๋ฒํท์ ์์ฒญ์ ๋ด๊ณ , ๊ฐ๋ ์ฐจ๋ฉด ๋ ๋ด์ง๋ชปํด ๋ฒ๋ ค์ง.
- FIFOํ์์ผ๋ก ์๋ํจ.
- ์์ฒญ์ ์ผ์ ์๋๋ก๋ง ์ฒ๋ฆฌํ๊ณ ์ด๊ณผ๋ ๋ฒ๋ฆผ
- ์ธ์๋ Fixed Window Counter, Sliding Logs, Sliding Window Counter์ด ์กด์ฌํจ.
-
์ด๋ ์์น์ ์ ์ฉํ๋๊ฒ์ด ํจ๊ณผ์ ์ผ๊น?
| ์์น | ์์ | ์ค๋ช
|
|---|
| ํด๋ผ์ด์ธํธ(CDN / Edge) | Cloudflare / CloudFront | ๊ฐ์ฅ ์๋จ์์ ์
์ฑ/๊ณผ๋ ์์ฒญ ์ฐจ๋จ |
| ๋ฏธ๋ค์จ์ด(API Gateway) | NGINX, Envoy | ๊ตฌํ ์ฉ์ดํ์ง๋ง, ์ปค์คํ
์ ํ๊ณ |
| ์๋ฒ(์ ํ๋ฆฌ์ผ์ด์
๋ด๋ถ) | Spring AOP, Guava RateLimiter | ์๋ฒ์์์ ์๋นํ ๋ค ์คํ๋์ง๋ง, Rate Limit ์ปค์คํ
๊ฐ๋ฅ |
โ ์ฆ, Rate Limiting์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ์ฉํ ๊ฑด์ง, ์ด๋ ์์น์ ์ ์ฉํ ๊ฑด์ง๋ ๊ฐ๊ฐ์ ์ฅ/๋จ์ ์ ์ดํด๋ณธ ํ ์์ ์ด ๊ตฌํํ๋ ์๋น์ค์ ๋ง๊ฒ ์ ํ/์ ์ฉํ๋ฉด๋จ.
4๏ธโฃ Anycast
- ์ ์ : ์๋ก ๋ค๋ฅธ๊ณณ, ๋ค๋ฅธ ํธ์คํธ๋ผ๋ฆฌ ๋์ผํ IP์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฐ๋
. ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋์ ํต์ ํ๋ ๋ฐฉ์
- DNS์์ ํํ ์ฌ์ฉ๋จ

- ์๋ฆฌ
- ๋ถํ๊ฐ ์ง๋ฆฌ์ ์ผ๋ก ์๋ ๋ถ์ฐ : ์์ฒญ์ด ์ ์ธ๊ณ์์ ๋์์ ๋ค์ด์๋ ํ ๊ณณ์ผ๋ก ๋ชฐ๋ฆฌ์ง ์๊ณ ๊ฐ ์ง์ญ POP๋ก ํฉ์ด์ ธ โํ ์ง์ ์ด ํฌํ๋๋ ์ํฉโ์ ์๋ฐฉ
๊ทธ๋์ ์ด๋ค๊ฑธ ์ฐ๋ผ๋๊ฑธ๊น?
- ๋ณ๋ชฉ์ ํ๋ถ๋ถ์์๋ง ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ ๋จ๊ณ๋ง๋ค ๋ฐ์ํ ์ ์๋๊ฒ!
- ๊ฐ ๋ ๋ฒจ(ํด๋ผ์ด์ธํธ,๋ฏธ๋ค์จ์ด,์๋ฒ)์์ "์๋ฒ์ ๋ถํ๊ฐ ์ ๋ฆฌ์ง ์๋๋ก" ์ฐจ๋จ/ํก์/์ง์ฐ/๋ถ์ฐ์ ๋์์ ์ ์ฉํ๋๊ฒ!
์ฒ์์ผ๋ก ๋์๊ฐ์ ๊ทธ๋ผ ๋๊ธฐ์์ ํ๊ธฐ๋ ๋ฌธ์ ๋?
- ๋๊ธฐ์ด์ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋์ ์์ฒญ ์๋ฅผ ์ด๊ณผํ์ง ์๋๋ก ์ฌ์ฉ์ ์ ์
์๋๋ฅผ ์กฐ์ ํ๋ ์ ๋ต์
- ๋ฐ๋ผ์ ๋ณ๋ชฉ์ ํด์ํ๋ค๊ธฐ๋ณด๋ค ๋ณ๋ชฉ์ ๋ฐ์ ์์น๋ฅผ ์๋ฒ ๊น์ ๊ณณ์์ ์๋จ(๋๊ธฐ์ด)์ผ๋ก ์ฎ๊ฒจ ํผํด๋ฅผ ์ต์ํํ๋ ๋ฐฉ์์ธ๋ฏ ์ถ๋ค.
- ๋๊ท๋ชจ ํธ๋ํฝ์ ์ํด ๋๊ธฐ์ด์ด๋ผ๋ ๋ณ๋ชฉ ์ํ์ ๋ต์ด ์ ์ฉ๋์์ผ๋, ๋๊ธฐ์ด ์์ฒด๊ฐ ๋ณ๋ชฉ์ง์ ์ด ๋ ๊ฒฝ์ฐ์ธ๋ฏ
- ์ค์ ๋ณ๋ชฉ ์ํ๋ CDN/์บ์ฑ + Rate Limiting + DB ๋ถ์ฐ ๋ฑ ๊ณ์ธต๋ณ ์ ๋ต์ ํจ๊ป ์ ์ฉํ๋ฉด ๋์ง ์์๊น? ํ๋ ์๊ฐ์ด ๋ ๋ค.
ํ๊ณ
์ค์ํ์ ์์๋ฅผ ์๊ฐํ๋ฉด์ ๊ณต๋ถ๋ฅผ ํ๋๊น ์ข๋ ์ฌ๋ฐ๊ฒ ๋๊ปด์ง๋ ๊ฒ ๊ฐ๋ค. ์ค๋ ์ ๋ฆฌํ๊ฑฐ ์ธ์๋ ๋ฐฉ์์ ๋ง๊ณ ๋ค์ํ๋ฐ, ์์ผ๋ก ์ ์ฐจ ๋ ๊ณต๋ถํด ๋๊ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค!
[์ฐธ๊ณ ์๋ฃ]