Design Rate Limiter

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜(rate limiter)๋Š” ํŠน์ • ์‹œ๊ฐ„ ๋‹น ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์žฅ์น˜๋กœ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์œ ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • DoS(Denial of Service) ๊ณต๊ฒฉ์— ์˜ํ•œ ์ž์› ๊ณ ๊ฐˆ ๋ฐฉ์ง€

  • ๊ณผ๋„ํ•œ ์„œ๋“œ ํŒŒํ‹ฐ API ๊ณผ๊ธˆ ๋ฐฉ์ง€

  • ๋ด‡์ด๋‚˜ ์ž˜๋ชป๋œ ์ด์šฉ ํŒจํ„ด์œผ๋กœ ์ธํ•œ ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€

์š”๊ตฌ ์‚ฌํ•ญ

  • ์ฒ˜๋ฆฌ์œจ์„ ์ดˆ๊ณผํ•˜๋Š” ์š”์ฒญ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ œ์–ด

  • ๋‚ฎ์€ ์‘๋‹ต ์‹œ๊ฐ„ ๋ฐ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

  • ๋ถ„์‚ฐํ˜• ์ฒ˜๋ฆฌ์œจ ์ œํ•œ(๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘)

  • ์š”์ฒญ ์ œํ•œ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ

  • ๋†’์€ ๊ฒฐํ•จ ๊ฐ๋‚ด์„ฑ(์ œํ•œ ์žฅ์น˜์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ „์ฒด ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ)

์„ค๊ณ„์—๋Š” ์ •๋‹ต์ด ์กด์žฌํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ํ˜„์žฌ ๊ธฐ์ˆ  ์Šคํƒ / ์š”๊ตฌ ์‚ฌํ•ญ / ๋ชฉํ‘œ / ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜ ์œ„์น˜

  1. ํด๋ผ์ด์–ธํŠธ: ์‰ฝ๊ฒŒ ์œ„๋ณ€์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜์—ฌ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

  2. ์„œ๋ฒ„: ์„œ๋ฒ„ ์ธก์— ์ œํ•œ ์žฅ์น˜๋ฅผ ๋‘์–ด ์ฒ˜๋ฆฌ์œจ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹

  3. ๋ฏธ๋“ค์›จ์–ด: API ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ์š”์ฒญ์„ ํ†ต์ œํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€

  4. API ๊ฒŒ์ดํŠธ์›จ์ด: SSL ์ข…๋‹จ / ์‚ฌ์šฉ์ž ์ธ์ฆ / IP ํ—ˆ์šฉ ๋ชฉ๋ก ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์—ฌ๊ธฐ์— ์ถ”๊ฐ€

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋ฏธ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์žฅ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

1. ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ํญ ๋„“๊ฒŒ ์ด์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ„๋‹จํ•˜๊ณ  ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.(์•„๋งˆ์กด, ์ŠคํŠธ๋ผ์ดํ”„ ๋“ฑ)

  • ์ง€์ •๋œ ์šฉ๋Ÿ‰์„ ๊ฐ€์ง„ ํ† ํฐ ๋ฒ„ํ‚ท ์กด์žฌ

  • ์‚ฌ์ „ ์„ค์ •๋œ ์–‘์˜ ํ† ํฐ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฑ„์›Œ์ง

  • ๊ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ํ† ํฐ ์‚ฌ์šฉ(ํ† ํฐ์ด ์—†์œผ๋ฉด ์š”์ฒญ ์ฒ˜๋ฆฌ X)

  • ํ†ต์ƒ์ ์œผ๋กœ API ์—”๋“œํฌ์ธํŠธ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋ฒ„ํ‚ท์„ ๋‘์–ด ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์ ์šฉ

  • IP ์ฃผ์†Œ๋ณ„๋กœ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด IP ์ฃผ์†Œ๋ณ„๋กœ ๋ณ„๋„์˜ ๋ฒ„ํ‚ท์„ ๋‘ 

๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋ฉด์„œ ๋‹จ๊ธฐ๊ฐ„ ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•œ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋ฒ„ํ‚ท ํฌ๊ธฐ์™€ ํ† ํฐ ๊ณต๊ธ‰๋ฅ ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ํŠœ๋‹ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

2. ๋ˆ„์ถœ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์š”์ฒญ ์ฒ˜๋ฆฌ์œจ์ด ๊ณ ์ • ๋˜์–ด ์žˆ๋Š” ์ ์ด ๋‹ค๋ฅด๋ฉฐ, ๋ณดํ†ต FIFO ํ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ์š”์ฒญ์ด ๋„์ฐฉํ•˜๋ฉด ํ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š”์ง€ ํ™•์ธ

  • ๋นˆ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—” ํ์— ์š”์ฒญ์„ ์ถ”๊ฐ€(๋นˆ์ž๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์š”์ฒญ ์ฒ˜๋ฆฌ X)

  • ์ง€์ •๋œ ์‹œ๊ฐ„๋งˆ๋‹ค ํ์—์„œ ์š”์ฒญ์„ ๊บผ๋‚ด์–ด ์ฒ˜๋ฆฌ

ํ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๊ณ , ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ์œจ๋กœ ์•ˆ์ •์  ์ถœ๋ ฅ์— ์ ํ•ฉํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋‹จ๊ธฐ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ ํ์— ์š”์ฒญ์ด ์Œ“์—ฌ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ์š”์ฒญ์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฒ„ํ‚ท ํฌ๊ธฐ(ํ ์‚ฌ์ด์ฆˆ)์™€ ๋ˆ„์ถœ ์†๋„(์ฒ˜๋ฆฌ์œจ)๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ํŠœ๋‹ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

3. ๊ณ ์ • ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํƒ€์ž„๋ผ์ธ์„ ๊ณ ์ •๋œ ๊ฐ„๊ฒฉ์˜ ์œˆ๋„๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์œˆ๋„๋งˆ๋‹ค ์นด์šดํ„ฐ๋ฅผ ๋‘ 

  • ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์นด์šดํ„ฐ์˜ ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€

  • ํ•ด๋‹น ์นด์šดํ„ฐ์˜ ๊ฐ’์ด ์„ค์ •๋œ ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์š”์ฒญ ์ฒ˜๋ฆฌ X

  • ์ƒˆ ์œˆ๋„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์นด์šดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”

๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๊ณ , ์„ค๊ณ„ํ•˜๊ธฐ ์‰ฝ๊ณ , ํŠน์ •ํ•œ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์œˆ๋„ ๊ฒฝ๊ณ„ ๋ถ€๊ทผ์—์„œ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋Œ€ํ–ˆ๋˜ ์ฒ˜๋ฆฌ ํ•œ๋„๋ณด๋‹ค ๋งŽ์€ ์–‘์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

4. ์ด๋™ ์œˆ๋„ ๋กœ๊น… ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ณ ์ • ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ์œˆ๋„ ๊ฒฝ๊ณ„ ๋ถ€๊ทผ์—์„œ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ด๋™ ์œˆ๋„ ๋กœ๊น… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์š”์ฒญ์˜ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋กœ๊ทธ์— ์ถ”๊ฐ€(๋ณดํ†ต ๋ ˆ๋””์Šค์˜ Sorted Set ๊ฐ™์€ ์บ์‹œ์— ๋ณด๊ด€)

  • ์ƒˆ ์š”์ฒญ์ด ์˜ค๋ฉด ํ˜„์žฌ ์œˆ๋„์˜ ์‹œ์ž‘ ์ง€์ ๋ณด๋‹ค ์˜ค๋ž˜๋œ ํƒ€์ž„์Šคํƒฌํ”„ ์ œ๊ฑฐ(ex. ์‹œ๊ฐ„ ๋‹จ์œ„ 1๋ถ„ / ์ƒˆ ์š”์ฒญ ์‹œ๊ฐ 1:01:40 ์ธ ๊ฒฝ์šฐ 1:00:40 ์ด์ „ ๋กœ๊ทธ ์ œ๊ฑฐ)

  • ๋กœ๊ทธ์˜ ํฌ๊ธฐ๊ฐ€ ์„ค์ •๋œ ์ˆ˜์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์š”์ฒญ ์ฒ˜๋ฆฌ X(์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์ง€๋งŒ ๋กœ๊ทธ์—๋Š” ์ถ”๊ฐ€)

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

5. ์ด๋™ ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ณ ์ • ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ด๋™ ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์œผ๋กœ, ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ˜„์žฌ ์œˆ๋„ ์š”์ฒญ ์ˆ˜ + ์ง์ „ ์œˆ๋„์šฐ ์š”์ฒญ ์ˆ˜ * ์ด๋™ ์œˆ๋„์™€ ์ง์ „ ์œˆ๋„์šฐ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์˜ ๋น„์œจ

  • ex. ํ˜„์žฌ ์œˆ๋„ ์š”์ฒญ ์ˆ˜ 50 / ์ง์ „ ์œˆ๋„ ์š”์ฒญ ์ˆ˜ 150 / ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ๋น„์œจ 50% -> 50 + 150 * 0.5 = 125

์ด์ „ ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ˜„์žฌ ์œˆ๋„ ์ƒํƒœ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ๋‹จ๊ธฐ๊ฐ„ ์ง‘์ค‘ ํŠธ๋ž˜ํ”ฝ๋„ ์ž˜ ๋Œ€์‘ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ง์ „ ์œˆ๋„ ์š”์ฒญ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์ƒํƒœ์™€ ๋งž์ง€ ์•Š๊ฒŒ ํ—ˆ์šฉ๋˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๋˜๋Š” ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.(ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด์—์„œ ์‹คํ—˜์— ๋”ฐ๋ฅด๋ฉด 0.003%)

์นด์šดํ„ฐ ๋ณด๊ด€ ์žฅ์†Œ

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

  • INCR: ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์นด์šดํ„ฐ ๊ฐ’์„ 1๋งŒํผ ์ฆ๊ฐ€

  • EXPIRE: ์นด์šดํ„ฐ์— ํƒ€์ž„์•„์›ƒ ๊ฐ’ ์„ค์ •

์ƒ์„ธ ์„ค๊ณ„

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ทœ์น™

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ทœ์น™์€ ๋ณดํ†ต ์„ค์ • ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋””์Šคํฌ์— ๋ณด๊ด€ ๋˜์–ด, ์บ์‹œ์— ๋กœ๋“œ๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” ๋งˆ์ผ€ํŒ… ์„ธ๋ฏธ์ง€์˜ ์ตœ๋Œ€์น˜๋ฅผ 5๋กœ ์„ค์ •ํ•œ ๊ทœ์น™์ด๋‹ค.

domain: messaging
descriptors:
  - key: message_type
    Value: marketing
    rate_limit:
      unit: day
      requests_per_unit: 5

ํ•œ๋„ ์ดˆ๊ณผ๋œ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

ํ•œ๋„ ์ œํ•œ์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋ฉด API๋Š” ๋ณดํ†ต HTTP 429 Too Many Requests ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ HTTP ํ—ค๋”์— ํ•œ๋„ ์ œํ•œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • X-RateLimit-Limit: ๋งค ์œˆ๋„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์˜ ์ˆ˜

  • X-RateLimit-Remaining: ์œˆ๋„ ๋‚ด์— ๋‚จ์€ ์š”์ฒญ์˜ ์ˆ˜

  • X-RateLimit-Retry-After: ๋‹ค์Œ ์š”์ฒญ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„(์ดˆ)

์ฒ˜๋ฆฌ๊ฐ€ ์ œํ•œ๋œ ์š”์ฒญ์€ ์ •์ฑ…์— ๋”ฐ๋ผ์„œ๋Š” ์š”์ฒญ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜, ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ์— ๋ณด๊ด€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์š”์ฒญ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค

  1. ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์š”์ฒญ์€ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๋ฏธ๋“ค์›จ์–ด์— ๋„์ฐฉ

  2. ์บ์‹œ๋œ ๊ทœ์น™๊ณผ ์นด์šดํ„ฐ ๋ฐ ๋งˆ์ง€๋ง‰ ์š”์ฒญ์˜ ํƒ€์ž„์Šคํƒฌํ”„ ์กฐํšŒ

  3. ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ

    • ์ œํ•œ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ: API ์„œ๋ฒ„๋กœ ์š”์ฒญ ์ „๋‹ฌ

    • ์ œํ•œ์— ๊ฑธ๋ฆฐ ๊ฒฝ์šฐ: ํด๋ผ์ด์–ธํŠธ์— ์—๋Ÿฌ ์‘๋‹ต(429 Too Many Requests), ๋ฒ„๋ ค์ง„ ์š”์ฒญ์€ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€ ํ์— ๋ณด๊ด€

๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ

๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์„œ๋ฒ„์™€ ๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

  1. ๊ฒฝ์Ÿ์กฐ๊ฑด

    • ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ๋™์ผํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ ํ˜น์€ ๋ ˆ๋””์Šค ์ •๋ ฌ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ

  2. ๋™๊ธฐํ™”

    • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€ ๋‘๊ฒŒ ๋์„ ๋•Œ, ๊ฐ ์ œํ•œ ์žฅ์น˜์˜ ์นด์šดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๊ณ ์ • ์„ธ์…˜์„ ํ™œ์šฉํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ์ œํ•œ ์žฅ์น˜๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ ˆ๋””์Šค ๊ฐ™์€ ์ค‘์•™ ์ง‘์ค‘ํ˜• ์ €์žฅ์†Œ ์‚ฌ์šฉ

์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

  • ๋‹ค์–‘ํ•œ ๊ณ„์ธต์—์„œ์˜ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์ธ Iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IP ์ฃผ์†Œ์— ์ฒ˜๋ฆฌ์œจ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ฒ˜๋ฆฌ

    • ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด API ํ˜ธ์ถœ ํšŸ์ˆ˜ ๊ฐ์†Œ

    • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์˜ ์ž„๊ณ„์น˜๋ฅผ ๊ณ ๋ คํ•ด, ๋‹จ๊ธฐ๊ฐ„ ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ œํ•œ

    • ์žฌ์‹œ๋„ ๋กœ์ง์—์„œ ์ถฉ๋ถ„ํ•œ ๋ฐฑ์˜คํ”„ ์‹œ๊ฐ„์„ ๋‘ 

์ฐธ๊ณ ์ž๋ฃŒ

Last updated