์ฝ์ ๋ ์ง : 2024.08.20
์ง์์ด : ์๋ ์ค ์ฌ
์ถํ์ฌ : ์ธ์ฌ์ดํธ
โ๏ธ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ฅผ ๋๋ฉด ์ข์ ์
- DoS(Denial of Service) ๊ณต๊ฒฉ์ ์ํ ์์ ๊ณ ๊ฐ ๋ฐฉ์ง
- ์๋ฒ ๊ฐ์๋ ์๋ ํํฐ API ์ฌ์ฉ๋ฃ์ ๋ํ ๋น์ฉ ์ ๊ฐ
- ๋ด(bot)์์ ์ค๋ ํธ๋ํฝ์ด๋ ์ฌ์ฉ์์ ์๋ชป๋ ์ด์ฉ ํจํด์ผ๋ก ์ ๋ฐ๋ ํธ๋ํฝ์ผ๋ก ์ธํ ์๋ฒ ๊ณผ๋ถํ ๋ฐฉ์ง
1๋จ๊ณ : ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
- ํด๋ผ์ด์ธํธ ์ธก ์ ํ ์ฅ์น์ธ๊ฐ, ์๋ฒ ์ธก ์ ํ ์ฅ์น์ธ๊ฐ?
- ์๋ฒ ์ธก์ด๋ผ๋ฉด API ํธ์ถ์ ์ ์ดํ๋ ๊ธฐ์ค์? - IP ์ฃผ์, ์ฌ์ฉ์ ID ๋ฑ
- ์์คํ ์ ๊ท๋ชจ๋?
- ์์คํ ์ด ๋ถ์ฐ ํ๊ฒฝ์์ ๋์ํด์ผ ํ๋๊ฐ?
- ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ ๋ ๋ฆฝ์ ์ธ ์๋น์ค์ธ๊ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ํฌํจ๋ ์ ์๋๊ฐ?
- ์ฌ์ฉ์์ ์์ฒญ์ด ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ์ํด ๊ฑธ๋ฌ์ง ๊ฒฝ์ฐ, ์ฌ์ฉ์์๊ฒ ๊ทธ ์ฌ์ค์ ์๋ ค์ผ ํ๋๊ฐ?
2๋จ๊ณ : ๊ฐ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ ์ด๋์ ๋ ๊ฒ์ธ๊ฐ?
- ํด๋ผ์ด์ธํธ ๋ณด๋ค๋ ์๋ฒ ์ธก ๋๋ ๋ณ๋์ ๋ฏธ๋ค์จ์ด๋ก ๊ตฌํํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฝ๊ฒ ์๋ณ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ค์ํ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์๊ณ ๋ชจ๋ ํต์ ํ๋ ๊ฒ ์ด๋ ต๋ค.
- ํด๋ผ์ฐ๋ MSA์ ๊ฒฝ์ฐ API ๊ฒ์ดํธ์จ์ด์ ๊ตฌํํ๋ค.
- ํด๋ผ์ฐ๋ ์ ์ฒด์์ ์ฒ๋ฆฌ์จ ์ ํ, SSL ์ข ๋จ, ์ฌ์ฉ์ ์ธ์ฆ, IP ํ์ฉ ๋ชฉ๋ก ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ค.
- ์๋ฒ์ ๋์ด์ผ ํ ๊น, API ๊ฒ์ดํธ์จ์ด์ ๋ฌ์ผ ํ ๊น?
- ํ์ฌ์ ๊ธฐ์ ์คํ(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ์บ์ ์๋น์ค ๋ฑ)์ ์ ๊ฒํ์ฌ ์๋ฒ ์ธก ๊ตฌํ์ ์ง์ํ๊ธฐ ์ถฉ๋ถํ์ง ํ์ธํ๋ค.
- ์ฌ์ ์ ๋ง๋ ์ฒ๋ฆฌ์จ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฐพ๋๋ค. ๋ค๋ง, ์๋ํํฐ API ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ ํ์ง๋ ์ ํ๋ ์ ์๋ค.
- MSA๋ฅผ ๊ธฐ๋ฐํ๊ณ ์๊ณ API ๊ฒ์ดํธ์จ์ด๋ฅผ ์ด๋ฏธ ์ค๊ณ์ ํฌํจ์์ผฐ๋ค๋ฉด, API ๊ฒ์ดํธ์จ์ด์ ํฌํจ์์ผ์ผ ํ ์๋ ์๋ค.
- ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ฅผ ๊ตฌํํ ์ธ๋ ฅ์ด ๋ถ์กฑํ๋ค๋ฉด ์๋ํํฐ API ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฐ๋ ๊ฒ ์ข์ ๊ฒ์ด๋ค.
์ฒ๋ฆฌ์จ ์ ํ ์๊ณ ๋ฆฌ์ฆ
- ํ ํฐ ๋ฒํท(token bucket)
- ๋์ ์๋ฆฌ
- ์ฌ์ ์ค์ ๋ ์์ ํ ํฐ์ด ์ฃผ๊ธฐ์ ์ผ๋ก ์ฑ์์ง๊ณ , ๊ฐ ์์ฒญ์ด ์ฒ๋ฆฌ๋ ๋๋ง๋ค ํ๋์ ํ ํฐ์ ์ฌ์ฉํ๋ค.
- ์ถฉ๋ถํ ํ ํฐ์ด ์์ผ๋ฉด ๋ฒํท์์ ํ ํฐ์ ํ๋ ๊บผ๋ธ ํ ์์คํ ์ ์์ฒญ์ ์ ๋ฌํ๋ค.
- ์ถฉ๋ถํ ํ ํฐ์ด ์์ผ๋ฉด ํด๋น ์์ฒญ์ ๋ฒ๋ ค์ง๋ค.
- ์ฅ์
- ๊ตฌํ์ด ์ฝ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- ์งง์ ์๊ฐ์ ์ง์ค๋๋ ํธ๋ํฝ๋ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
- ๋จ์
- ๋ฒํท ํฌ๊ธฐ์ ํ ํฐ ๊ณต๊ธ๋ฅ ์ธ์๋ฅผ ์ ์ ํ๊ฒ ํ๋ํ๋ ๊ฒ์ด ๊น๋ค๋กญ๋ค.
- ๋์ ์๋ฆฌ
- ๋์ถ ๋ฒํท(leaky bucket)
- ๋์ ์๋ฆฌ
- ์์ฒญ์ด ๋์ฐฉํ๋ฉด ํ๋ฅผ ํ์ธํ์ฌ, ํ์ ๋น์๋ฆฌ๊ฐ ์์ผ๋ฉด ์์ฒญ์ ์ถ๊ฐํ๋ค.
- ํ๊ฐ ๊ฐ๋ ์ฐจ ์์ผ๋ฉด ์ ์์ฒญ์ ๋ฒ๋ฆฐ๋ค.
- ์ง์ ๋ ์๊ฐ๋ง๋ค ํ์์ ์์ฒญ์ ๊บผ๋ด์ด ์ฒ๋ฆฌํ๋ค.
- ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- ๊ณ ์ ๋ ์ฒ๋ฆฌ์จ์ ๊ฐ๊ณ ์์ด, ์์ ์ ์ถ๋ ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ ํฉํ๋ค.
- ๋จ์
- ๋จ ์๊ฐ์ ๋ง์ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ฉด ํ์ ์ค๋๋ ์์ฒญ์ด ์์ด๊ณ , ๊ทธ ์์ฒญ์ ์ ๋ ์ฒ๋ฆฌ ๋ชปํ๋ฉด ์ต์ ์์ฒญ์ ๋ฒ๋ ค์ง๋ค.
- ๋ฒํท ํฌ๊ธฐ, ์ฒ๋ฆฌ์จ ์ธ์๋ฅผ ์ ์ ํ๊ฒ ํ๋ํ๋ ๊ฒ์ด ๊น๋ค๋กญ๋ค.
- ๋์ ์๋ฆฌ
- ๊ณ ์ ์๋ ์นด์ดํฐ(fixed window counter)
- ๋์ ์๋ฆฌ
- ํ์๋ผ์ธ์ ๊ณ ์ ๋ ๊ฐ๊ฒฉ์ ์๋๋ก ๋๋๊ณ , ๊ฐ ์๋๋ง๋ค ์นด์ดํฐ๋ฅผ ๋ถ์ธ๋ค.
- ์์ฒญ์ด ์ ์๋ ๋๋ง๋ค ์ด ์นด์ดํฐ์ ๊ฐ์ 1์ฉ ์ฆ๊ฐํ๋ค.
- ์ด ์นด์ดํฐ์ ๊ฐ์ด ์ฌ์ ์ ์ค์ ๋ ์๊ณ์น์ ๋๋ฌํ๋ฉด ์๋ก์ด ์์ฒญ์ ์ ์๋๊ฐ ์ด๋ฆด ๋๊น์ง ๋ฒ๋ ค์ง๋ค.
- ์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์๋๊ฐ ๋ซํ๋ ์์ ์ ์นด์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ ๋ฐฉ์ -> ํน์ ํ ํธ๋ํฝ ํจํด์ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํ๋ค.
- ๋จ์
- ์๋ ๊ฒฝ๊ณ ๋ถ๊ทผ์์ ํธ๋ํฝ์ด ์ง์ค๋๋ ๊ฒฝ์ฐ ์์คํ ์ ์ค์ ๋ ์ฒ๋ฆฌ ํ๋๋ณด๋ค ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
- ๋์ ์๋ฆฌ
- ์ด๋ ์๋ ๋ก๊ทธ(sliding window log)
- ๋์ ์๋ฆฌ
- ์์ฒญ์ ํ์์คํฌํ๋ฅผ ์ถ์ ํ๋ค. (ํ์์คํฌํ๋ ๋ณดํต ๋ ๋์ค์ sorted set ๊ฐ์ ์บ์์ ๋ณด๊ด)
- ์ ์์ฒญ์ด ์ค๋ฉด ๋ง๋ฃ๋ ํ์์คํฌํ๋ ์ ๊ฑฐํ๋ค.
- ์ ์์ฒญ์ ํ์์คํฌํ๋ฅผ ๋ก๊ทธ์ ์ถ๊ฐํ๋ค.
- ๋ก๊ทธ์ ํฌ๊ธฐ๊ฐ ํ์ฉ์น๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ผ๋ฉด ์์ฒญ์ ์์คํ ์ ์ ๋ฌํ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ๋ถํ๋ค.
- ์ฅ์
- ์ด๋ ์๊ฐ์ ์๋๋ฅผ ๋ณด๋๋ผ๋ ํ์ฉ๋๋ ์์ฒญ์ ๊ฐ์๋ ์์คํ ์ ์ฒ๋ฆฌ์จ ํ๋๋ฅผ ๋์ง ์๋๋ค.
- ๋จ์
- ๊ฑฐ๋ถ๋ ์์ฒญ์ ํ์์คํฌํ๋ก ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
- ๋์ ์๋ฆฌ
- ์ด๋ ์๋ ์นด์ดํฐ(sliding window counter)
- ๋์ ์๋ฆฌ
- ํ์ฌ ์๋์ [ ํ์ฌ 1๋ถ๊ฐ์ ์์ฒญ์ + ์ง์ 1๋ถ๊ฐ์ ์์ฒญ ์ * ์ด๋ ์๋์ ์ง์ 1๋ถ์ด ๊ฒน์น๋ ๋น์จ ] ๊ฐ์ ์์ฒญ์ด ์จ ๊ฒ์ผ๋ก ๋ณด๊ณ ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ค.
- ์ฅ์
- ์ด์ ์๊ฐ๋์ ํ๊ท ์ฒ๋ฆฌ์จ์ ๋ฐ๋ผ ํ์ฌ ์๋์ ์ํ๋ฅผ ๊ณ์ฐ -> ์งง์ ์๊ฐ๋์ ๋ชฐ๋ฆฌ๋ ํธ๋ํฝ์ ์ ๋์ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- ๋จ์
- ์ง์ ์๊ฐ๋์ ๋์ฐฉํ ์์ฒญ์ด ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํ ์ํ์์ ์ถ์ ์น๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๋ค์ ๋์จํ๋ค.
- ๋์ ์๋ฆฌ
๊ฐ๋ต์ ์ธ ์ํคํ ์ฒ
- ์์ฒญ์ ๊ฐ์๋ฅผ ์ถ์ ํ๋ ๋์ : ์ฌ์ฉ์, IP ์ฃผ์ ๋จ์, API ์๋ํฌ์ธํธ ๋จ์, ์๋น์ค ๋จ์
- ์นด์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ์ฅ์ : ๋ ๋์ค์ ๊ฐ์ ์บ์(๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋น ๋ฆ)
- ๋์ ์๋ฆฌ
- ํด๋ผ์ด์ธํธ๊ฐ ์ฒ๋ฆฌ์จ ์ ํ ๋ฏธ๋ค์จ์ด์๊ฒ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ์ฒ๋ฆฌ์จ ์ ํ ๋ฏธ๋ค์จ์ด๋ ๋ ๋์ค์ ์ง์ ๋ฒํท์์ ์นด์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ๋์ ๋๋ฌํ๋์ง ์๋์ง ๊ฒ์ฌํ๋ค.
- ํ๋์ ๋๋ฌํ๋ฉด ์์ฒญ์ ๊ฑฐ๋ถ๋๋ค.
- ํ๋์ ๋๋ฌํ์ง ์์๋ค๋ฉด ์์ฒญ์ API ์๋ฒ๋ก ์ ๋ฌ๋๋ค. ๋ฏธ๋ค์จ์ด๋ ์นด์ดํฐ์ ๊ฐ์ ์ฆ๊ฐ์ํฌ ํ ๋ค์ ๋ ๋์ค์ ์ ์ฅํ๋ค.
3๋จ๊ณ : ์์ธ ์ค๊ณ
์ฒ๋ฆฌ์จ ์ ํ ๊ท์น
- ์์ 1 : ์์คํ ์ด ์ฒ๋ฆฌํ ์ ์๋ ๋ง์ผํ ๋ฉ์์ง์ ์ต๋์น๋ ํ๋ฃจ 5๊ฐ
- ์์ 2 : ํด๋ผ์ด์ธํธ๊ฐ ๋ถ๋น 5ํ ์ด์ ๋ก๊ทธ์ธ ํ ์ ์๋๋ก ์ ํ
- ์ด๋ฐ ๊ท์น๋ค์ ๋ณดํต ์ค์ ํ์ผ ํํ๋ก ๋์คํฌ์ ์ ์ฅ๋๋ค.
์ฒ๋ฆฌ์จ ํ๋ ์ด๊ณผ ํธ๋ํฝ์ ์ฒ๋ฆฌ
- ์ด๋ค ์์ฒญ์ด ํ๋ ์ ํ์ ๊ฑธ๋ฆฌ๋ฉด API๋ 429 ์๋ต(too many requests)์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ธ๋ค.
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํ๋ ์ ํ์ ๊ฑธ๋ฆฐ ๋ฉ์์ง๋ฅผ ๋์ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ ๋ณด๊ดํ๋ค. (e.g. ์ฃผ๋ฌธ ์์คํ )
- ํด๋ผ์ด์ธํธ๋ HTTP ์๋ต ํค๋๋ฅผ ๋ณด๊ณ ์ ํ์ ๊ฑธ๋ฆด ๋๊น์ง ์ผ๋ง๋ ๋ง์ ์์ฒญ์ ๋ณด๋ผ ์ ์๋์ง ์ ์ ์๋ค.
- X-Ratelimit-Remaining : ์๋ ๋ด์ ๋จ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ ์์ฒญ์ ์
- X-Ratelimit-Limit : ๋งค ์๋๋ง๋ค ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ์ ์๋ ์์ฒญ์ ์
- X-Ratelimit-Retry-After : ํ๋ ์ ํ์ ๊ฑธ๋ฆฌ์ง ์์ผ๋ ค๋ฉด ๋ช ์ด ๋ค์ ๋ค์ ์๋ํด์ผ ํ๋์ง
์์ธ ์ค๊ณ
- ์ฒ๋ฆฌ์จ ์ ํ ๊ท์น์ ๋์คํฌ์ ๋ณด๊ด. ์์ ํ๋ก์ธ์ค๋ ์์๋ก ๊ท์น์ ๋์คํฌ์์ ์ฝ์ด์ ์บ์์ ์ ์ฅ.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ด๋ฉด ์ฒ๋ฆฌ์จ ์ ํ ๋ฏธ๋ค์จ์ด์ ๋จผ์ ๋๋ฌํจ
- ์ฒ๋ฆฌ์จ ์ ํ ๋ฏธ๋ค์จ์ด๋ ์ ํ ๊ท์น์ ์บ์์์ ๊ฐ์ ธ์ด. ์นด์ดํฐ ๋ฐ ๋ง์ง๋ง ์์ฒญ์ ํ์์คํฌํ๋ฅผ ๋ ๋์ค์์ ๊ฐ์ ธ์ด.
- ์ฒ๋ฆฌ์จ ์ ํ์ ๊ฑธ๋ฆฌ์ง ์์ผ๋ฉด API ์๋ฒ๋ก ๋ณด๋
- ์ฒ๋ฆฌ์จ ์ ํ์ ๊ฑธ๋ ธ๋ค๋ฉด 429๋ก ํด๋ผ์ด์ธํธ์ ์๋ตํ๊ณ , ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฌ๊ฑฐ๋ ๋ฉ์์ง ํ์ ๋ณด๊ด
๋ถ์ฐ ํ๊ฒฝ์์์ ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ๊ตฌํ
- ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ณ๋ ฌ ์ค๋ ๋๋ฅผ ์ง์ํ๋๋ก ํ์ฅํ ๋, ๊ฒฝ์ ์กฐ๊ฑด๊ณผ ๋๊ธฐํ ์ด์๋ฅผ ํ์ด์ผ ํ๋ค.
- ๊ฒฝ์ ์กฐ๊ฑด
- ๋ฌธ์ : ์๋ก ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก counter ๊ฐ์ ์ฝ์ด์ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ
- ํด๊ฒฐ ๋ฐฉ๋ฒ :
- ๋ฝ(lock)์ ์์คํ ์ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค.
- ๋ ๋์ค์์ ๋ฃจ์ ์คํฌ๋ฆฝํธ(Lua Script)๋ฅผ ๋๋ ค์, ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋์ ๋ค๋ฅธ ์์ฒญ์ด ๊ฐ์ญํ์ง ๋ชปํ๋๋ก ํ๋ค.
- ๋ ๋์ค์ ์ ๋ ฌ ์งํฉ(sorted set) ์๋ฃ ๊ตฌ์กฐ ์ฌ์ฉ
- ๋๊ธฐํ ์ด์
- ๋ฌธ์ : ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ๋ฌ ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ก ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ ๊ฒฝ์ฐ ๋๊ธฐํ๊ฐ ํ์ํด์ง
- ํด๊ฒฐ ๋ฐฉ๋ฒ :
- ๊ณ ์ ์ธ์ ์ ํ์ฉํ์ฌ ๊ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ํญ์ ๊ฐ์ ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ก ๋ณด๋ด๊ฒ ํ๋ค. (๊ท๋ชจ ํ์ฅ์ด ์ด๋ ต๊ณ ์ ์ฐ์ฑ์ด ๋จ์ด์ง)
- ๋ ๋์ค์ ๊ฐ์ ์ค์ ์ง์คํ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ด๋ค.
โ๏ธ ์ค๋ ์ฝ์ ์๊ฐ
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ ์๋ฒ์ธก์ด๋ ๋ณ๋์ ๋ฏธ๋ค์จ์ด์ ๋๋ฉฐ, ์๋น์ค/์ฌ์ฉ์/IP/API ๋จ์๋ก ์ ํํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๋ํ ๋ ๋์ค์ ๊ฐ์ ์บ์๋ฅผ ๋์ด ์์ฒญ ํ์๋ฅผ ์ ์ฅํ๊ณ , ํ๋์ ๋ค๋ค๋ฅด๋ฉด ์์ฒญ์ ๊ฑฐ๋ถํ๊ฑฐ๋ ๋๋ ๋ฉ์์ง ํ์ ์ ์ฅํ๊ณ 429 ์๋ต์ ์ฃผ๋ฉด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ์ฐ ํ๊ฒฝ์์ ๊ฒฝ์ ์กฐ๊ฑด ๋ฐ์ ์ ๋ฃจ์์คํฌ๋ฆฝํธ ๋๋ ๋ ๋์ค ์ ๋ ฌ ์งํฉ ์๋ฃ๊ตฌ์กฐ๋ก ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๋ณ๋์ ๋ฏธ๋ค์จ์ด๋ก ์ฒ๋ฆฌ์จ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฐ์ ์ผ๋ก ์ดํดํ ์ ์์๋ค.
โ๏ธ ๊ถ๊ธํ ๋ด์ฉ & ์ ์ดํด๋์ง ์๋ ๋ด์ฉ
๋ฃจ์ ์คํฌ๋ฆฝํธ(Lua script)
- Lua๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์คํฌ๋ฆฝํธ.
- ๋ ๋์ค 2.6 ๋ฒ์ ๋ถํฐ ๋ฃจ์ ์คํฌ๋ฆฝํธ ์์ง์ด ์ถ๊ฐ๋์ด, ๋ ๋์ค ์๋ฒ์์ ๋ฃจ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ๋ ๋์ค ๋ช ๋ น์ด๋ฅผ ํ๋์ ์คํฌ๋ฆฝํธ๋ก ๋ฌถ์ด ์คํํ๊ณ , ์ด๋ ์์์ (atomic)์ผ๋ก ์คํ๋์ด ์ค๊ฐ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผ ์์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ก์จ ๊ฒฝ์ ์กฐ๊ฑด ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋ ๋์ค ์ ๋ ฌ ์งํฉ(Sorted set)
- Set ์๋ฃ๊ตฌ์กฐ์ Score๋ฅผ ์ถ๊ฐ๋ก ๊ธฐ๋กํ์ฌ score๊ฐ ๋ฎ์ ์์๋ถํฐ ๋์ ์์๋๋ก ์ ๋ ฌ๋๋ ์๋ฃ๊ตฌ์กฐ.
- Sorted Set ์์ฒด๊ฐ ์ง์ ์ ์ผ๋ก ๊ฒฝ์ ์กฐ๊ฑด์ ํด๊ฒฐํ๋ ๊ฒ์ ์๋๋๋ค. score๋ฅผ ํ์์คํฌํ๋ก ์ค์ ํ์ฌ ๊ณต์ ์์์ ๋ํ ๋ณ๊ฒฝ์ ์์๋ฅผ ํ์ ํ ์ ์์ผ๋ฏ๋ก ๊ฒฝ์ ์กฐ๊ฑด์ ์ํํ ์ ์๋ ๊ฒ์ ๋๋ค.
โ๏ธ ์ฐธ๊ณ
https://redis.io/docs/latest/develop/data-types/sorted-sets/