System Design

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜์˜ ์„ค๊ณ„

์ฃผ๋ฐœ2 2025. 3. 10. 20:48
๋ฐ˜์‘ํ˜•

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=278536695

 

[์ „์ž์ฑ…] ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ

16๊ฐ€์ง€ ์‹ค์ œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฉด์ ‘ ๋ฌธ์ œ์™€ ์ƒ์„ธํ•œ ๋‹ต์•ˆ์„ ์ œ์‹œํ•œ๋‹ค. ์‹œ์Šคํ…œ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ ์ฃผ๋Š” 188๊ฐœ์˜ ๋„ํ•ด๋กœ ์„ค๋ช…ํ•˜๋ฉด์„œ 4๋‹จ๊ณ„ ์ ‘๊ทผ๋ฒ•์œผ๋กœ ๋ฉด์ ‘ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. ์ด ์ฑ…

www.aladin.co.kr

 

๊ฐœ์š”


๋„คํŠธ์›Œํฌ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜(Rate Limiter)๋Š” ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋น„์Šค๊ฐ€ ๋ณด๋‚ด๋Š” ํŠธ๋ž˜ํ”ฝ์˜ ์ฒ˜๋ฆฌ์œจ(rate)์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜๋‹ค. API ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ œํ•œ ์žฅ์น˜์— ์ •์˜๋œ ์ž„๊ณ„์น˜(threshold)๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ถ”๊ฐ€๋กœ ๋„๋‹ฌํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์€ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘๋‹จ(block)๋œ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ๋ก€๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” ์ดˆ๋‹น 2ํšŒ ์ด์ƒ ์ƒˆ ๊ธ€์„ ์˜ฌ๋ฆด ์ˆ˜ ์—†๋‹ค.
  • ๊ฐ™์€ IP ์ฃผ์†Œ๋กœ ํ•˜๋ฃจ์— 10๊ฐœ ์ด์ƒ์˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š”๋ฐ, API์— ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ ๋‘๋ฉด ์ข‹์€ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • DoS(Denial of Service) ๊ณต๊ฒฉ์— ์˜ํ•œ ์ž์› ๊ณ ๊ฐˆ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (์ถ”๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ œํ•œํ•˜์—ฌ ์„œ๋ฒ„ ๋น„์šฉ, ์šฐ์„ ์ˆœ์œ„ ๊ณ ๋ ค ๋“ฑ) ์•„์šธ๋Ÿฌ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋Š” third-party API์— ์‚ฌ์šฉ๋ฃŒ๋ฅผ ์ง€๋ถˆํ•˜๋Š” ํšŒ์‚ฌ๋“ค์—๊ฒŒ๋Š” ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ ์šฉ ํ™•์ธ, ๊ฑด๊ฐ• ์ƒํƒœ ํ™•์ธ ๋“ฑ์— ํ˜ธ์ถœํ•˜๋Š” API์— ๋Œ€ํ•œ ๊ณผ๊ธˆ์ด ํšŸ์ˆ˜์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, ๊ทธ ๋งŒํผ ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์˜ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
์‹ค์ œ ํŠธ์œ„ํ„ฐ๋Š” 3์‹œ๊ฐ„ ๋™์•ˆ 300๊ฐœ์˜ ํŠธ์œ—๋งŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๊ณ  ์žˆ๋‹ค.

๊ตฌ๊ธ€ ๋…์Šค API๋Š” ์‚ฌ์šฉ์ž๋‹น ๋ถ„๋‹น 300ํšŒ์˜ read ์š”์ฒญ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.

 

https://docs.x.com/x-api/fundamentals/rate-limits
https://docs.x.com/x-api/fundamentals/rate-limits

์ฑ…์˜ ๋‚ด์šฉ์€ ๊ณผ๊ฑฐ ๊ธฐ์ค€์ด๋‹ค๋ณด๋‹ˆ, ํ˜„์žฌ ํŠธ์œ„ํ„ฐ(X)์˜ Rate-Limiter์˜ ๊ธฐ์ค€์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (Basic Limit์ด 3์‹œ๊ฐ„์— 300๊ฑด)

Elon Musk์˜ 2023.07.02 ํŠธ์œ—
https://x.com/elonmusk/status/1675187969420828672

 

 

https://developers.google.com/docs/api/limits?hl=ko

๊ตฌ๊ธ€ Docs์˜ API๋Š” ์ฑ…์˜ ๋‚ด์šฉ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ฝ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ„๋‹น ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์€ 300์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐ


์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋Š” ์–ด๋””์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€?

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋Š” ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„, ๋ฏธ๋“ค์›จ์–ด(๊ฒŒ์ดํŠธ์›จ์ด)์— ๋‘๋Š” ๋ฐฉ์‹์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ ์‰ฝ๊ฒŒ ์œ„๋ณ€์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ๊ตฌํ˜„์„ ํ†ต์ œํ•˜๋Š” ๊ฒƒ๋„ ์–ด๋ ต๊ธฐ์— ํด๋ผ์ด์–ธํŠธ๋Š” ์„ ํƒ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์„œ๋ฒ„๋‚˜ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋  ํ…๋ฐ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ด์— ๋Œ€ํ•œ ์ •๋‹ต์€ ์—†๊ณ  ๊ฐ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Server vs MiddleWare

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

 

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

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

 

์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์‹คํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ๋ฐ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กฐํ•ฉ์„ ์ฐพ๋„๋ก ํ•˜์ž.

 

 

ํ† ํฐ ๋ฒ„ํ‚ท (token bucket) ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ํญ๋„“๊ฒŒ ์ด์šฉ๋˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ„๋‹จํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋†’์œผ๋ฉฐ, ์ธํ„ฐ๋„ท ๊ธฐ์—…๋“ค์ด ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘ ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ† ํฐ ๋ฒ„ํ‚ท์€ ์ง€์ •๋œ ์šฉ๋Ÿ‰์„ ๊ฐ–๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋ฒ„ํ‚ท์—๋Š” ์‚ฌ์ „์— ์„ค์ •๋œ ์–‘์˜ ํ† ํฐ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค. ํ† ํฐ์ด ๊ฝ‰ ์ฐฌ ๋ฒ„ํ‚ท์—๋Š” ๋” ์ด์ƒ์˜ ํ† ํฐ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ† ํฐ ๊ณต๊ธ‰๊ธฐ(refiller)๋Š” ๋ฒ„ํ‚ท์— ๋งค์ดˆ n๊ฐœ์˜ ํ† ํฐ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

๊ฐ ์š”์ฒญ์€ ์ฒ˜๋ฆฌ๋  ๋•Œ๋งˆ๋‹ค ํ† ํฐ์ด ์ถฉ๋ถ„ํ•œ์ง€ ๊ฒ€์ฆํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ถฉ๋ถ„ํ•œ ํ† ํฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ฒ„ํ‚ท์—์„œ ํ† ํฐ ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ธ ํ›„ ์š”์ฒญ์„ ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•œ๋‹ค.
  • ์ถฉ๋ถ„ํ•œ ํ† ํฐ์ด ์—†๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์š”์ฒญ์€ ๋ฒ„๋ ค์ง„๋‹ค.

 

ํ† ํฐ ๋ฒ„ํ‚ท์˜ ํฌ๊ธฐ = 4, ํ† ํฐ ๊ณต๊ธ‰๋ฅ  = ๋ถ„๋‹น 4

์œ„ ์ด๋ฏธ์ง€๋Š” ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•œ ํ† ํฐ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํ† ํฐ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฒ„ํ‚ท ํฌ๊ธฐ์™€ ํ† ํฐ ๊ณต๊ธ‰๋ฅ  ์ด 2๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • IP ์ฃผ์†Œ๋ณ„๋กœ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด IP ์ฃผ์†Œ๋งˆ๋‹ค ๋ฒ„ํ‚ท์„ ํ•˜๋‚˜์”ฉ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค.
  • ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ์œจ์„ ์ดˆ๋‹น 10,000๊ฐœ ์š”์ฒญ์œผ๋กœ ์ œํ•œํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๋ชจ๋“  ์š”์ฒญ์ด ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์„ ๊ณต์œ ํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

์žฅ์ 

  • ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.
  • ์งง์€ ์‹œ๊ฐ„์— ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฒ„ํ‚ท์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹จ์ 

  • 2๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(๋ฒ„ํ‚ท ํฌ๊ธฐ, ํ† ํฐ ๊ณต๊ธ‰๋ฅ )์˜ ๊ฐ’์„ ์ ์ ˆํ•˜๊ฒŒ ํŠœ๋‹ํ•˜๋Š” ๊ฒƒ์ด ๊นŒ๋‹ค๋กœ์šด ์ผ์ด ๋  ๊ฒƒ์ด๋‹ค.

 

๋ˆ„์ถœ ๋ฒ„ํ‚ท (leaky bucket) ์•Œ๊ณ ๋ฆฌ์ฆ˜

Shopfiy์˜ ๋ˆ„์ถœ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ตฌํ˜„
- https://shopify.dev/docs/api/admin-rest/usage/rate-limits

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

  • ์š”์ฒญ์ด ๋„์ฐฉํ•˜๋ฉด ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ ์žˆ๋Š”์ง€ ๋ณด๊ณ , ๋นˆ์ž๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ์— ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ์žˆ๋‹ค๋ฉด ์ƒˆ ์š”์ฒญ์€ ๋ฒ„๋ฆฐ๋‹ค.
  • ์ง€์ •๋œ ์‹œ๊ฐ„๋งˆ๋‹ค ํ์—์„œ ์š”์ฒญ์„ ๊บผ๋‚ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋ˆ„์ถœ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ ๋‘ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฒ„ํ‚ท ํฌ๊ธฐ: ํ ์‚ฌ์ด์ฆˆ์™€ ๊ฐ™์€ ๊ฐ’ (ํ์—๋Š” ์ฒ˜๋ฆฌ๋  ํ•ญ๋ชฉ๋“ค์„ ๊ด€๋ฆฌ)
  • ์ฒ˜๋ฆฌ์œจ(outflow rate): ์ง€์ •๋œ ์‹œ๊ฐ„๋‹น ๋ช‡ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ์ฒ˜๋ฆฌํ• ์ง€ ์ง€์ •ํ•˜๋Š” ๊ฐ’, ๋ณดํ†ต ์ดˆ ๋‹จ์œ„๋กœ ํ‘œํ˜„

์žฅ์ 

  • ํ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋‹ค.
  • ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ์œจ์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ์— ์•ˆ์ •์ ์ธ ์ถœ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜๋‹ค.

๋‹จ์ 

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

 

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

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

  • ํƒ€์ž„๋ผ์ธ์„ ๊ณ ์ •๋œ ๊ฐ„๊ฒฉ์˜ ์œˆ๋„๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์œˆ๋„๋งˆ๋‹ค ์นด์šดํ„ฐ๋ฅผ ๋ถ™์ธ๋‹ค.
  • ์š”์ฒญ์ด ์ ‘์ˆ˜๋  ๋•Œ๋งˆ๋‹ค ์นด์šดํ„ฐ์˜ ๊ฐ’์€ 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ์นด์šดํ„ฐ์˜ ๊ฐ’์ด ์‚ฌ์ „์— ์„ค์ •๋œ ์ž„๊ณ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ์š”์ฒญ์€ ์ƒˆ ์œˆ๋„๊ฐ€ ์—ด๋ฆด ๋•Œ๊นŒ์ง€ ๋ฒ„๋ ค์ง„๋‹ค.

์œ„ ์ด๋ฏธ์ง€์—์„œ ํƒ€์ž„๋ผ์ธ์˜ ์‹œ๊ฐ„ ๋‹จ์œ„๋Š” 1์ดˆ์ด๊ณ , ์‹œ์Šคํ…œ์€ ์ดˆ๋‹น 3๊ฐœ๊นŒ์ง€์˜ ์š”์ฒญ๋งŒ์„ ํ—ˆ์šฉํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋งค์ดˆ๋งˆ๋‹ค ์—ด๋ฆฌ๋Š” ์œˆ๋„์— 3๊ฐœ ์ด์ƒ์˜ ์š”์ฒญ์ด ์˜จ๋‹ค๋ฉด, ์ดˆ๊ณผ ์š”์ฒญ์€ ๋ฒ„๋ ค์ง€๊ฒŒ ๋œ๋‹ค.

 

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

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ถ„๋‹น ์ตœ๋Œ€ 5๊ฐœ์˜ ์š”์ฒญ๋งŒ์„ ํ—ˆ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์นด์šดํ„ฐ๋Š” ๋งค๋ถ„๋งˆ๋‹ค ์ดˆ๊ธฐํ™”๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด,,

  • 2:00 ~ 2:01 ์‚ฌ์ด์— 5๊ฐœ์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๊ณ ,
  • 2:01 ~ 2:02 ์‚ฌ์ด์— 5๊ฐœ์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค.
  • ํ•˜์ง€๋งŒ 2:00:30 ~ 2:01:30 ์œผ๋กœ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒจ์„œ ๋ณธ๋‹ค๋ฉด ์ฒ˜๋ฆฌํ•œ ์š”์ฒญ์€ ์ด 10๊ฐœ๋กœ, ํ—ˆ์šฉ ํ•œ๋„์˜ 2๋ฐฐ๊ฐ€ ๋œ๋‹ค.

์žฅ์ 

  • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์œˆ๋„๊ฐ€ ๋‹ซํžˆ๋Š” ์‹œ์ ์— ์นด์šดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์€ ํŠน์ • ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.

๋‹จ์ 

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

๊ณ ์ • ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ์ด๋™ ์œˆ๋„ ๋กœ๊น… ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ด๋™ ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

 

 

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

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๋ฉด ์š”์ฒญ์€ ๋จผ์ € ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๋ฏธ๋“ค์›จ์–ด์— ๋„๋‹ฌํ•œ๋‹ค.
  • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๋ฏธ๋“ค์›จ์–ด๋Š” ์ œํ•œ ๊ทœ์น™ ๋ฐ ์นด์šดํ„ฐ, ๋งˆ์ง€๋ง‰ ์š”์ฒญ์˜ ํƒ€์ž„์Šคํƒฌํ”„ ๋“ฑ์„ ์บ์‹œ(Redis)์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ฐ€์ ธ์˜จ ๊ฐ’๋“ค์— ๊ทผ๊ฑฐํ•˜์—ฌ ๋ฏธ๋“ค์›จ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฐ๋‹ค.
    • ํ•ด๋‹น ์š”์ฒญ์ด ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ API ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.
    • ํ•ด๋‹น ์š”์ฒญ์ด ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ๊ฑธ๋ฆฐ๋‹ค๋ฉด, 429: too many requests ์—๋Ÿฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๋Š”๋ฐ, ์ด ๋•Œ ์š”์ฒญ์€ ๊ทธ๋Œ€๋กœ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๊ณ (์˜ต์…˜1), ๋ฉ”์‹œ์ง€ ํ์— ๋ณด๊ด€(์˜ต์…˜2)ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ผ๊นŒ? ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์ธก ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
  • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์˜ ์ž„๊ณ„์น˜๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์งง์€ ์‹œ๊ฐ„์— ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์žฌ์‹œ๋„(Retry) ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์ถฉ๋ถ„ํ•œ ๋ฐฑ์˜คํ”„(back-off) ์‹œ๊ฐ„์„ ๋‘”๋‹ค.

 

๋ฐ˜์‘ํ˜•