[Network] Rate Limit๊ณผ Throttling ์ดํ•ด

๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜ ํฌ์ŠคํŒ…ํ•  ๊ธ€์€ ์˜ค๋žœ๋งŒ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ ์ด๋ก ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ฅผ ํ•˜๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฏธ๋“ค์›จ์–ด์™€ ํ†ต์‹ ์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์ง€์‹์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ์š”. ์ž์‹ ์ด ๊ฐœ๋ฐœํ•˜๋Š” API ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ˜น์€ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด ์˜์กดํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ฏผํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋ฐ”๋กœ ํŠธ๋ž˜ํ”ฝ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฌผ๋ก  ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์Šค์ผ€์ผ ์—…(Scale up)์ด๋‚˜ ์Šค์ผ€์ผ ์•„์›ƒ(Scale out) ๊ฐ™์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€ API์˜ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ๋‹ค ์ค€๋‹ค๊ฑฐ๋‚˜, ๋น„์šฉ์ ์ธ ๋ฌธ์ œ๋กœ

๋ฆฌ์†Œ์Šค๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋งค์šฐ ๋‚œ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

Throttling

์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ž์›์˜ ์ด์šฉ์„ ์ œํ•œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ ์“ฐ๋กœํ‹€๋ง(Throttling)์ž…๋‹ˆ๋‹ค. Throttling์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์›์˜ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์กฐ์ ˆํ•˜์—ฌ ์ผ์ •ํ•œ ์†๋„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๋„คํŠธ์›Œํฌ์—์„œ ์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ณผ๋„ํ•œ ์‚ฌ์šฉ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์˜ QoS(์„œ๋น„์Šค ํ’ˆ์งˆ)์„ ์ง€์ผœ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Throttling์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ ํŠธ๋ž˜ํ”ฝ์˜ ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•จ์œผ๋กœ์จ ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด API๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด์ž‘์ • ๋ง‰๊ธฐ๋งŒํ•ด์„œ๋Š” ์˜คํžˆ๋ ค ํŠธ๋ž˜ํ”ฝ์˜ ์ œ์–ด๊ฐ€ ์•„๋‹Œ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ฐด(ban)์œผ๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ๋ฐ, ์ด๋ฅผ ์œ„ํ•ด ์ดˆ๋‹น ํ—ˆ์šฉ๋˜๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” RateLimit์ด๋ผ ํ•˜๋ฉฐ ์‹œ์Šคํ…œ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ , ๋Œ€๊ธฐ์—ด์ด๋‚˜ ์˜ค๋ฒ„๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

RateLimit

RateLimit์€ API ๋˜๋Š” ์›น ์„œ๋น„์Šค์—์„œ ์š”์ฒญ ์†๋„๋ฅผ ์ œํ•œํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํŠน์ • ์„œ๋น„์Šค ํ˜น์€ IP ์ฃผ์†Œ์—์„œ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ IP ํ˜น์€ ์„œ๋น„์Šค์—์„œ ์ž์‹ ์ด ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ˆ˜ ์—†๋Š” ์„œ๋น„์Šค ์žฅ์•  ํ˜น์€ ๊ฑฐ๋ถ€ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์–‘ ํ˜น์€ ์†๋„๋กœ ์กฐ์ ˆํ•จ์œผ๋กœ์จ ์ž์‹ ์˜ ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ์„ ์œ ์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ”ํ•œ ์˜ˆ๋กœ ํฌํ„ธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ง€๋„ API, ๋ฒˆ์—ญ API ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์„œ๋กœ ์›ํ•˜๋Š” ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…์ ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋„ ๋˜‘๊ฐ™์ด ์ง€๋ถˆํ•œ ๋น„์šฉ๋งŒํผ ํ’ˆ์งˆ์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ RateLimit ๊ธฐ๋ฒ• ๋“ฑ์„ ํ†ตํ•ด ๋™์ผํ•œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ข€ ๋” ์ดํ•ด๊ฐ€ ์‰ฝ๊ฒŒ ๋˜๋„๋ก ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ HTTP API ํ˜ธ์ถœ์„ ๋‚ ๋ฆฌ๋ฉด Rate Limiter๊ฐ€ ์ด ์š”์ฒญ์„ ๋Œ€์‹  ๋ฐ›์•„ ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ ํ›„ ์ œํ•œ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด Rate Limiter๊ฐ€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ Rate Limit์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

 

Rate Limit์€ ๊ตฌํ˜„์„ ์œ„ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋งž๋Š” Rate Limit์„ ๊ตฌํ˜„ํ•˜์—ฌ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ผ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” Rate Limit ๊ตฌํ˜„์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Rate Limit ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ํ˜น์€ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  • nginx Rate Limit
  • Spring Cloud Rate Limit

 

๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์•„์ง ์„ ์ •ํ•˜์ง€ ๋ชปํ–ˆ๊ฑฐ๋‚˜ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์œ„์˜ 3๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. nginx์˜ Rate Limit ๊ธฐ๋Šฅ์€ ์šฐ๋ฆฌ๊ฐ€ Rate Limit์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ž๋‹จ์— ํ”„๋ก์‹œ๋ฅผ ๋‘๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํŠธ๋ž˜ํ”ฝ์„ ์กฐ์ ˆ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

https://www.nginx.com/blog/rate-limiting-nginx/

 

NGINX Rate Limiting

Protect your applications from excessive traffic, including DDoS attacks, by controlling the requests they receive with NGINX rate limiting.

www.nginx.com

์œ„ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด nginx์—์„œ Rate Limit์„ ์ด์šฉํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. limit_req_zone ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ IP ์ฃผ์†Œ๋ณ„๋กœ ํŠธ๋ž˜ํ”ฝ ํ˜ธ์ถœ๋Ÿ‰์„ ์กฐ์ ˆ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์ดˆ๋‹น ์ œํ•œ๋Ÿ‰์„ ์ง€์ •ํ•˜๋Š” ๋“ฑ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์‰ฝ๊ฒŒ ์š”์ฒญ ์ œํ•œ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์™ธ์—๋„ ์ˆœ๊ฐ„ ํŠธ๋ž˜ํ”ฝ(์งง์€ ์‹œ๊ฐ„ ๋‚ด ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ)์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ Handling Bursts ๊ธฐ๋Šฅ ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๋” ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์—์„œ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ nginx๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ง€์ •๋œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ•œ๊ณ„์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์‚ฌ์šฉํ•˜๋ ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ํ—ค๋” ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๊ฐ ์„œ๋น„์Šค์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ๋“ค์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ์œผ๋กœ ๋ถ„์‚ฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ ์ ˆํžˆ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ž˜ํ”ฝ ์–‘์„ ์œ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ์ปค์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ๋ณด๋‹ค๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ํ˜•ํƒœ์˜ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

https://spring.io/blog/2021/04/05/api-rate-limiting-with-spring-cloud-gateway

 

API Rate Limiting with Spring Cloud Gateway

One of the imperative architectural concerns is to protect APIs and service endpoints from harmful effects, such as denial of service, cascading failure. or overuse of resources. Rate limiting is a technique to control the rate by which an API or a service

spring.io

๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ Spring Cloud Gateway๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ์— ๋งž์ถฐ RateLimit ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ด๋“ค ๊ตฌํ˜„์ฒด์—๋Š” Redis๋ฅผ ์ด์šฉํ•œ Rate Limit ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Spring Webflux๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Spring Webflux๋กœ ๋˜์–ด ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— Rate Limit์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ข‹์€ ์„ ํƒ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Spring Cloud ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€๋Š” Spring Cloud Gateway๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์•ž๋‹จ์— ๋‘๊ณ , ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ง์ ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๊ตฌํ˜„ํ•˜์—ฌ ์ง์ ‘ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์•„ Filter ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

Spring Cloud Gateway๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์•ž๋‹จ์— ๋‘๊ฒŒ ๋œ๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” Spring Cloud Gateway ์ฃผ์†Œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋ฉฐ ์—ฌ๊ธฐ์„œ Rate Limit ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์„œ nginx์—์„œ ๊ฐ ์‚ฌ์šฉ์ž๋ณ„ ์„œ๋น„์Šค ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์„ ํ†ตํ•˜์—ฌ ์‚ฌ์šฉ์ž ์‹๋ณ„ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์‚ฌ์ „์— ์ €์žฅํ•ด๋‘์–ด Redis๋กœ๋Š” ํ˜„์žฌ ํŠธ๋ž˜ํ”ฝ ํ˜ธ์ถœ๋Ÿ‰์„ ์ œ์–ดํ•˜๊ณ , ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ• ๋‹นํ•œ ์ดˆ๊ธฐ ํŠธ๋ž˜ํ”ฝ ์กฐ์ ˆ๋Ÿ‰๊ณผ ์„ค์ •๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

mix

๋งŒ์•ฝ ์ด๋ฏธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Spring ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋ฉด ์ง์ ‘ Spring Cloud์˜ RateLimit ๊ตฌํ˜„์ฒด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Filter ๋‚ด์ง€ Interceptor ๋“ฑ์œผ๋กœ ์š”์ฒญ์„ ํ•œ ๋ฒˆ ๋ฐ›์€ ๋‹ค์Œ ํ˜„์žฌ ํŠธ๋ž˜ํ”ฝ ํ˜ธ์ถœ๋Ÿ‰ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ Throttling๊ณผ Rate Limit์„ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์ ‘ํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ์œผ๋กœ ๊ฐœ๋…์„ ์ ‘ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋‹น์žฅ Rate Limit์„ ํ˜„์—…์— ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋…น์ด๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 

 

๋งŒ์•ฝ Spring Cloud Gateway๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์„ ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง์ ‘ Rate Limit์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ Spring ์Šคํƒ์ด Spring Webflux ์Šคํƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ•ด๋‹น ๊ตฌํ˜„์ฒด๊ฐ€ Netty ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด Spring MVC์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Rate Limit์˜ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 
๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments