Rate Limiter - boostcampwm-2024/refactor-web36-QLAB GitHub Wiki

Rate Limiting์€ ์„œ๋ฒ„์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์ž์›์˜ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ, API Gateway, ์„œ๋ฒ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์œ„์น˜์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์‚ฌ๋ก€

๐Ÿ’ก์‚ฌ์šฉ์ž๋Š” ์ดˆ๋‹น 2ํšŒ ์ด์ƒ์˜ ์ƒˆ ๊ธ€์„ ์˜ฌ๋ฆด ์ˆ˜ ์—†๋‹ค

  ๊ฐ™์€ IP ์ฃผ์†Œ๋กœ๋Š” ํ•˜๋ฃจ์— 10๊ฐœ ์ด์ƒ์˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค

  ๊ฐ™์€ ๋””๋ฐ”์ด์Šค๋กœ๋Š” ์ฃผ๋‹น 5ํšŒ ์ด์ƒ ๋ฆฌ์›Œ๋“œ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์—†๋‹ค

Rate Limiting์˜ ์ฃผ์š” ๋ชฉ์ 

  1. DOS ๊ณต๊ฒฉ ๋ฐฉ์ง€
  • ์•…์˜์ ์ธ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„๋ฅผ ๋ณดํ˜ธ.
  1. API ๊ณผ๊ธˆ ์ ˆ์•ฝ
  • ์ œ3์ž(Third-party) API ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜์—ฌ ๋น„์šฉ ์ ˆ๊ฐ.
  1. ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€
  • ํŠธ๋ž˜ํ”ฝ ํญ์ฆ์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์ง€ ์•Š๋„๋ก ์˜ˆ๋ฐฉ.

๊ตฌํ˜„ ์œ„์น˜

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

์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ† ํฐ ๋ฒ„ํ‚ท(token buket)

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

์žฅ์ 

  • ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.
  • ์งง์€ ์‹œ๊ฐ„์•ˆ์— ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•ด ์ œํ•œ์ด ๊ฐ€๋Šฅํ•˜๋‹ค(๋ฒ„ํ‚ท์˜ ์ตœ๋Œ€ ํฌ๊ธฐ)

๋‹จ์ 

  • ์ ์ ˆํ•œ ๋ฒ„ํ‚ท์˜ ํฌ๊ธฐ์™€ ํ† ํฐ ์ƒ์„ฑ์†๋„๋ฅผ ํŠœ๋‹ํ•˜๊ธฐ ์–ด๋ ต๋‹ค

๋ˆ„์ถœ ๋ฒ„ํ‚ท(leaky buket)

  • ํ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌ์œจ์„ ์กฐ์ ˆํ•œ๋‹ค
  • ์š”์ฒญ์ด ์˜ค๋ฉด ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ์ผ์ • ์‹œ๊ฐ„๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค
  • ํ๊ฐ€ ๊ฐ€๋“์ฐฌ ๊ฒฝ์šฐ ์ƒˆ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฑฐ๋ถ€ํ•œ๋‹ค.

์žฅ์ 

  • ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ์œจ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์•ˆ์ •์ ์ด๋‹ค.

๋‹จ์ 

  • ์œ ์—ฐ์„ฑ์ด ๋ถ€์กฑํ•˜์—ฌ ๋‹จ ๊ธฐ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์ตœ์‹  ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์‘๋‹ตํ•  ์ˆ˜ ์—†๋‹ค.

๊ณ ์ • ์œˆ๋„์šฐ ์นด์šดํ„ฐ(fixed window counter)

  • ๊ณ ์ •๋œ ์œˆ๋„์šฐ(๊ฐ„๊ฒฉ)๋งˆ๋‹ค ์ตœ๋Œ€ ์š”์ฒญ์„ ์ง€์ •ํ•œ๋‹ค.
  • ์š”์ฒญ์ด ์˜ฌ๋•Œ ๋งˆ๋‹ค ํ•ด๋‹น ์œˆ๋„์šฐ์˜ ์นด์šดํ„ฐ๋ฅผ ์ฆ๊ฐ€ ์‹œํ‚จ๋‹ค.

์žฅ์ 

  • ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ์ง๊ด€์ ์ด๋‹ค.

๋‹จ์ 

  • ์œˆ๋„์šฐ ๊ฒฝ๊ณ„๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค๋“ค ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๊ฐ€ ์›ํ™œํ•˜์ง€ ๋ชปํ•˜๋‹ค
    • ์ดˆ๋‹จ์œ„๋กœ counter๋ฅผ 3๊ฐœ๋กœํ–ˆ์„๋•Œ 0.51์— 3๋ฒˆ 11.5์— 3๋ฒˆ ์š”์ฒญํ•  ๊ฒฝ์šฐ 1์ดˆ๊ฐ„๊ฒฉ์— 6๋ฒˆ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์•ผํ•œ๋‹ค.

์ด๋™ ์œˆ๋„์šฐ ๋กœ๊ทธ(sliding window log)

  • ๊ณ ์ • ์œˆ๋„์šฐ ์นด์šดํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„
  • ์š”์ฒญ ๋งˆ๋‹ค timestamp๋ฅผ ๋กœ๊น…ํ•œ๋‹ค
  • ๊ณ ์ •๋œ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์š”์ฒญ ๋ฐ›์€ ์‹œ์ ๊ธฐ์ค€ ๋งŒ๋ฃŒ๋œ ๋กœ๊น…์€ ์ œ๊ฑฐํ•œ๋‹ค.
  • ์œ ํšจํ•œ ๋กœ๊น…์˜ ๊ฐœ์ˆ˜๋ฅผ ํ†ตํ•ด ์ œํ•œํ•œ๋‹ค.
  • ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜์˜€์œผ๋ฉด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€๋Š” ์•Š๊ณ  ๋กœ๊น…์—” ์ €์žฅํ•œ๋‹ค.

์žฅ์ 

  • ์ •๊ตํ•˜๊ฒŒ ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค

๋‹จ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๋‹ค

์ด๋™ ์œˆ๋„์šฐ ์นด์šดํ„ฐ(sliding window counter)

  • ์š”์ฒญ์ด ์˜ฌ๋•Œ ํ•ด๋‹น ์œˆ๋„์šฐ์˜ ์นด์šดํ„ฐ๋ฅผ ์ฆ๊ฐ€ํ•œ๋‹ค
  • ์š”์ฒญ ๊ฑฐ์ ˆ์— ๋Œ€ํ•ด์„œ๋Š” ํ˜„์žฌ ์œˆ๋„์šฐ ์นด์šดํ„ฐ + ์ด์ „ ์œˆ๋„์šฐ ์นด์šดํ„ฐ*(๊ฐ„๊ฒฉ ๋น„์œจ) ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.
    • ๋งŒ์•ฝ ์œˆ๋„์šฐ ํฌ๊ธฐ๊ฐ€ 1์ดˆ์ด๊ณ  1.3์ดˆ์— ์š”์ฒญ์ด ์™”์„๋•Œ ์ „ ์œˆ๋„์šฐ๋Š” 70%๋งŒํผ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ ์ „ ์œˆ๋„์šฐ ์นด์šดํ„ฐ*0.7๋กœ ํ•œ๋‹ค

์žฅ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ด๋™ ์œˆ๋„์šฐ ๋กœ๊ทธ์— ๋น„ํ•ด ์ ์Œ

๋‹จ์ 

  • ๋น„์œจ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ๊ท ๋“ฑํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ ์ด๊ธฐ์— ์•ฝ๊ฐ„ ๋А์Šจํ•˜์ง€๋งŒ ํฌ์ง„ ์•Š๋‹ค.