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

2026. 6. 20. 22:14ยท๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ

ํด๋ผ์ด์–ธํŠธ/์„œ๋น„์Šค๊ฐ€ ๋ณด๋‚ด๋Š” ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ์œจ(rate)๋ฅผ ์ œ์–ดํ•˜๋Š” ์žฅ์น˜.

HTTP ์ด ์žฅ์น˜๊ฐ€ ํŠน์ • ๊ธฐ๊ฐ„ ๋‚ด์— ์ „์†กํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค. api ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ž„๊ณ„์น˜๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ถ”๊ฐ€๋กœ ๋„๋‹ฌํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์€ ๋ง‰ํžŒ๋‹ค. 

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

 

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

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋Š” ์ถ”๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ค‘๋‹จํ•จ์œผ๋กœ์จ DoS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. 

 

์ œ3์ž(thrid-party) API์— ์‚ฌ์šฉ๋ฃŒ๋ฅผ ์ง€๋ถˆํ•˜๋Š” ํšŒ์‚ฌ๋“ค์—๊ฒŒ๋Š” ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค. 

์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๋ง‰๋Š”๋‹ค. ์ž˜๋ชป๋œ ์ด์šฉ ํŒจํ„ด์œผ๋กœ ์œ ๋ฐœ๋œ ํŠธ๋ž˜ํ”ฝ์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์— ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ ํ™œ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

ALPHA-HELIX ๋Š”  third-party๋ฅผ ์‚ฌ์šฉ, ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•ด์•ผํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. 

 

1๋‹จ๊ณ„ : ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์š”๊ตฌ์‚ฌํ•ญ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • 

- ์„ค์ •๋œ ์ฒ˜๋ฆฌ์œจ์„ ์ดˆ๊ณผํ•˜๋Š” ์š”์ฒญ์€ ์ •ํ™•ํžˆ ์ œํ•œํ•œ๋‹ค.

- ๋‚ฎ์€ ์‘๋‹ต์‹œ๊ฐ„: ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์žฅ์น˜๋Š” http ์‘๋‹ต์‹œ๊ฐ„์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. 

- ๊ฐ€๋Šฅํ•œ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

- ๋ถ„์‚ฐํ˜• ์ฒ˜๋ฆฌ์œจ ์ œํ•œ: ํ•˜๋‚˜์˜ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ, ์—ฌ๋Ÿฌ ์„œ๋ฒ„/ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณต์œ ํ•œ๋‹ค.

- ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ์š”์ฒญ์ด ์ œํ•œ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์‹ค์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ„๋ช…ํžˆ ๋ณด์—ฌ์ค€๋‹ค.

- ๋†’์€ ๊ฒฐํ•จ ๊ฐ๋‚ด์„ฑ(fault tolerance) : ์ œํ•œ ์žฅ์น˜์— ์žฅ์• ๊ฐ€ ์ƒ๊ฒจ๋„ ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ ์ฃผ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค 

 

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

ํด๋ผ์ด์–ธํŠธ or ์„œ๋ฒ„ ์ธก์—๋„ ์ด ์žฅ์น˜๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก์€ ํ†ต์ œ๊ฐ€ ์–ด๋ ค์šฐ๋‹ˆ ๋‘์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ฒ„์— ๋‘”๋‹ค๋ฉด, ์™„์ „ํžˆ ์„œ๋ฒ„์ธก์— ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ ๋‘๊ฑฐ๋‚˜

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋ฅผ API์„œ๋ฒ„์— ๋‘๋Š” ๋Œ€์‹ ์—, ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด์„œ, ํ•ด๋‹น ๋ฏธ๋“ค ์›จ์–ด๋กœ API ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ์š”์ฒญ์„ ํ†ต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋งŒ์•ฝ์— ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์ด ์งง์€ ์‹œ๊ฐ„๋‚ด์— API ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด๋˜๋ฉด, HTTP ์ƒํƒœ์ฝ”๋“œ 429๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๊ณ  ํ–ˆ๋‹ค(Too many requests)๋ฅผ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. 

 

์ผ๋‹จ API ๊ฒŒ์ดํŠธ ์›จ์ด=์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์ง€์›ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด ๋ผ๋Š”๊ฑธ ๊ธฐ์–ตํ•˜์ž. 

1. ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๋Š” ์–ด๋””์— ๋‘์–ด์•ผํ•˜๋‚˜? 

2. ์„œ๋ฒ„? ๊ฒŒ์ดํŠธ์›จ์ด? 

์ƒ์šฉ API ๊ฒŒ์ดํŠธ ์›จ์ด๋ฅผ ์“ฐ๋Š”๊ฒŒ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค. 

 

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

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

ํญ๋„“๊ฒŒ ์ด์šฉ๋œ๋‹ค. ์•„๋งˆ์กด ์ŠคํŠธ๋ผ์ดํ”„๊ฐ€ api ์š”์ฒญ์„ ํ†ต์ œ(throttle) ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ด๋‹ค. 

 

ํ† ํฐ ๋ฒ„ํ‚ท์€ ์ง€์ •๋œ ์šฉ๋Ÿ‰์„ ๊ฐ–๋Š” ๊ทธ๋ฆ‡์ด๋‹ค. ์ด ๋ฒ„ํ‚ท์—๋Š” ์‚ฌ์ „ ์„ค์ •๋œ ์–‘์˜ ํ† ํฐ์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค. 

๊ฝ‰์ฐฌ ๋ฒ„ํ‚ท์—๋Š” ๋”์ด์ƒ ํ† ํฐ์€ ์ถ”๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฒ„ํ‚ท์ด ๊ฐ€๋“ ์ฐจ๋ฉด ์ถ”๊ฐ€๋กœ ๊ณต๊ธ‰๋œ ํ† ํฐ์€ ๋ฒ„๋ ค์ง„๋‹ค(overflow) 

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

- ์ถฉ๋ถ„ํ•œ ํ† ํฐ์ด ์žˆ๋‚˜?  ๋ฒ„ํ‚ท์—์„œ ํ•˜๋‚˜ ํ† ํฐ์„ ๊บผ๋‚ด์„œ ์š”์ฒญ์„ ์‹œ์Šคํ…œ์— ์ „๋‹ฌ

- ์ถฉ๋ถ„ํ•œ ํ† ํฐ์ด ์—†๋‚˜? ํ•ด๋‹น ์š”์ฒญ์„ ๋ฒ„๋ฆฐ๋‹ค. (dropped) 

 

 

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

1. ๋ฒ„ํ‚ท์˜ ํฌ๊ธฐ : ๋ฒ„ํ‚ท์— ๋‹ด๊ธฐ๋Š” ์ตœ๋Œ€ ํ† ํฐ ์ˆ˜

2. ํ† ํฐ ๊ณต๊ธ‰๋ฅ (refill rate) : ์ดˆ๋‹น ๋ช‡๊ฐœ์˜ ํ† ํฐ์„ ์ฑ„์šฐ๋Š”๊ฐ€? 

 

ํ†ต์ƒ์ ์œผ๋กœ api endpoint ๋งˆ๋‹ค ๋ณ„๋„ ๋ฒ„ํ‚ท์„ ๋‘”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, user๋Š” ํ•˜๋ฃจ์— ํ•œ๋ฒˆ ํฌ์ŠคํŒ…๋˜๊ณ , ์นœ๊ตฌ๋Š” 150๋ช… ์ถ”๊ฐ€๊นŒ์ง€๋งŒ ๋˜๊ณ , ์ข‹์•„์š”๋Š” ํ•˜๋ฃจ์— 5๋ฒˆ๋งŒ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋ฉด, user ๋งˆ๋‹ค 3๊ฐœ์˜ ํ† ํฐ ๋ฒ„ํ‚ท์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

 

IP ์ฃผ์†Œ๋ณ„๋กœ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์ ์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด, IP์ฃผ์†Œ๋งˆ๋‹ค ๋ฒ„ํ‚ท์„ ํ• ๋‹นํ•ด์•ผํ•œ๋‹ค.

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

 

- ๊ตฌํ˜„์ด ์‰ฝ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋„ ํšจ์œจ์ ์ด๋‹ค. 

- ์งง์€ ์‹œ๊ฐ„ ์ง‘์ค‘๋˜๋Š” ํŠธ๋ž˜ํ”ฝ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. 

- 2๊ฐœ์˜ ์ธ์ž๋งŒ์œผ๋กœ, ์ ์ ˆํ•œ ํŠœ๋‹์€ ๊ฐ€๋‹ค๋กญ๋‹ค. 

 

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

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

1. ์š”์ฒญ์ด ๋„์ฐฉํ•˜๋ฉด Queue๊ฐ€ ๊ฐ€๋“์ฐจ์žˆ๋‚˜ ํ™•์ธํ•œ๋‹ค. ๋นˆ์ž๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด ํ์— ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

2. ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ์žˆ์œผ๋ฉด ์ƒˆ ์š”์ฒญ์€ ๋ฒ„๋ฆฐ๋‹ค.

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

 

๋ˆ„์ถœ ๋ฒ„ํ‚ท ์•Œ๊ณ ๋ฆฌ์ฆ˜์€  2๊ฐœ์˜ parameter๋ฅผ ๋ฐ›๋Š”๋‹ค.

- ๋ฒ„ํ‚ท ํฌ๊ธฐ : ํ ์‚ฌ์ด์ฆˆ

- ์ฒ˜๋ฆฌ์œจ(outflow rate) : ์ง€์ •๋œ ์‹œ๊ฐ„๋งˆ๋‹ค ๋ช‡๊ฐœ์˜ ์š”์ฒญ์„ ์ง€์ •ํ•œ๋‹ค. ๋ณดํ†ต ์ดˆ ๋‹จ์œ„์ด๋‹ค. 

 

ํ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ธก๋ฉด์ด ํšจ์œจ์ ์ด๋‹ค. ๊ณ ์ •๋œ ์ฒ˜๋ฆฌ์œจ(outflow rate)์„ ๊ฐ–๊ณ  ์žˆ์Œ์œผ๋กœ stable ์ถœ๋ ฅ์— ์ ํ•ฉํ•˜๋‹ค. ๋‹จ์‹œ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋ฉด, ์ตœ์‹ ์š”์ฒญ๋“ค์ด ๋ฒ„๋ ค์ง€๊ณ , ์˜ค๋ž˜๋œ ์š”์ฒญ๋“ค์ด ์Œ“์ด๊ฒŒ๋œ๋‹ค. 2๊ฐœ ์ธ์ž๋กœ ์˜ฌ๋ฐ”๋ฅธ ํŠœ๋‹์ด ๊นŒ๋‹ค๋กญ๋‹ค. 

 

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

 

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

์š”์ฒญ์ด ์ ‘์ˆ˜๋˜๋ฉด ์นด์šดํ„ฐ ๊ฐ’์€ 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. 

์นด์šดํ„ฐ ๊ฐ’์ด ์‚ฌ์ „์— ์„ค์น˜๋œ ์ž„๊ณ„์น˜ ๋„๋‹ฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ์š”์ฒญ์€ ์ƒˆ ์œˆ๋„๊ฐ€ ์—ด๋ฆด๋•Œ ๊นŒ์ง€ ๋ฒ„๋ ค์ง„๋‹ค. 

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

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

 

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

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

 

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

 

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

์ด ์ฒ˜๋ฆฌ์œจ ์ œํ•œ๊ธฐ๋Š” ๋ถ„๋‹น ์ตœ๋Œ€ 2๋ฒˆ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ณดํ†ต ๋กœ๊ทธ์— ๋ณด๊ด€๋˜๋Š” ๊ฐ’์€ ๋ฆฌ๋ˆ…์Šค ํƒ€์ž„ ์Šคํƒฌํ”„์ด๋‹ค. 

์ƒˆ๋กœ์šด ์š”์ฒญ์ด 1:00:30 ์— ๋„์ฐฉํ•˜๋ฉด, ํ•ด๋‹น ํƒ€์ž„์Šคํƒฌํ”„ ๋กœ๊ทธ์— ์ถ”๊ฐ€๋œ๋‹ค.

์ถ”๊ฐ€ ์งํ›„ ๋กœ๊ทธ ํฌ๊ธฐ๋Š” 2๋ฉฐ, ํ—ˆ์šฉ ํ•œ๋„๋ณด๋‹ค ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์€ ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•œ๋‹ค.

์ƒˆ๋กœ์šด ์š”์ฒญ์ด 1:00:50์— ๋„์ฐฉํ•œ๋‹ค. ํ•ด๋‹น ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๋กœ๊ทธ์— ์ถ”๊ฐ€๋œ๋‹ค.

๋กœ๊ทธ ํฌ๊ธฐ๊ฐ€ 3์ด๋ฏ€๋กœ, ํƒ€์ž„์Šคํƒฌํ”„๋Š” ๋กœ๊ทธ์— ๋‚จ์ง€๋งŒ ์š”์ฒญ์€ ๊ฑฐ๋ถ€๋œ๋‹ค. 

1๋ถ„ ์•ˆ์— ์žˆ๋Š” ์œˆ๋„์šฐ ์ดํ›„์—, ์ด์ „์— ๋งŒ๋ฃŒ๋œ ๋‘๊ฐœ์˜ ํƒ€์ž„์Šคํƒฌํ”„๋Š” ๋กœ๊ทธ์—์„œ ์‚ญ์ œํ•œ๋‹ค. ์ดํ›„ 1:01:40 ์˜ ์‹ ๊ทœ์š”์ฒญ๊นŒ์ง€ ์‹œ์Šคํ…œ์— ์ „๋‹ฌ๋œ๋‹ค. 

 

 

์ด๋™ ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (sliding window counter) 

 

๊ณ ์ • ์œˆ๋„ ์นด์šดํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ์ด๋™ ์œˆ๋„ ๋กœ๊น… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•ฉํ•œ ๊ฒƒ์ด๋‹ค. 

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜์˜ ํ•œ๋„๊ฐ€ ๋ถ„๋‹น 7๊ฐœ ๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค. ์ด์ „ 1๋ถ„๋™์•ˆ 5๊ฐœ ์š”์ฒญ, ํ˜„์žฌ 1๋ถ„ ๋™์•ˆ 3๊ฐœ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค๊ณ  ์น˜์ž, 

ํ˜„์žฌ 1๋ถ„์˜ 30% ์‹œ์ ์— ๋„์ฐฉํ•œ ์ƒˆ ์š”์ฒญ์€, ํ˜„์žฌ ์œˆ๋„์— ๋ช‡๊ฐœ ์š”์ฒญ์ด ์˜จ๊ฒƒ์œผ๋กœ ๋ณด๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋‚˜? 

 

 

๊ฐœ๋žต์ ์ธ ์•„ํ‚คํ…์ฒ˜ 

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š”, ๊ฒฐ๊ตญ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์ด ์ ‘์ˆ˜๋˜์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ์นด์šดํ„ฐ๋ฅผ ์ถ”์  ๋Œ€์ƒ๋ณ„๋กœ ๋‘๊ณ  

(User๋ณ„? IP๋ณ„? API ์—”๋“œํฌ์ธํŠธ๋ณ„? ์ด ์„œ๋น„์Šค ๋‹จ์œ„๋กœ?),  ์นด์šดํ„ฐ ๊ฐ’์ด ํ—ˆ์šฉ ํ•œ๋„๋ฅผ ๋„˜์–ด์„œ๋ฉด, ๋„˜์–ด์„  ์š”์ฒญ์€ ๊ฑฐ๋ถ€ํ•˜๋Š”๊ฑฐ๋‹ค. 

 

์นด์šดํ„ฐ ๊ฐ’์˜ ๋ณด๊ด€์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์บ์‹œ๊ฐ€ ๋ฐ”๋žŒ์งํ•˜๋‹ค. ๋น ๋ฅด๊ณ , ์‹œ๊ฐ„์— ๊ธฐ๋ฐ˜ํ•œ ๋งŒ๋ฃŒ ์ •์ฑ…์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

Redis[11] ๋Š” ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜ ๊ตฌํ˜„์‹œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ €์žฅ ์žฅ์น˜๋‹ค. 

- INCR:  ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์นด์šดํ„ฐ ๊ฐ’์„ 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

- EXPIRE: ์นด์šดํ„ฐ์— ํƒ€์ž„์•„์›ƒ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. ์„ค์ •๋œ ์‹œ๊ฐ„์ด์ง€๋‚˜๋ฉด ์นด์šดํ„ฐ๋Š” ์ž๋™ ์‚ญ์ œ๋œ๋‹ค. 

 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ Rate Limiting Middleware์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

๋ฏธ๋“ค์›จ์–ด๋Š”๋ ˆ๋””์Šค ์ง€์ •๋ฒ„ํ‚ท์—์„œ ์นด์šดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ•œ๋„์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ธฐ๋ฐ˜ ์ฒดํ‚นํ•œ๋‹ค. 

ํ•œ๋„ ์ดํ•˜๋ฉด ์š”์ฒญ์„ api์„œ๋ฒ„์— ์ „๋‹ฌํ•œ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋Š” ์นด์šดํ„ฐ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋‹ค์‹œ ๋ ˆ๋””์Šค์— ์ €์žฅํ•œ๋‹ค. 

 

3๋‹จ๊ณ„ : ์ƒ์„ธ ์„ค๊ณ„

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

๋ฆฌํ”„ํŠธ(Lyft)๋Š” ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ์˜คํ”ˆ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. [12]

์ด๋Ÿฐ ๊ทœ์น™๋“ค์€ ๋ณดํ†ต ์„ค์ •ํŒŒ์ผ(Configuration file)ํ˜•ํƒœ๋กœ ๋””์Šคํฌ์— ์ €์žฅ๋œ๋‹ค. 

 

์ฒ˜๋ฆฌ์œจ ํ•œ๋„ ์ดˆ๊ณผ ํŠธ๋ž˜ํ”ฝ์˜ ์ฒ˜๋ฆฌ

์š”์ฒญ์ด ํ•œ๋„ ์ œํ•œ์— ๊ฑธ๋ฆฌ๋ฉด API ๋Š” HTTP์‘๋‹ต 429๋ฅผ ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ๋ณด๋‚ธ๋‹ค. 

 

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” HTTPํ—ค๋”

์‚ฌ์šฉ์ž๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ 429 too many request ์˜ค๋ฅ˜๋ฅผ X-Ratelimit-Retry-After ํ—ค๋”์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๋„๋กํ•œ๋‹ค. 

- X-Ratelimit-Remaining: ์œˆ๋„ ๋‚ด์— ๋‚จ์€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ์š”์ฒญ์˜ ์ˆ˜

- X-Ratelimit-Limit : ๋งค ์œˆ๋„๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์˜ ์ˆ˜

- X-Ratelimit-Retry-After : ํ•œ๋„ ์ œํ•œ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋ ค๋ฉด ๋ช‡ ์ดˆ ๋’ค์— ์š”์ฒญ์„ ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ฆผ 

 

์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ทœ์น™์€ ๋””์Šคํฌ์— ๋ณด๊ด€ํ•œ๋‹ค.

์ž‘์—… ํ”„๋กœ์„ธ์Šค(worker)๋Š” ์ˆ˜์‹œ๋กœ ๊ทœ์น™์„ ๋””์Šคํฌ์— ์ฝ์–ด์„œ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค. 

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

์ œํ•œ ๊ทœ์น™์„ ์บ์‹œ์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. ์นด์šดํ„ฐ ๋ฐ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ ˆ๋””์Šค ์บ์‹œ์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค. 

๊ฐ€์ ธ์˜จ ๊ฐ’๋“ค์— ๊ทผ๊ฑฐํ•ด์„œ ํ•ด๋‹น ๋ฏธ๋“ค์›จ์–ด๋Š” ์•„๋ž˜ ๊ฒฐ์ •์„ ํ•œ๋‹ค. 

- ์ œํ•œ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋ฉด api ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. - ์ œํ•œ์— ๊ฑธ๋ฆฌ๋ฉด, 429 ์—๋Ÿฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

- ์š”์ฒญ์€ ๊ทธ๋Œ€๋กœ ๋ฒ„๋ฆด์ˆ˜๋„ ์žˆ๊ณ , ๋ฉ”์„ธ์ง€ ํ์— ๋ณด๊ด€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (option 1,2)

 

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

๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜๋Š” ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์žฅ์น˜ ๊ตฌํ˜„์€ ์‰ฝ๋‹ค. 

์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„์™€ ๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•˜๋Š”๊ฑด 2๊ฐœ ๋ฌธ์ œ๋ฅผ ๋” ํ’€์–ด์•ผํ•œ๋‹ค.

1. ๊ฒฝ์Ÿ ์กฐ๊ฑด(race condition) 

- ๋ ˆ๋””์Šค์—์„œ ์นด์šดํ„ฐ ๊ฐ’์„ ์ฝ๋Š”๋‹ค 

- ์นด์šดํ„ฐ๊ฐ€ ์ž„๊ณ„์น˜๋ฅผ ๋„˜๋Š”์ง€ ๋ณธ๋‹ค.

- ์•ˆ๋„˜์œผ๋ฉด, ๋ ˆ๋””์Šค์— ๋ณด๊ด€๋œ ์นด์šดํ„ฐ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ๋ณ‘ํ–‰์„ฑ์ด ์‹ฌํ•˜๋ฉด, ์•„๋ž˜์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ฐ€์žฅ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ํ•ด๊ฒฐ์€ ๋ฝ(lock)์ด์ง€๋งŒ, ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ๋งค์šฐ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ(Lua Script [13]), ์ •๋ ฌ ์ง‘ํ•ฉ(sorted set) ์ด๋ผ๋Š” ๋ ˆ๋””์Šค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ ์ด๋‹ค.[8]

 

2. ๋™๊ธฐํ™”(synchronization)

์›น ๊ณ„์ธต์€ ๋ฌด์ƒํƒœ(stateless)์ด๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ๋Š” ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ œํ•œ์žฅ์น˜๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋•Œ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์žฅ์น˜1์€ ํด๋ผ์ด์–ธํŠธ2์— ๋Œ€ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋ฉด, ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค. 

๊ณ ์ • ์„ธ์…˜(sticky session)์„ ํ™œ์šฉํ•ด์„œ, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ํ•ญ์ƒ ๊ฐ™์€ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์žฅ์น˜๋กœ ๋ณด๋‚ด๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 

์œ ์—ฐํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋กœ ์ถ”์ฒœ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๋” ๊ฐœ์„ ๋œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”, ๋ ˆ๋””์Šค์™€ ๊ฐ™์€ ์ค‘์•™ ์ง‘์ค‘ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.

 

์„ฑ๋Šฅ ์ตœ์ ํ™”

๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•˜๋ ค๋‹ค ๋ณด๋ฉด ์ง€์—ฐ์‹œ๊ฐ„์ด์ฆ๊ฐ€ ํ•  ์ˆ˜๋ฐ–์— ์—†๋‹ค. 

๋Œ€๋ถ€๋ถ„์˜ ํด๋ผ์šฐ๋“œ ์‚ฌ์—…์ž๋Š” ์„ธ๊ณ„ ๊ณณ๊ณณ์— edge server๋ฅผ ์‹ฌ๋Š”๋‹ค. 

๋‘๋ฒˆ์งธ๋กœ ์ œํ•œ ์žฅ์น˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ ์ตœ์ข… ์ผ๊ด€์„ฑ(eventual consistency model)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (6์žฅ ๋ฐ์ดํ„ฐ์ผ๊ด€์„ฑ)

 

๋ชจ๋‹ˆํ„ฐ๋ง

ํšจ๊ณผ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด๊ธฐ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

- ์ฑ„ํƒํ•œ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํšจ๊ณผ์ ์ธ๊ฐ€?

- ์ •์˜ํ•œ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ทœ์น™์ด ํšจ๊ณผ์ ์ธ๊ฐ€?

 

ex) ๊นœ์ง ์„ธ์ผ ์ด๋ฒคํŠธ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๊ธ‰์ฆํ•˜๋Š” ๊ธฐ๊ฐ„์ด๋ฉด, ์ž ์‹œ ํ† ํฐ ๋ฒ„ํ‚ท์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๊พผ๋‹ค. 

 

4๋‹จ๊ณ„ : ๋งˆ๋ฌด๋ฆฌ 

์š”์ฒญํ•˜์‹  ๋‘ ์ด๋ฏธ์ง€์˜ ํ…์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  • ๊ฒฝ์„ฑ(hard) ๋˜๋Š” ์—ฐ์„ฑ(soft) ์ฒ˜๋ฆฌ์œจ ์ œํ•œ
    • ๊ฒฝ์„ฑ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ: ์š”์ฒญ์˜ ๊ฐœ์ˆ˜๋Š” ์ž„๊ณ„์น˜๋ฅผ ์ ˆ๋Œ€ ๋„˜์–ด์„ค ์ˆ˜ ์—†๋‹ค.
    • ์—ฐ์„ฑ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ: ์š”์ฒญ ๊ฐœ์ˆ˜๋Š” ์ž ์‹œ ๋™์•ˆ์€ ์ž„๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๊ณ„์ธต์—์„œ์˜ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ
    • ์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต(HTTP: OSI ๋„คํŠธ์›Œํฌ ๊ณ„์ธต๋„ ๊ธฐ์ค€์œผ๋กœ 7๋ฒˆ ๊ณ„์ธต)์—์„œ์˜ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ดํŽด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณ„์ธต์—์„œ๋„ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Iptables๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด IP ์ฃผ์†Œ(IP๋Š” OSI ๊ธฐ์ค€์œผ๋กœ 3๋ฒˆ ๊ณ„์ธต)์— ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. [15] ์ฐธ๊ณ ๋กœ OSI๋Š” Open Systems Interconnection model์˜ ์•ฝ์–ด๋กœ, ์ด 7๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. [16] 1๋ฒˆ ๊ณ„์ธต์€ ๋ฌผ๋ฆฌ(physical) ๊ณ„์ธต, 2๋ฒˆ ๊ณ„์ธต์€ ๋ฐ์ดํ„ฐ ๋งํฌ(data link) ๊ณ„์ธต, 3๋ฒˆ์€ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต, 4๋ฒˆ์€ ์ „์†ก(transport) ๊ณ„์ธต, 5๋ฒˆ์€ ์„ธ์…˜(session) ๊ณ„์ธต, 6๋ฒˆ์€ ํ‘œํ˜„(presentation) ๊ณ„์ธต, ๊ทธ๋ฆฌ๊ณ  7๋ฒˆ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์ด๋‹ค.
  • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์„ ํšŒํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ ์ธ๊ฐ€?
    • ํด๋ผ์ด์–ธํŠธ ์ธก ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
    • ์ฒ˜๋ฆฌ์œจ ์ œํ•œ์˜ ์ž„๊ณ„์น˜๋ฅผ ์ดํ•ดํ•˜๊ณ , ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
    • ์˜ˆ์™ธ๋‚˜ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ˆ์™ธ์  ์ƒํ™ฉ์œผ๋กœ๋ถ€ํ„ฐ ์šฐ์•„ํ•˜๊ฒŒ(gracefully) ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ์žฌ์‹œ๋„(retry) ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์ถฉ๋ถ„ํ•œ ๋ฐฑ์˜คํ”„(back-off) ์‹œ๊ฐ„์„ ๋‘”๋‹ค.

4์žฅ๊นŒ์ง€ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์นœ ์—ฌ๋Ÿฌ๋ถ„, ์ถ•ํ•˜ํ•œ๋‹ค. ๋ฉ‹์ง€๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•œ ์Šค์Šค๋กœ๋ฅผ ๋งˆ์Œ๊ป ๊ฒฉ๋ คํ•˜๋„๋ก ํ•˜์ž!

์ฐธ๊ณ ๋ฌธํ—Œ

[1] Rate-limiting strategies and techniques: https://cloud.google.com/solutions/rate-limiting-strategies-techniques

[2] Twitter rate limits: https://developer.twitter.com/en/docs/basics/rate-limits

[3] Google docs usage limits: https://developers.google.com/docs/api/limits

[4] IBM microservices: https://www.ibm.com/cloud/learn/microservices

[5] Throttle API requests for better throughput: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-request-throttling.html

[6] Stripe rate limiters: https://stripe.com/blog/rate-limiters

[7] Shopify REST Admin API rate limits: https://help.shopify.com/en/api/reference/rest-admin-api-rate-limits

[8] Better Rate Limiting With Redis Sorted Sets: https://engineering.classdojo.com/blog/2015/02/06/rolling-rate-limiter/

[9] System Design - Rate limiter and Data modelling: https://medium.com/@saisandeepmopuri/system-design-rate-limiter-and-data-modelling-9304b0d18250

[10] How we built rate limiting capable of scaling to millions of domains: https://blog.cloudflare.com/counting-things-a-lot-of-different-things/

[11] Redis website: https://redis.io/

[12] Lyft rate limiting: https://github.com/lyft/ratelimit

[13] Scaling your API with rate limiters: https://stripe.com/blog/rate-limiters

[14] What is edge computing: https://www.cloudflare.com/learning/serverless/glossary/what-is-edge-computing

[15] Rate Limit Requests with Iptables: https://blog.programster.org/rate-limit-requests-with-iptables

[16] OSI model: https://en.wikipedia.org/wiki/OSI_model#Layer_architecture

 

What Is Edge Computing?

Edge computing brings computation closer to the network edge, optimizing IoT devices and web applications. Learn how edge devices can cut costs and reduce latency.

www.cloudflare.com

 

 

 

Redis - Real-time data for agents & apps

Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.

redis.io

 

 

 

Think Topics | IBM

Access explainer hub for content crafted by IBM experts on popular tech topics, as well as existing and emerging technologies to leverage them to your advantage

www.ibm.com

 

 

 

์‚ฌ์šฉ๋Ÿ‰ ํ•œ๋„  |  Google Docs  |  Google for Developers

Google uses AI technology to translate content into your preferred language. AI translations can contain errors. ์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ ์‚ฌ์šฉ๋Ÿ‰ ํ•œ๋„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ

developers.google.com

 

'๐Ÿ‘ฉโ€๐Ÿ’ปDeveloper ๐Ÿ’ก > ๐Ÿ’พBack-end๐Ÿ•Š๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

URL ๋‹จ์ถ•๊ธฐ ์„ค๊ณ„  (1) 2026.06.20
๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผ ID ์ƒ์„ฑ๊ธฐ ์„ค๊ณ„  (0) 2026.06.20
๐Ÿ“š ์‹œ์Šคํ…œ ๋””์ž์ธ & AI ํŒŒ์ดํ”„๋ผ์ธ ํ•™์Šต ์ง„๋„ํ‘œ  (0) 2026.06.20
๐Ÿ“šย ์‹œ์Šคํ…œย ๋””์ž์ธย &ย AIย ํŒŒ์ดํ”„๋ผ์ธย ํ•™์Šตย ์ง„๋„ํ‘œ  (0) 2026.06.20
2์žฅ ๊ฐœ๋žต์ ์ธ ๊ทœ๋ชจ ์ถ”์ •  (0) 2026.06.19
'๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก/๐Ÿ’พBack-end๐Ÿ•Š๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • URL ๋‹จ์ถ•๊ธฐ ์„ค๊ณ„
  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผ ID ์ƒ์„ฑ๊ธฐ ์„ค๊ณ„
  • ๐Ÿ“š ์‹œ์Šคํ…œ ๋””์ž์ธ & AI ํŒŒ์ดํ”„๋ผ์ธ ํ•™์Šต ์ง„๋„ํ‘œ
  • ๐Ÿ“š ์‹œ์Šคํ…œ ๋””์ž์ธ & AI ํŒŒ์ดํ”„๋ผ์ธ ํ•™์Šต ์ง„๋„ํ‘œ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
Quantitative Research Engineer & Quantitative Strategist | Multimodal Alpha (Price/News/On-chain) | Regime-aware, Cost-included Backtests | Remote-first ์—ฐ๋ฆฌ์˜ ๋‚œ ๋จธ๋‹ˆ๐Ÿ’ฐ๊ฐ€ ์ข‹์•„๐Ÿ’™๐Ÿฅณ ์ถฉ๋งŒํ•˜๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์ฆ๊ฒ๊ฒŒ ๐Ÿถ ๐Ÿฆซ ๐Ÿ’›
  • Eliana Lee
    Product & AI Engineer
    AboutMe ๋ชฉํ‘œ GitHub _yeonlee___ Eliana_Eden
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿค ๐Ÿ˜Ž ์•ˆ๋…•โ˜ƒ๏ธ๐Ÿ’ž (125)
      • ๐Ÿ’™ ๐Ÿค Diary๐Ÿฐ ๐ŸŽ€ ๐Ÿงธ (37)
        • ๐Ÿ—ฝ๋ฏธ๊ตญ DS & CS ๋ฐ•์‚ฌ ์ด๋ฏผ๐Ÿ‹ (26)
        • ๐Ÿ›ซ์—ฌํ–‰ ์ด์•ผ๊ธฐ (1)
        • ๐Ÿ“’์˜ค๋Š˜ ์ด์•ผ๊ธฐ๐Ÿ’’๐Ÿซง๐ŸŒค๏ธ (6)
        • ๐Ÿฐโ˜˜๏ธ๐Ÿป‍โ„๏ธ๊ฐ•์•„์ง€ ์œก์•„ (0)
      • ๐ŸฌActuary๐Ÿคธ‍โ™€๏ธโœจ (1)
      • ๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก (65)
        • โš’๏ธ์‚ฝ์งˆ ๊ธฐ๋ก๊ธฐ๐Ÿ“[TIL] (6)
        • ๐Ÿ–ผ๏ธFront-end๐ŸŽจ (3)
        • ๐Ÿ’พBack-end๐Ÿ•Š๏ธ (29)
        • ๐Ÿคน‍โ™€๏ธAlgorithm & Coding Test๐Ÿ’ƒ (9)
        • ๐Ÿ—ปData๐Ÿ”๏ธ (1)
        • ๐Ÿ“Project๐Ÿ• (9)
      • ๐Ÿ’ฐ๊ฒฝ์ œ์  ์ž์œ  ๋‹ฌ์„ฑโœŒ๏ธ๐ŸคŸ (9)
        • ๐Ÿ“ŠQuant๐Ÿ“ˆ๐Ÿ‘ (5)
        • ๐Ÿฐ๐Ÿ›’๐Ÿฅ‡ (1)
        • ๐Ÿ’Ž ํˆฌ์ž ์‹ค์ „ ๊ฒฝํ—˜ โ˜บ๏ธ (1)
        • ๐Ÿ… Bitcoin 15๊ฐœ ๋ชจ์œผ๊ธฐ : 2040๋…„ 200์–ต+ (0)
        • ๐ŸŒŽ๋ฏธ๊ตญ ์‹œ์žฅ๐Ÿฆ (0)
      • ๐ŸŒค๏ธCloud๐ŸŒค๏ธโ˜๏ธ (2)
        • AWS (1)
        • Kubernetes (0)
        • Google Cloud Professional (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • git
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์‹œ์นด๊ณ ๋Œ€ํ•™๊ต
    Java
    ๋ฏธ๊ตญ์œ ํ•™
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์‹œ์นด๊ณ 
    ๊ฐ€์„ํ•™๊ธฐ
    ๋ฏธ๊ตญ๋น„์ž
    AWS
    ์‹œ์นด๊ณ ๋Œ€
    CS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜์˜ ์„ค๊ณ„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”