Golang - Rate Limit

์ด ๊ธ€์—์„œ๋Š” ์ด ๊ธ€์—์„œ๋Š” golang์„ ํ™œ์šฉํ•œ rate limit์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ํšŒ์‚ฌ ์—…๋ฌด์—์„œ tcp 100์œผ๋กœ ๊ณ ์ •ํ•˜๊ณ  ์œ ์ € ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” batch job์„ ๊ฐœ๋ฐœํ–ˆ์—ˆ๋Š”๋ฐ, golang์—์„œ ์ œ๊ณตํ•˜๋Š” rate limit ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ด€๋ จํ•ด์„œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”! ์ด ๊ธ€์„ ์ฝ๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€์‹์„ ์–ป์–ด๊ฐ€๊ธธ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค ์ฒ˜๋ฆฌ์œจ ์ œํ•œ(rate limit)์ด๋ž€? golang rate package ์ฃผ์˜* ์ œ๊ฐ€ ๊ฒฝํ—˜ํ•œ ์ผ€์ด์Šค๋Š” ๋‹จ์ผ batch job์„ kubernetes cronjob์œผ๋กœ ๋™์ž‘์‹œํ‚จ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ rate limiter๋Š” ๋˜ ๋‹ค๋ฅธ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ๊ธ€ ํ›„๋ฐ˜๋ถ€์— ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ์œจ ์ œํ•œ(rate limit)..

Go 2023. 9. 16. 18:01
Go : ๊ณ ๋ฃจํ‹ด(goroutine), ์ฑ„๋„(channels)

๊ฐœ์š” ๊ณ ๋ฃจํ‹ด(goroutine)๊ณผ ์ฑ„๋„(channel)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๊ณ ๋ฃจํ‹ด(goroutine) ๊ณ ๋ฃจํ‹ด์€ Go๋Ÿฐํƒ€์ž„์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๋™์‹œ์„ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ๊ฐ€์ƒ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ฐ€์ƒ ์“ฐ๋ ˆ๋“œ๋ผ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ OS๋ ˆ๋ฒจ์—์„œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Go)๋ ˆ๋ฒจ์—์„œ ๊ฐ€์ƒ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์ž ๋Ÿฐํƒ€์ž„์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— main ๋Ÿฐํƒ€์ž„์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ๊ณ ๋ฃจํ‹ด์ด ์ข…๋ฃŒ๋˜๋‹ˆ ์ฃผ์˜ํ•˜์ž go ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ณ ๋ฃจํ‹ด์„ ์„ ์–ธํ•œ๋‹ค ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด์„œ ๊ณ ๋ฃจํ‹ด์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž import ( "fmt" "time" ) func main() { // go ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๊ณ ๋ฃจํ‹ด ์ƒ์„ฑ -> ๋™์‹œ์— ์‹คํ–‰๋จ. ์ „์ฒด ์ถœ๋ ฅ์„ ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์ž go bar("foo") bar("bar") /..

Go 2022. 3. 20. 15:27
Go ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž

๊ฐœ์š” go ์–ธ์–ด ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž ๋‹ค์Œ ๋ชฉ์ฐจ๋กœ ์ง„ํ–‰๋˜๋ฉฐ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฒฝํ—˜ํ•ด๋ณธ ์‚ฌ๋žŒ ๋Œ€์ƒ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค ๊ฐœ์š” ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ(+์ถ•์•ฝํ˜• ์„ ์–ธ) ํƒ€์ž… ํ•จ์ˆ˜ ์„ ์–ธ(ignore value(_), defer, export function) ์กฐ๊ฑด๋ฌธ(if, switch) ๋ฐ˜๋ณต๋ฌธ(for) pointer(*) ๋ฐฐ์—ด(slice, array) ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์ˆ˜๋Š” const, ๋ณ€์ˆ˜๋Š” var ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์„ ์–ธํ•œ๋‹ค ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์„ ์–ธ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž // ๊ธฐ๋ณธ ์„ ์–ธ var age = 23 var name string name = "mokhs" // ๋ณ€์ˆ˜ ์ถ•์•ฝํ˜• ์„ ์–ธ : ์•„๋ž˜์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž role := "Backend Engineer" // ์ƒ์ˆ˜ ์„ ์–ธ ..

Go 2022. 3. 18. 23:33