๐ ๊ฐ์๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ ๊ธฐ์ด
ํ ์ ์คํฐ๋๋ก ์งํ๋ ํ์ต๋ด์ฉ์ ์ ๋ฆฌํ ํฌ์คํธ์ ๋๋ค. github
Contents
1์ฅ. ์ฌ์ฉ์ ์์ ๋ฐ๋ฅธ ๊ท๋ชจ ํ์ฅ์ฑ
์ต๊ทผ์ ์ ๋ฆฌํ ๋ฐฑ์๋ ์ค๊ณ์ ๊ณ ๋ คํด์ผํ ์ฌํญ์ ๋ํ ํฌ์คํ ๊ณผ ์ ์ฌํ ๋ถ๋ถ์ด ๋ง์์ต๋๋ค.
๋จ์ผ์๋ฒ
๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์
๋ ฅํ๋ฉด, ์ด๋ป๊ฒ ๋ ๊น์?
DNS์์ ํด๋นํ๋ IP์ฃผ์๋ฅผ ์ฐพ๊ณ ๊ทธ ์ฃผ์์ ํด๋นํ๋ ์น์๋ฒ์ HTTP ์์ฒญ์ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค. ์ด ๋, ์น์๋ฒ๋ ์์ฒญ์ ๋ฐ๋ฅธ HTML ๋๋ JSON ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ์ฌ์ฉ์ ๋จ๋ง์ ๋ณด์ฌ์ฃผ๊ฒ ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค
HTTP ์์ฒญ์ ๋ฐ์ ์น์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ MySQL, PostgreSQL ๋ฑ์ด ์๊ณ , ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ NoSQL์๋ DynamoDB, Redis ๋ฑ์ด ์์ต๋๋ค. NoSQL์ ํค-๊ฐ ์ ์ฅ์, ๊ทธ๋ํ ์ ์ฅ์, ์นผ๋ผ ์ ์ฅ์, ๋ฌธ์ ์ ์ฅ์๋ก ๋๋ ์ ์์ต๋๋ค.
๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น์ ํ ๋ฐ์ดํฐ์ด๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๋ง ํ๋ฉด ๋๋ ์ํฉ, ์์ฃผ ๋ฎ์ ์ง์ฐ ์๋ต์๊ฐ์ด ์๊ตฌ๋๋ ์ํฉ์ ์ ํฉํฉ๋๋ค. ๋๋ ์์ฃผ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฃผ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ๊ฒ์ ์ฐ๊ธฐ ์ฐ์ฐ์ด ์๊ตฌ๋๋ ๋ถ๋ถ์ด ์๋๊ฐ์?
๊ธฐ์กด์ NoSQL์ ๋ํด ๊ณต๋ถํ ๋, ๋งค๋ฒ ๋ฐ์ดํฐ ์กฐํ๋ฅผ RDBMS์์ ํ๋ ๊ฒ์ด ์๋๋ผ Redis๋ฅผ ์ด์ฉํ ์บ์ฑ์ฒ๋ฆฌ ๋ฐฉ์์ ๋ชจ์ํ ์ ์ด ์์ต๋๋ค. ์ด ๋๋ ์ฝ๊ธฐ ์ฐ์ฐ์ ์ํ ์๋จ์ด์๋๋ฐ, ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค๋ ๋ง์ด ์ดํด๋์ง ์์์ต๋๋ค.
์ ์์ ์๋๋ฅผ ์๊ฐํด ๋ณด๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณผ์ ์์ NoSQL์ ๋จผ์ ์ ์ฅํด ๋๊ณ , RDBMS์๋ ์ผ์ ์๊ฐ๋ง๋ค ๋ฐ์ดํฐ ์
๋ฐ์ด๋ฅผ ์งํํ๋ ๋ถ๋ถ์ด๋ผ๊ณ ์ดํดํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๊ธฐ ์์
์ RDBMS๋ก ์งํํ๋ค๊ณ ํ์ ๋, ํน์ row๋ฅผ ์ฝ๊ธฐ ์ํด row lock ๊ฑธ๋ฆฌ๋ ์ํฉ์์๋ ๋ง์ ๋ฐ์ดํฐ์ ์ผ์ ์ ์ฅ์ผ๋ก ์ธํด ์๋น ์๊ฐ page lock์ด ๊ฑธ๋ฆฌ๋ ๋ฑ์ ๊ฒฝํฉ์ด ๋ฐ์ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์์ง์ ๊ท๋ชจ ํ์ฅ vs ์ํ์ ๊ท๋ชจ ํ์ฅ
์๋ฒ๋ฅผ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์ง์ ๊ท๋ชจ ํ์ฅ๊ณผ ์ํ์ ๊ท๋ชจ ํ์ฅ์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
์์ง์ ๊ท๋ชจ ํ์ฅ์ scale-up
์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์๋ฒ ์์ฒด์ CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ์คํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ง๋ง ์๋ฒ ์ฆ์ค์ ๋ฌดํ์ ํ ์ ์์ผ๋ฉฐ, ์ด ์๋ฒ๋ง ์กด์ฌํ๋ค๋ฉด, ์ฅ์ ์ํฉ์์ ์๋๋ณต๊ตฌ๋ ๋ค์คํ ๋ฐฉ์์ ์ ์ํ์ง ๋ชปํ๋ค๋ ์ ์์ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ํ์ ํ์ฅ์ scale-out
์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์ฌ๋ฌ ์๋ฒ๋ฅผ ๋์ด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋ฉด, ๋ก๋๋ฐธ๋ฐ์๋ก ์๋ฒ ์ ์์ ์ ์ ํ ๋ถ์ฐํด ์ฑ๋ฅ ํฅ์๊ณผ ๋ถํ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋ก๋๋ฐธ๋ฐ์๋ ๋ณด์์ ์ํด ์ฌ์ค IP ์ฃผ์๋ฅผ ์ฌ์ฉํด ์๋ฒ ๊ฐ ํต์ ์ ํ๋ฉฐ, ์์ฒญ์ ๋จผ์ ๋ฐ์ ์ฌ์ค IP ์ฃผ์์ ์น์๋ฒ์ ์ฐ๊ฒฐํด์ค๋๋ค.
๊ทธ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์คํ ์ฒ๋ฆฌ๋ ์ด๋จ๊น์?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋๋์ด ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง์ด ์ฌ์ฉ๋๋ ์ฝ๊ธฐ ์์
์ ์ฌ๋ฌ ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๊ฒ ํ๊ณ , ์ฐ๊ธฐ ์์
์ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ ์, ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์๋ก์ด ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ๊ธฐ ์์
์ ์ด์ด์ ํ๊ฒ ๋ฉ๋๋ค. ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ ์์๋ ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ญํ ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณด๊ด ๋ฐ์ดํฐ๊ฐ ์ต์ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณต๊ตฌ ์คํฌ๋ฆฝํธ๋ก ์ถ๊ฐ์ ์ธ ํด๊ฒฐ์ด ํ์ํฉ๋๋ค.
๋ณต๊ตฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ ์ถ๊ฐํด๊ฒฐ์ด ๊ฐ๋ฅํ ๊น?
์ด๋ฏธ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฅ์ ๊ฐ ๋์ ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์น๊ฒฉํ๋ ๊ณผ์ ์์ ํ์ํ ๋ถ๋ถ์ ์ฐ๊ธฐ ์ฐ์ฐ์ด ์งํ๋๋ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ์์ ์ผ๊ด์ฑ์
๋๋ค. ๋ฐ๋ผ์ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค๋ฉด, ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ ๋ฐ๋ก ์ง์ ์ผ๋ก์ ๋ณต๊ตฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ ์ ์์ด์ผ ํฉ๋๋ค.
๋ค์ค ๋ง์คํฐ์ ์ํ ๋ค์คํ
๋ค์ค ๋ง์คํฐ๋ ์ฌ๋ฌ ๋์ ๋ง์คํฐ ์ฅ๋น๊ฐ ํ๋์ ์ฌ๋ ์ด๋ธ ์ฅ๋น๋ฅผ ์ ์ดํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ์ํ ๋ค์คํ๋ ์ฌ๋ฌ ๋์ ์ฅ๋น๊ฐ ์๋ก๋ฅผ ์ ์ดํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์บ์
์บ์๋ ๊ฐ๋น์ผ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋๋ ์์ฃผ ์ฐธ์กฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋์ด ์ฐ์ด์ ์์ฒญ์ด ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํ๋ ์ ์ฅ์๋ฅผ ๋งํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ์บ์์ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๊ณ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กฐํํด ์บ์ ์ ์ฅ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
์บ์๋ ์ฃผ๋ก ์ฐธ์กฐ ๋ฐ์ดํฐ์ ์ฌ์ฉํ๋ฉฐ, ๋ง๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด์์ผ ํ๋ฏ๋ก ๋ง๋ฃ๊ธฐ๊ฐ์ ๋๋ฌด ์งง๊ฒ ๋์ด์ ์๋ฉ๋๋ค. ๋ ๋ง๋ฃ๊ธฐ๊ฐ์ด ๋๋ฌด ๊ธธ ๊ฒฝ์ฐ์๋ ์บ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ ์บ์ ์ญ์ ๋จ์ผ ์ฅ์ ์ง์ (Single Point of Failure, SPOF)๊ฐ ๋์ง ์๋๋ก ์บ์ ์๋ฒ๋ฅผ ๋ถ์ฐ์์ผ์ผ ํฉ๋๋ค.
์บ์ ๋ฐฉ์ถ์ ์ฑ
Caching Strategies and How to Choose the Right One์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ์ต๋๋ค.
์ด๋ค ์บ์ฑ์ ๋ต์ ์ฌ์ฉํ๋๋๋ ์ด๋ค ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ฐ๊ธฐ์์
์ด ํ ๋ฒ์ ๋ง์ด ์ด๋ค์ง๋์ง, ์ฐ๊ธฐ ์ฐ์ฐ์ ์์
๋น๋๊ฐ ๋์์ง, ๋ฐ์ดํฐ๊ฐ uniqueํ ๊ฐ์ ๊ฐ๋์ง์ ๋ฐ๋ผ์ ๋ค๋ฆ
๋๋ค.
Cache-Aside ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์
์์ cache๋ฅผ ๋จผ์ ์ฝ๊ณ , ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด(cache miss) ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด์จ ๋ค์ cache์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋๋ค. ์ด ๋ฐฉ์์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ํธ๋ค๋งํ๊ณ ๋ณ๋๋ก cache์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ฐ๊ฒฐ์ ์์ต๋๋ค. ์กฐํํ ๋ด์ฉ์ด ๋ง์ ๊ฒฝ์ฐ๋ก Memcached์ Redis๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. Cache-Aside ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฃผ๋ก ์ฐ๊ธฐ ์์
์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฐ๊ธฐ ๋๋ฌธ์ ์บ์์ ์ผ์นํ์ง ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ์ ๋๋ฅผ ์ ์ ํ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ์บ์ ํญ๋ชฉ์ ๋ฌดํจํํ๊ฑฐ๋ ์ ์ ํ TTL ์ค์ ์ด ํ์ํฉ๋๋ค.
Read-Through ๋ฐฉ์์ Cache-Aside ๋ฐฉ์๊ณผ ์ ์ฌํ์ง๋ง, ์บ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๋ค๋ฅด์ง ์๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋์ ์ฒ์ ๋ก๋๋๊ฑฐ๋ ์บ์ฑ์ฒ๋ฆฌํ๋ ๋ถํ์ํ ์บ์ฑ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํด ๋ฏธ๋ฆฌ ์๋ฐํ ํ์๊ฐ ์์ต๋๋ค.
Write-Through ๋ฐฉ์์ ํญ์ ์ฐ๊ธฐ ์์
์ ์บ์์ ์ฐ์ฌ์ง๊ณ ๊ทธ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ธฐ ์์
์ด ์ด๋ค์ง๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์ผ๊ด์ฑ์ด ์์ผ๋ ๋งค๋ฒ 2๊ฐ์ ์ฐ๊ธฐ ์์
์ด ์ํ๋๊ธฐ ๋๋ฌธ์ ๋๊ธฐ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค.
Write-Back ๋ฐฉ์์ ์บ์์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. ์ฐ๊ธฐ ์์
์ด ๋ง์ ๊ฒฝ์ฐ Write-Through ๋ฐฉ์์ฒ๋ผ ๋งค๋ฒ ์ํํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐํ ์์
์ ์ ์ํํ๋ฏ๋ก ๋น์ฉ์ด ๊ฐ์ํฉ๋๋ค. ํ์ง๋ง ์บ์ ์ค๋ฅ ๋ฐ์์ ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์์ค๋ ์ ์์ต๋๋ค.
์บ์ ์ผ๊ด์ฑ์ ๋ํ ํ์ด์ค๋ถ ๋ ผ๋ฌธ
R. Nishtala, โFacebook, Scaling Memcache at,โ 10th USENIX Symposium on NetworkedSystems Design and Implementation (NSDI โ13)
์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ (CDN)
CDN์ ์ ์ ์ฝํ
์ธ ์ ์ก์ ์ฐ์ด๋ ๋คํธ์ํฌ๋ก ๊ฐ๊น์ด CDN ์๋ฒ๋ฅผ ํตํด ์ ์ ์ฝํ
์ธ ๋ฅผ ์ป๊ณ ํด๋น ์ง๋ฆฌ์ ์์น์ CDN์ ์์ค๊ฐ ์๋ค๋ฉด, ๊ทธ CDN์ ์๋ณธ ์๋ฒ์์ ๊ฐ์ง๊ณ ์จ ์ ์ ์ฝํ
์ธ ๋ฅผ ์ ์ฅ ํ, ๊ฐ์ง๊ณ ์ค๊ฒ ๋ฉ๋๋ค. CDN์ ์ฌ์ฉํ ๋๋ ๋น์ฉ๊ณผ ์ฝํ
์ธ ์ ๋ง๋ฃ์์ , ์ฅ์ ๋์ฒ ๋ฐฉ์ ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ด์ฉํ ์ฝํ
์ธ ๋ฌดํจํ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ฌด์ํ ์น ๊ณ์ธต
์ฌ์ฉ์์ ์ํ์ ๋ณด๋ฅผ ์น ์๋ฒ์์ ๊ด๋ฆฌํ๋ค๋ฉด, ๊ทธ๋ฆฌ๊ณ ์น ์๋ฒ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๋ก๋๋ฐธ๋ฐ์๋ ํด๋น ์ฌ์ฉ์๋ฅผ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์น์๋ฒ๋ก๋ง ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ์ด๋ฅผ ๋๊ธฐ ์ํด ๊ณ ์ ์ธ์
(sticky session)์ ์ด์ฉํ๋ฉด ๋์๋ง, ์ด ๊ฒฝ์ฐ ๋ก๋๋ฐธ๋ฐ์์ ๋ถ๋ด์ ์ฃผ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ฌด์ํ ์น ๊ณ์ธต์ผ๋ก ์ํคํ
์ฒ๋ฅผ ๋ง๋ค ํ์๊ฐ ์๋๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ์ฌ์ฉ์๋ ์ด๋ค ์น ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ์ง ์๋ต์ ๋ฐ์ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฌด์ํ ์ํคํ
์ฒ์์๋ ์ํ ์ ๋ณด๊ฐ ์น ์๋ฒ์ ์์ง ์์ ๊ท๋ชจ์ ์ถ์/ํ์ฅ์ด ์์ ๋ก์์ง๋๋ค.
๋ฐ์ดํฐ ์ผํฐ
๋ฐ์ดํฐ ์ผํฐ๋ US-East
, US-West
์ ๊ฐ์ด ์ง๋ฆฌ์ ๋ผ์ฐํ
์ ๋ฐ๋ผ geoDNS๋ก ๊ฐ๊น์ด IP์ฃผ์๋ก ์ฐ๊ฒฐํด์ฃผ๋ ์๋น์ค์
๋๋ค.
์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋๋ ๊ฐ ๋ฐ์ดํฐ ์ผํฐ์ ์์น์์ ์๋น์ค๊ฐ ์ ๋์ํ๋์ง ํ
์คํธํ ํ์๊ฐ ์๊ณ , ๊ฐ ๋ฐ์ดํฐ ์ผํฐ๋ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ ์ง๋๋์ง ํ์ธํ ํ์๊ฐ ์์ต๋๋ค.
๋ฉ์์ง ํ
๋ฉ์์ง ํ๋ ๋ฌด์์ค์ ๋ณด์ฅํ๋ ๋น๋๊ธฐ ํต์ ์ ์ง์ํ๋ ์ปดํฌ๋ํธ์
๋๋ค. ๋ฐํ์๋ ๋ฏธ๋ฆฌ ๋ฉ์์ง ํ๋ฅผ ๋ง๋ค์ด๋๊ณ , ์๋น์๊ฐ ์๋นํ ๋๋ง๋ค ํ์ ์๋ ๋์์ ์ํํ๊ฒ ๋ฉ๋๋ค.
์์ฐ์๋ ์๋น์์ ํ๋ก์ธ์ค๊ฐ ์๋๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ฐํํ ์ ์๊ณ , ์๋น์ ์ญ์ ์์ฐ์๊ฐ ๊ฐ์ฉํ ์ํ๊ฐ ์๋์ฌ๋ ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๋์จํ ๊ฒฐํฉ์ด ๋ ์ ์๋๋ก ํ๊ณ , ๊ฒฐํจ์ ๋ํ ๋ด์ฑ์ ๋์
๋๋ค.
์ฑ
์์๋ ์ฌ์ง ๋ณด์ ์์
์ ๋ฏธ๋ฆฌ ๋ฉ์์ง ํ๋ก ๋ง๋ค์ด๋๊ณ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฃํ ์ ์๋๋ก ํ๋ ํ๋ก์ธ์ค๋ฅผ ์์๋ก ๋ค๊ณ ์์ต๋๋ค.
ํ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ๋ ๋ง์ ์์ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํด์ผ ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ํ์ง๋ง ํ๊ฐ ๊ฑฐ์ ํญ์ ๋น์ด์๋ ์ํ๋ผ๋ฉด ์์ ํ๋ก์ธ์ค์ ์๋ ์ค์ผ ์ ์์ ๊ฒ์ ๋๋ค.
When the size of the queue becomes large, more workers are added to reduce the processing time. However, if the queue is empty most of the time, the number of workers can be reduced.
์ด ๋ถ๋ถ์ ๋ง์ด ์ฝ๊ฐ ์ด์ํด์ ์์ด ๋ฒ์ ์ ์ฐพ์๋ดค์ต๋๋ค.
์์ฐ์์ ์๋น์๋ ๋
๋ฆฝ์ ํ์ฅ์ด ๊ฐ๋ฅํ๋ฐ ํ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ๋ ๋ง์ ์์
ํ๋ก์ธ์ค๋ฅผ ์์ฐ์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๊ฑฐ์ ํญ์ ๋น์ด ์๋ ์ํ๋ผ๋ฉด ์์
์์ ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋ก๊ทธ, ๋ฉํธ๋ฆญ ๊ทธ๋ฆฌ๊ณ ์๋ํ
์์คํ
๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋ก๊ทธ, ๋ฉํธ๋ฆญ, ์๋ํ๋ ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฉํธ๋ฆญ์ด๋ ์ฌ์
ํํฉ์ด๋ ์์คํ
ํ์ฌ ์ํ๋ฅผ ํ์
ํ ์ ์๋ ์ค์ํ ๋๊ตฌ์
๋๋ค. ์๋ฅผ ๋ค์ด, CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ๋ํ ํธ์คํธ ๋จ์ ๋ฉํธ๋ฆญ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์บ์ ์ฑ๋ฅ์ ๊ดํ ์ข
ํฉ ๋ฉํธ๋ฆญ, ์ผ๋ณ ๋ฅ๋์ฌ์ฉ์, ์ฌ๋ฐฉ๋ฌธ ๋ฑ๊ณผ ๊ฐ์ ํต์ฌ ๋น์ฆ๋์ค ๋ฉํธ๋ฆญ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ท๋ชจ ํ์ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ท๋ชจ ํ์ฅ๋ ์์ง์ , ์ํ์ ๊ท๋ชจ ํ์ฅ์ด ์์ต๋๋ค. ์์ ์๋ฒ์ ๊ฒฝ์ฐ์ ์์ง์ ํ์ฅ๊ณผ ๊ฑฐ์ ์ ์ฌํ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋์ฌ๊ฒจ ๋ด์ผํ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ์ ํ์ฅ์
๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ์ ํ์ฅ์ ์ค๋ฉ์ด๋ผ๊ณ ํ๋ฉฐ, ์ค๋ ๋จ์๋ก ๋ถํ ํด ์ค๋ณต์ด ์๋๋ก ๊ด๋ฆฌํฉ๋๋ค.
์ค๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ถํฌ๊ฐ ๊ท ๋ฑํ์ง ์์ ์๋ ์๊ณ , ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํซ์คํ ํค๊ฐ ์ง์ค๋์ด ์๋ฒ ๊ณผ๋ถํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ์ฌ ์ค๋ฉ์ ํ๊ฑฐ๋ ์คํ๋ ค ๋น์ ๊ทํ๋ก ์ฌ๋ฌ ์ค๋์์ ์กฐ์ธํ๋ ๊ณผ์ ์์ ์ค๋ ๋นํจ์จ์ ๋ฐฉ์งํ๋ ๊ฒ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ฐฑ๋ง ์ฌ์ฉ์, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์
ํฐ ๊ท๋ชจ์ ์์คํ
์ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ์ต์ ํํ๊ณ ์์ ๋จ์๋ก ์๋น์ค๋ฅผ ๋ถํ ํ๋ ๋ฑ ํ์ฅ์ฑ์ ์ ๋ฆฌํ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค.
- ์น ๊ณ์ธต์ ๋ฌด์ํ ๊ณ์ธต์ผ๋ก
- ๋ชจ๋ ๊ณ์ธต์ ๋ค์คํ ๋์
- ๊ฐ๋ฅํ ํ ๋ง์ ๋ฐ์ดํฐ ์บ์ํ ๊ฒ
- ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ง์ํ ๊ฒ
- ์ ์ ์ฝํ ์ธ ๋ CDN์ ํตํด ์๋น์คํ ๊ฒ
- ๋ฐ์ดํฐ ๊ณ์ธต์ ์ค๋ฉ์ ํตํด ๊ทธ ๊ท๋ชจ๋ฅผ ํ์ฅํ ๊ฒ
- ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์๋น์ค๋ก ๋ถํ ํ ๊ฒ
- ์์คํ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ์๋ํ ๋๊ตฌ๋ค์ ํ์ฉํ ๊ฒ
2์ฅ. ๊ฐ๋ต์ ์ธ ๊ท๋ชจ ์ถ์
๊ฐ๋ต์ ์ธ ๊ท๋ชจ ์ถ์ ์ ๋ณดํธ์ ์ผ๋ก ํต์ฉ๋๋ ์ฑ๋ฅ ์์น์์์ ์ฌ๊ณ ์คํ์ ํํ์ฌ ๋ณดํธ์ ์ผ๋ก ํต์ฉ๋๋ ์ฑ๋ฅ ์์น์์์ ์ฌ๊ณ ์คํ์ ํํ์ฌ ์ถ์ ์น๋ฅผ ๊ณ์ฐํ๋ ํ์๋ก์, ์ด๋ค ์ค๊ณ๊ฐ ์๊ตฌ์ฌํญ์ ๋ถํฉํ ๊ฒ์ธ์ง ๋ณด๊ธฐ ์ํ ๊ฒ
Jeff Dean, Lead of Google AI
2์ ์ ๊ณฑ์
์๋ต์ง์ฐ ๊ฐ
- ๋ฉ๋ชจ๋ฆฌ๋ ๋น ๋ฅด์ง๋ง ๋์คํฌ๋ ์์ง๋ ๋๋ฆฌ๋ค.
- ๋์คํฌ ํ์์ ๊ฐ๋ฅํ ํ ํผํ๋ผ.
- ๋จ์ํ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋น ๋ฅด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ธํฐ๋ท์ผ๋ก ์ ์กํ๊ธฐ ์ ์ ๊ฐ๋ฅํ๋ฉด ์์ถํ๋ผ.
- ๋ฐ์ดํฐ ์ผํฐ๋ ๋ณดํต ์ฌ๋ฌ ์ง์ญ์ ๋ถ์ฐ๋์ด ์๊ณ , ์ผํฐ๋ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ณ ๊ฐ์ฉ์ฑ
์์คํ
์ด ์ค๋ ์๊ฐ ๋์ ์ง์์ ์ผ๋ก ์ค๋จ ์์ด ์ด์๋ ์ ์๋ ๋ฅ๋ ฅ์ ์ง์นญํ๋ ์ฉ์ด์
๋๋ค. (๋๋ถ๋ถ 99% ~ 100%)
SLA(Service Level Agreement)
์๋น์ค ์ฌ์
์๊ฐ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฉ์ด, ์๋น์ค ์ฌ์
์์ ๊ณ ๊ฐ ์ฌ์ด์ ๋งบ์ด์ง ํฉ์
์ถ์ ๋ ๊ตฌํ๊ธฐ
ํธ์ํฐ QPS์ ์ ์ฅ์ ์๊ตฌ๋ ์ถ์ ์์
- ์๊ฐ ๋ฅ๋ ์ฌ์ฉ์ ์ 3์ต๋ช
- 50% ์ฌ์ฉ์๊ฐ ํธ์ํฐ๋ฅผ ๋งค์ผ ์ด์ฉ
- ํ๊ท ์ ์ผ๋ก ๊ฐ ์ฌ์ฉ์๋ ๋งค์ผ 2๊ฑด์ ํธ์์ ์ฌ๋ฆผ
- ๋ฏธ๋์ด๋ฅผ ํฌํจํ๋ ํธ์์ 10%
- ๋ฐ์ดํฐ๋ 5๋ ๊ฐ ๋ณด๊ด
์ถ์ ์น | ๊ณ์ฐ์ |
---|---|
QPS(Query Per Second) ์ถ์ ์น | (1.5์ต๋ช *2ํธ์)/(24*60*60) = ์ฝ 3500 |
๋ฏธ๋์ด ์ ์ฅ์ ์ํ ์ ์ฅ์ ์๊ตฌ๋ | (1.5์ต*2ํธ์*10%)*1MB = 30TB/์ผ 30TB*365*5 = ์ฝ 55PB |
์ถ์ ์น ๊ณ์ฐ์ ์ํ ํ
- ๊ทผ์ฌ์น๋ฅผ ์ด์ฉํด์ ๊ณ์ฐ
- ๊ฐ์ ์ ์ ์ด๋์
- ๋จ์๋ฅผ ๋ถ์ด์
- QPS, ์ต๋ QPS, ์ ์ฅ์ ์๊ตฌ๋, ์บ์ ์๊ตฌ๋, ์๋ฒ ์ ๋ฌธ์ ๋ฅผ ์ตํ๋์
3์ฅ. ์์คํ ์ค๊ณ ๋ฉด์ ๊ณต๋ต๋ฒ
์์คํ
์ค๊ณ ๋ฉด์ ์ ๋ชฉ์
์ง์์๊ฐ ํ๋ ฅ์ ์ ํฉํ์ง, ์๋ฐ ์ํฉ์ ์ ๊ฒฌ๋๋์ง ๋ชจํธํ ๋ฌธ์ ๋ก๋ ๊ฑด์ค์ ์ผ๋ก ํด๊ฒฐํ ๋ฅ๋ ฅ์ด ์๋์ง ๋ฑ์ ํ์ธํฉ๋๋ค. ๊ณผ๋ํ ์์ง๋์ด๋ง์ ํผํ๊ณ โํํ์ ๊ฒฐ์ โ์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํจ๊ณผ์ ๋ฉด์ ์ ์ํ 4๋จ๊ณ ์ ๊ทผ๋ฒ
1๋จ๊ณ ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
- ์ฌ๋ฐ๋ฅธ ์ง๋ฌธ์ ํ๊ณ ๊ฐ์ ์ ํ๊ณ , ์์คํ ๊ตฌ์ถ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ชจ์์ผ ํฉ๋๋ค.
- ๊ธฐ๋ฅ, ์ฌ์ฉ์ ์, ๊ท๋ชจ ํ์ฅ์ฑ, ๊ธฐ์ ์คํ ๋ฑ
2๋จ๊ณ ๊ฐ๋ต์ ์ธ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
- ํต์ฌ ์ปดํฌ๋ํธ ๋ค์ด์ด๊ทธ๋จ ๊ทธ๋ฆฌ๊ธฐ
- ํด๋ผ์ด์ธํธ(๋ชจ๋ฐ์ผ/์น), API, ์น ์๋ฒ, ๋ฐ์ดํฐ ์ ์ฅ์, ์บ์, CDN, ๋ฉ์์ง ํ ๋ฑ
3๋จ๊ณ ์์ธ ์ค๊ณ
- ์ปดํฌ๋ํธ ์ฌ์ด์ ์ฐ์ ์์ ์ ํ๊ธฐ
- ๋ถํ์ํ ์ธ๋ถ์ฌํญ์ ์ง์คํ์ง ๋ง๊ณ ๋ฉด์ ์ ๋ ์ด์ ์ด ๋ง์ถฐ์ง ๋ถ๋ถ์ ๋ํด ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
4๋จ๊ณ ๋ง๋ฌด๋ฆฌ
- ํ์์ง๋ฌธ
- ์ด์ ์ด์์ ๋ํด ์ด์ผ๊ธฐ(๋ฐฐํฌ, ๋ก๊ทธ, ๋ชจ๋ํฐ๋ง)
- ์ค๋ฅ ๋ฐ์์์ ๋ํ์ฌ
์์คํ ์ค๊ณ ๋ฉด์ ์์ ํ์ง ๋ง์์ผ ํ ๊ฒ
- ์ ํ์ ์ธ ๋ฉด์ ๋ฌธ์ ์ ๋๋นํ์ง ์์ ์ํ์์ ๊ฐ์ง ๋ง๋ผ.
- ์๊ตฌ์ฌํญ์ด๋ ๊ฐ์ ๋ค์ด ๋ถ๋ช ํ์ง ์์ ์ํ์์ ์ค๊ณ๋ฅผ ์ ์ํ์ง ๋ง๋ผ.
- ์ฒ์๋ถํฐ ํน์ ์ปดํฌ๋ํธ์ ์ธ๋ถ์ฌํญ์ ๋๋ฌด ๊น์ด ์ค๋ช ํ์ง ๋ง๋ผ. ๊ฐ๋ต์ ์ค๊ณ๋ฅผ ๋ง์น ๋ค์ ์ธ๋ถ์ฌํญ์ผ๋ก ๋์๊ฐ๋ผ.
- ์งํ ์ค ๋งํ๋ค๋ฉด, ํํธ๋ฅผ ์ฒญํ๊ธฐ๋ฅผ ์ฃผ์ ํ์ง ๋ง์.
- ์ํต์ ํ์.
- ์ค๊ณ์์ ๋ด๋์ ํ์๋ ๋ฉด์ ๊ด์ ์๊ฒฌ์ ์์ฃผ ๊ตฌํ๋ผ.
4์ฅ. ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ์ค๊ณ
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ ํด๋ผ์ด์ธํธ ๋๋ ์๋น์ค๊ฐ ๋ณด๋ด๋ ํธ๋ํฝ์ ์ฒ๋ฆฌ์จ์ ์ ์ดํ๊ธฐ ์ํ ์ฅ์น์ ๋๋ค.
- DoS์ ์ํ ์์๊ณ ๊ฐ ๊ณต๊ฒฉ์ ๋ฐฉ์ง
- ์ฐ์ ์์๊ฐ ๋์ API์ ์์์ ํ ๋นํ๊ฑฐ๋ API ์ฌ์ฉ์ ๋ฐ๋ฅธ ๊ณผ๊ธ ํ์๋ฅผ ์ ํ
- ์๋ฒ ๊ณผ๋ถํ ๋ฐฉ์ง
์ฑ ์์๋ 3์ฅ์์ ์ค๋ช ํ ๋จ๊ณ๋ณ๋ก ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น ์ค๊ณ๋ฅผ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
1๋จ๊ณ - ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
์ฒ๋ฆฌ์จ๊ณผ ์๋ต์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์์ธ์ฒ๋ฆฌ, ๊ฒฐํจ ๊ฐ๋ด์ฑ์ ์ด๋ค์ง ๋ฑ์ ๋ํ ์์คํ
์๊ตฌ์ฌํญ์ ์ ํด์ผ ํฉ๋๋ค.
2๋จ๊ณ - ๊ฐ๋ต์ ์ธ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
์ฒ๋ฆฌ์จ ์ ํ์ฅ์น๋ฅผ ์๋ฒ์ ๋์ง ๊ฒ์ดํธ์จ์ด์ ๋์ง๋ ํ์ฌ์ ์ง์นจ, ๊ธฐ์ ์คํ ๋ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ฒ๋ฆฌ์จ ์ ํ์ฅ์น ๋ฏธ๋ค์จ์ด๋ก ๋ง๋ค์ด ๋ง์ ์์ฒญ์ด ๋ฐ์ํ ๊ฒฝ์ฐ 429 Too many request
๋ฅผ ๋ฐํํฉ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค์์๋ ๋ณดํต API ๊ฒ์ดํธ์จ์ด๋ผ๋ ์ปดํฌ๋ํธ์ ์ค๊ณ๋๋๋ฐ, SSL ์ข
๋จ, ์ฌ์ฉ์ ์ธ์ฆ, IP ํ์ฉ๋ชฉ๋ก ๊ด๋ฆฌ ๋ฑ์ ์ง์ํ๋ ์์ ์ํ๊ด๋ฆฌํ ์๋น์ค์
๋๋ค.
์ฒ๋ฆฌ์จ ์ ํ ์๊ณ ๋ฆฌ์ฆ
ํ ํฐ ๋ฒํท, ๋์ถ ๋ฒํท, ๊ณ ์ ์๋ ์นด์ดํฐ, ์ด๋ ์๋ ๋ก๊ทธ, ์ด๋ ์๋ ์นด์ดํฐ
ํ ํฐ ๋ฒํท
- ๊ฐ๋จํ๊ณ ์ธํฐ๋ท ๊ธฐ์ ๋ค์ด ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ง์กด๊ณผ ์คํธ๋ผ์ดํ์์ API ํต์ ๋ฅผ ์ํด ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
- ํ ํฐ์ด ์ ๊ธฐ์ ์ผ๋ก ์ฑ์์ง๊ณ ์์ฒญ์ด ์ฒ๋ฆฌ๋ ๋๋ง๋ค ํ๋์ ํ ํฐ์ ์ฌ์ฉํฉ๋๋ค. ํ ํฐ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ์์ฒญ์ ๋ฒ๋ ค์ง๋๋ค.
- ๋ฒํท์ ํฌ๊ธฐ, ํ ํฐ ๊ณต๊ธ๋ฅ ํ์
- ๊ตฌํ์ด ์๋น๊ณ ๋ฉ๋ชจ๋ฆฌ ํจ์จ๋ ์ข์ง๋ง, ๋ ๊ฐ์ ์ธ์๊ฐ์ ์ ์ ํ ํ๋ํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค.
๋์ถ ๋ฒํท
- FIFO
- ํ์ ๋น์๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์์ฒญ์ ์ถ๊ฐํ๊ณ ์๋ฆฌ๊ฐ ์์ผ๋ฉด ์์ฒญ์ ๋ฒ๋ฆฝ๋๋ค.
- ๋ฒํท ํฌ๊ธฐ, ์ฒ๋ฆฌ์จ
- ํ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ธก๋ฉด์์ ํจ์จ์ ์ด์ง๋ง ์์ฒญ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ์ค๋๋ ์์ฒญ๋ค์ด ์์ด๊ณ ์ต์ ์์ฒญ๋ค์ด ๋ฒ๋ ค์ง๋๋ค. ํ ํฐ ๋ฒํท ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์๊ฐ์ ํ๋ํ๋ ๊ฒ์ด ์ด๋ ต์ต๋๋ค.
๊ณ ์ ์๋ ์นด์ดํฐ
- ํ์๋ผ์ธ์ ๊ณ ์ ๋ ๊ฐ๊ฒฉ์ ์๋๋ก ๋๋๊ณ ๊ฐ ์๋๋ง๋ค ์นด์ดํฐ๋ฅผ ๋ถ์ ๋๋ค.
- ์์ฒญ์ด ์ ์๋๋ฉด ์นด์ดํฐ๊ฐ 1์ฉ ์ฆ๊ฐ๋๊ณ , ์นด์ดํฐ๊ฐ ์๊ณ์น๋ฅผ ๋ฒ์ด๋๋ฉด ์๋ก์ด ์์ฒญ์ ์ ์๋๊ฐ ์ด๋ฆด ๋๊น์ง ๋ฒ๋ ค์ง๋๋ค.
- ์๊ฐ์ ์ผ๋ก ๋ง์ ํธ๋ํฝ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ, ์๋์ ํ ๋น๋ ์๋ณด๋ค ๋ ๋ง์ ์์ฒญ์ด ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
์ด๋ ์๋ ๋ก๊ทธ
- ๊ณ ์ ์๋ ์นด์ดํฐ์์ ํ ์๊ฐ์ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ๊ฒฝ์ฐ์ ํ ๋น๋ณด๋ค ๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ์์ ๋๋ค.
- ์์ฒญ์ ํ์์คํฌํ๋ฅผ ๋ ๋์ค ์ ๋ ฌ์งํฉ๊ณผ ๊ฐ์ ์บ์์ ๋ณด๊ดํฉ๋๋ค.
- ์ ์์ฒญ์ ๋ก๊ทธ์ ์ถ๊ฐํ๊ณ , ๋ง๋ฃ๋ ํ์์คํฌํ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ๊ฑฐ๋ถ๋ ์์ฒญ์ ํ์์คํฌํ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ค๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ์๋ ์นด์ดํฐ
- ๊ณ ์ ์๋ ์นด์ดํฐ์ ์ด๋ ์๋ ๋ก๊ทธ๋ฅผ ๊ฒฐํฉํ ๊ฒ์ผ๋ก ์์ฒญ์ ๊ณ์ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ์ฌ 1๋ถ๊ฐ ์์ฒญ ์ + ์ง์ 1๋ถ๊ฐ์ ์์ฒญ ์ * ์ด๋ ์๋์ ์ง์ 1๋ถ์ด ๊ฒน์น๋ ๋น์จ
- ์ง์ ์๊ฐ๋์ ๋์ฐฉํ ์์ฒญ์ด ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํ ์ํ์์ ์ถ์ ์น๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๋ค์ ๋์จํฉ๋๋ค.
์นด์ดํฐ์ ๋ณด๊ด
Redis ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ ์ฅ์ฅ์น์ ์ ์ฅํ๋ฉฐ, ์นด์ดํฐ ๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํค๋ INCR
์ ์นด์ดํฐ์ ํ์์์ ๊ฐ์ ์ ํ๋ EXPIRE
๊ฐ ์์ต๋๋ค.
3๋จ๊ณ - ์์ธ ์ค๊ณ
์ฒ๋ฆฌ์จ ์ ํ config ํ์ผ
domain: messaging
descriptors:
- key: message_type
Value: marketing
rate_limit:
unit: day
requests_per_unit: 5
์ฒ๋ฆฌ์จ ํ๋ ์ด๊ณผ ํธ๋ํฝ์ ์ฒ๋ฆฌ
ํด๋ผ์ด์ธํธ๋ HTTP ์๋ต ํค๋๋ฅผ ํตํด ์ผ๋ง๋ ๋ง์ ์์ฒญ์ด ์๋์ง, ์๋์ ๋จ์ ์์ฒญ ์, ์๋๋ง๋ค ๊ฐ๋ฅํ ์์ฒญ์ ์, ํ๋ ์ ํ์ ๊ฑธ๋ฆฌ์ง ์๊ธฐ ์ํด ์ผ๋ง ๋ค์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋์ง๋ฅผ ์ ์ ์์ต๋๋ค.
- X-Ratelimit-Remaining
- X-Ratelimit-Limit
- X-Ratelimit-Retry-After
๋ถ์ฐ ํ๊ฒฝ์์์ ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น์ ๊ตฌํ
๋ณํ์ฑ์ด ์ฌํ ๊ฒฝ์ฐ์ ๋ํด์๋ ๊ฒฝ์ ์กฐ๊ฑด ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฝ์ ์์คํ
์ฑ๋ฅ์ ๋ง์ด ๋จ์ด๋จ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ฃจ์ ์คํฌ๋ฆฝํธ ๋๋ ์ ๋ ฌ ์งํฉ์ด๋ผ๋ ๋ ๋์ค ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋๊ธฐํ ์ด์๋ฅผ ์ํด์ ๊ณ ์ ์ธ์ ๋์ ๋ ๋์ค์ ๊ฐ์ ์ค์ ์ง์คํ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฑ๋ฅ์ต์ ํ๋ฅผ ์ํด์๋ ๋ฐ์ดํฐ ์ผํฐ์ ์ง๋ฆฌ์ ์์น์ ๋ฐ๋ผ ์์ง ์๋ฒ๋ฅผ ๋์ด ์ง์ฐ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ ์ฅ์น ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ๋ ์ต์ข ์ผ๊ด์ฑ ๋ชจ๋ธ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น๋ฅผ ๋ชจ๋ํฐ๋ง ํด ๋ ํธ๋ํฝ ํจํด์ ์ ์ฒ๋ฆฌํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
4๋จ๊ณ ๋ง๋ฌด๋ฆฌ
๊ทธ ์ธ์๋ ๋ค์ ์ฌํญ๋ค์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค.
- ๊ฒฝ์ฑ ๋๋ ์ฐ์ฑ ์ฒ๋ฆฌ์จ ์ ํ
- ๋ค์ํ ๊ณ์ธต์์์ ์ฒ๋ฆฌ์จ ์ ํ
- ์ฒ๋ฆฌ์จ ์ ํ์ ํํผํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ ๊ฒ์ธ๊ฐ
5์ฅ. ์์ ํด์ ์ค๊ณ
์๋ฒ์ ๋ถํ๋ฅผ ๊ท ๋ฑํ๊ฒ ๋๋๊ธฐ ์ํด์ ํด์ํจ์๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ๋ฐฐ์น๋๋ ํค ๊ฐ์ ๋ถ์ฐ์ ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํน์ ์๋ฒ๊ฐ ์ฃฝ์ผ๋ฉด ์บ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋ ์๋ฒ์ ์ ์ํ๋ ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์์ ํด์
ํด์๊ณต๊ฐ์ ๊ตฌ๋ถ๋ ค ํด์ ๋ง์ผ๋ก ๋ง๋ค๋ฉด ๊ทธ ์์ ํด์ ์๋ฒ์ ํด์ ํค๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ํด๋น ํค์ ์๊ณ๋ฐฉํฅ์ ์์นํ๋ ๋ง์ ํ์ํด ์ฒ์ ๋ง๋๋ ์๋ฒ์ ํค๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์
๋๋ค. ์๋ฒ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋๋ผ๋ ๋ค์ ์๋ฒ๋ก ์ฌ๋ฐฐ์น๋ฉ๋๋ค.
ํ์ง๋ง ํํฐ์
์ ํฌ๊ธฐ๋ฅผ ๊ท ๋ฑํ๊ฒ ์ ์ง ํ์ง ๋ชปํด ์ผ๋ถ ํฐ ํด์๊ณต๊ฐ์ ํ ๋น๋ฐ๊ฒ ๋ ์ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ์๋
ธ๋ ๋๋ ๋ณต์ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋ฉ๋๋ค . ํ๋์ ์๋ฒ๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ด ์๋ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ฅผ ๋ง์ ๋ฐฐ์นํ๋ฏ๋ก์ ์ฌ๋ฌ ๊ฐ์ ํํฐ์
์ ํ๋์ ์๋ฒ๊ฐ ๊ด๋ฆฌํด์ผ ํ๋ ๋ฐฉ์์
๋๋ค. ๋
ธ๋๊ฐ ๋ง์์๋ก ํค์ ๋ถํฌ๋ ๋ ๊ท ๋ฑํด์ง๋๋ค.
๊ฐ์ ๋
ธ๋์ ๊ฐ์๋ฅผ ๋ ๋๋ฆฌ๋ฉด ํ์ค ํธ์ฐจ์ ๊ฐ์ ๋ ๋จ์ด์ง ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์๋
ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ ๋ ๋ง์ด ํ์ํ ๊ฒ์
๋๋ค. ํํ์ ๊ฒฐ์ ์ด ํ์ํ๋ฏ๋ก ์์คํ
์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๊ฐ์ ๋
ธ๋ ๊ฐ์๋ฅผ ์ ์ ํ ์กฐ์ ํด์ผ ํฉ๋๋ค.
- ์๋ฒ๊ฐ ์ถ๊ฐ ๋๋ ์ญ์ ๋ ๋ ์ฌ๋ฐฐ์น๋๋ ํค์ ์๊ฐ ์ต์ํ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋๋ฏ๋ก ์ํ์ ๊ท๋ชจ ํ์ฅ์ฑ์ ๋ฌ์ฑ
- ํซ ์คํ ํค๋ฌธ์ ๋ฅผ ์ค์ฌ์ค๋๋ค. ํน์ ์ค๋์ ์ ๊ทผ์ด ๋น๋ฒํ ๊ฒฝ์ฐ ์๋ฒ ๊ณผ๋ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
6์ฅ. ํค-๊ฐ ์ ์ฅ์ ์ค๊ณ
ํค-๊ฐ ์ ์ฅ์๋ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋น ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์๋ง์กด ๋ค์ด๋๋ชจ, memcached, Redis์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ด ์์ต๋๋ค.
๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
ํค-๊ฐ ์ ์ฅ์๋ฅผ ์ค๊ณํ๊ณ ์ ํ ๋ ์ด๋ค ๊ฒ์ ๊ณ ๋ คํ ์ ์์๊น์?
- ํค-๊ฐ ์์ ํฌ๊ธฐ
- ๋ฐ์ดํฐ์ ํฌ๊ธฐ
- ๊ฐ์ฉ์ฑ
- ๊ท๋ชจ ํ์ฅ์ฑ
- ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ
- ์๋ต ์ง์ฐ์๊ฐ
๋จ์ผ ์๋ฒ ํค-๊ฐ ์ ์ฅ์
ํค-๊ฐ ์ ์ ๋ถ๋ฅผ ํด์ํ
์ด๋ธ์ ์ ์ฅํ๋ ๊ฒ์ ๊ฒ์ ์๋๋ ๋น ๋ฅผ ์ ์์ผ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ ์์ถ์ด๋ ์์ฃผ ์ฐ๋ ๋ฐ์ดํฐ๋ง ๋์คํฌ์ ์ ์ฅํ ์ ์์ต๋๋ค.
๋ถ์ฐ ํค-๊ฐ ์ ์ฅ์
๋ถ์ฐ ํด์ ํ
์ด๋ธ์ ํค-๊ฐ ์ ์์ฒด๋ฅผ ์ฌ๋ฌ ํ
์ด๋ธ์ ๋ถ์ฐ์ํค๋ ๊ฒ์ผ๋ก CAP์ ๋ฆฌ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ผ๊ด์ฑ(Consistency), ๊ฐ์ฉ์ฑ(Availability), ๋ถํ ๋ด์ฑ(Partition tolerance)์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. (1์ฅ CAP ์ฐธ์กฐ)
์ค์ ๋ถ์ฐ ์์คํ
ํ๊ฒฝ์์ ํํฐ์
๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๊ณ 100% ๋ณด์ฅํ ์ ์์์ผ๋ก ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ ์ค ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉด์ ๊ด๊ณผ ์์ ํ ์ ์ ํ ์์คํ
์ ์ค๊ณํด์ผ ํฉ๋๋ค. (์ฆ, CP๋ AP)
๊ตฌํ์ ์ฌ์ฉ๋ ํต์ฌ ์ปดํฌ๋ํธ ๋ฐ ๊ธฐ์ ๋ค
- ๋ฐ์ดํฐ ํํฐ์
- ๋ฐ์ดํฐ ํํฐ์ ์ ์ํด์๋ ์ฌ๋ฌ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐํ ์ ์๋์ง, ๋ ธํธ ์ถ๊ฐ/์ญ์ ์ ๋ฐ์ดํฐ ์ด๋์ ์ต์ํํ ์ ์๋์ง๋ฅผ ๋ฐ์ ธ๋ด์ผ ํฉ๋๋ค. ์์ ํด์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ท๋ชจ ํ์ฅ์ ์๋ํํ ์ ์๊ฒ ๋ง๋ค ์ ์๊ณ , ์๋ฒ ์ฉ๋์ ๋ง๋ ๊ฐ์ ๋ ธ๋๋ก ์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. (5์ฅ. ์์ ํด์ ์ฐธ์กฐ)
- ๋ฐ์ดํฐ ๋ค์คํ
- ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์์ ์ฑ ํ๋ณด๋ฅผ ์ํด์๋ ๋ฐ์ดํฐ๋ฅผ N๊ฐ์ ์๋ฒ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ค์คํํ ํ์๊ฐ ์์ต๋๋ค.
- ๊ฐ์๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํํ N๊ฐ์ ๋ ธ๋๊ฐ ๋์๋ ์ค์ ๋ฌผ๋ฆฌ ์๋ฒ์ ๊ฐ์๊ฐ N๋ณด๋ค ์์์ง ์ ์์ต๋๋ค.
- ๋ฌผ๋ฆฌ ์๋ฒ ์ ํ ์ค๋ณต์ ๋ง๊ณ , ๋ฐ์ดํฐ ์ฌ๋ณธ์ ๋ค๋ฅธ ์๋ฒ์ ๋ณด๊ดํ๋ ๋ฑ ๋ณด์์ด ํ์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ
- ์ฌ๋ฌ ๋
ธ๋์ ๋ค์คํ๋ ๋ฐ์ดํฐ๋ ์ ์ ํ ๋๊ธฐํ๋์ด์ผ ํฉ๋๋ค. ์ ์กฑ์ ํฉ์ ํ๋กํ ์ฝ์ ์ฐ๋ฉด ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฐ์ฐ ๋ชจ๋์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- N = ์ฌ๋ณธ ๊ฐ์
- W = ์ฐ๊ธฐ ์ฐ์ฐ์ ๋ํ ์ ์กฑ์. ์ฐ๊ธฐ ์ฐ์ฐ์ด ์ฑ๊ณตํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ค๋ฉด ์ ์ด๋ W๊ฐ ์๋ฒ๋ก๋ถํฐ ์ฐ๊ธฐ ์ฐ์ฐ์ด ์ฑ๊ณตํ๋ค๋ ์๋ต์ ๋ฐ์์ผ ํฉ๋๋ค.
- R = ์ฝ๊ธฐ ์ฐ์ฐ์ ๋ํ ์ ์กฑ์. ์ฝ๊ธฐ ์ฐ์ฐ์ด ์ฑ๊ณตํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ค๋ฉด ์ ์ด๋ R๊ฐ ์๋ฒ๋ก๋ถํฐ ์ฐ๊ธฐ ์ฐ์ฐ์ด ์ฑ๊ณตํ๋ค๋ ์๋ต์ ๋ฐ์์ผ ํฉ๋๋ค.
- W+R>N์ธ ๊ฒฝ์ฐ์๋ ๊ฐํ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค. ์ผ๊ด์ฑ์ ๋ณด์ฆํ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋
ธ๋๊ฐ ์ต์ ํ๋๋ ๊ฒน์น ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
- R=1, W=N: ๋น ๋ฅธ ์ฝ๊ธฐ ์ฐ์ฐ์ ์ต์ ํ๋ ์์คํ
- W=1, R=N: ๋น ๋ฅธ ์ฝ๊ธฐ ์ฐ์ฐ์ ์ต์ ํ๋ ์์คํ
- W+R>N: ๊ฐํ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋จ
- W+R<=N: ๊ฐํ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋์ง ์์
- ์ฌ๋ฌ ๋
ธ๋์ ๋ค์คํ๋ ๋ฐ์ดํฐ๋ ์ ์ ํ ๋๊ธฐํ๋์ด์ผ ํฉ๋๋ค. ์ ์กฑ์ ํฉ์ ํ๋กํ ์ฝ์ ์ฐ๋ฉด ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฐ์ฐ ๋ชจ๋์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ ๋ชจ๋ธ
- ๊ฐํ ์ผ๊ด์ฑ, ์ฝํ ์ผ๊ด์ฑ, ์ต์ข ์ผ๊ด์ฑ
- ์ต์ข ์ผ๊ด์ฑ์ ์ฝํ ์ผ๊ด์ฑ์ ํ ํํ๋ก ๊ฐฑ์ ๊ฒฐ๊ณผ๊ฐ ๊ฒฐ๊ตญ์๋ ๋ชจ๋ ์ฌ๋ณธ์ ๋ฐ์๋๋ ๋ชจ๋ธ์ ๋๋ค.
- ๋ฐ์ดํฐ ๋ฒ์ ๋
- ๋ฐ์ดํฐ๋ฅผ ๋ค์คํํ๋ฉด ๊ฐ์ฉ์ฑ์ ๋์์ง์ง๋ง ์ฌ๋ณธ ๊ฐ ์ผ๊ด์ฑ์ด ๊นจ์ง ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
- ๋ฒ์ ๋: ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์๋ง๋ค ํด๋น ๋ฐ์ดํฐ์ ์๋ก์ด ๋ฒ์ ์ ๋ง๋๋ ๊ฒ
- ๋ฒกํฐ ์๊ณ:
[์๋ฒ, ๋ฒ์ ]
์ ์์์์ ๋ฐ์ดํฐ์ ๋งค๋จ ๊ฒ- ๋ง์ฝ ๋ ๊ฐ์ ์๋ฒ์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋๊ณ ๊ทธ ๋ฐ์ดํฐ ๊ฐ์ด ๋ค๋ฅด๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
- ๋ฒกํฐ ์๊ณ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ค ๋ฒ์ ์ด ์ ํ์ธ์ง ๋ค๋ฅธ ๋ฒ์ ๊ณผ์ ์ถฉ๋๊ฐ๋ฅ์ฑ์ ํ์ ํ ์ ์์ต๋๋ค.
- ๋จ์ ์ผ๋ก๋ ํด๋ผ์ด์ธํธ ๊ตฌํ์ด ๋ณต์กํด์ง ์ ์๋ค๋ ์ ๊ณผ,
[์๋ฒ, ๋ฒ์ ]
์ ์์์์ด ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ ์ ์๋ค๋ ์ ์ ๋๋ค.
- ์ฅ์ ๊ฐ์ง
- ์๋ฒ๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ ธ๋์ ๋ฉํฐ์บ์คํ ์ฑ๋์ ๊ตฌ์ถํ๊ธฐ๋ณด๋ค๋ ๊ฐ์ญ ํ๋กํ ์ฝ๊ณผ ๊ฐ์ ๋ถ์ฐํ ์ฅ์ ๊ฐ์ง ์๋ฃจ์ ์ ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๊ฐ์ญ ํ๋กํ ์ฝ
- ๊ฐ ๋ ธ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ์ ๋ฐ๋ ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ
- ๋ฌด์์๋ก ์ ์ ๋ ๋ ธ๋๋ค์๊ฒ ์ฃผ๊ธฐ์ ์ผ๋ก ์๊ธฐ ๋ฐ๋ ์นด์ดํฐ ๋ชฉ๋ก์ ๋ณด๋
- ์ด๋ค ๋ฉค๋ฒ์ ๋ฐ๋ ์นด์ดํฐ ๊ฐ์ด ์ง์ ์๊ฐ๋์ ๊ฐฑ์ ๋์ง ์์ผ๋ฉด ์ฅ์ ์ํ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ
- ์ฅ์ ํด์
- ์ผ์์ ์ฅ์ ์ฒ๋ฆฌ
- ๋์จํ ์ ์กฑ์ ์ ๊ทผ๋ฒ์ ๋ฐ๋ผ ๊ฑด๊ฐํ ์๋ฒ๋ค์ ์ ์ ํ๊ณ ์ฅ์ ์ํ ์๋ฒ๋ก ๊ฐ๋ ์์ฒญ์ ์์๋ก ๋ค๋ฅธ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ฒ ํฉ๋๋ค.
- ๋จ์(hint)๋ฅผ ํตํ ์์ ์ํ(hinted handoff)๊ธฐ๋ฒ์ ์ฌ์ฉํด
- ์๊ตฌ ์ฅ์ ์ฒ๋ฆฌ
- ๋ฐ-์ํธ๋กํผ ํ๋กํ ์ฝ์ ์ฌ์ฉํด ์ต์ ๋ฒ์ ์ผ๋ก ๋๊ธฐํ
- ๋จธํด ํธ๋ฆฌ
ํด์ ํฌ๋ฆฌ
๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๋จธํด ํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋์ ๊ทธ ์์ ๋ ธ๋๋ค์ ๋ณด๊ด๋ ๊ฐ์ ํด์ ๋๋ ์์ ๋ ธ๋๋๋ฅด์ด ๋ ์ด๋ธ๋ก๋ถํฐ ๊ณ์ฐ๋ ํด์๊ฐ์ ๋ ์ด๋ธ๋ก ๋ถ์ฌ๋๋ ํธ๋ฆฌ- ๋ฃจํธ ๋ ธ๋์ ํด์๊ฐ์ด ๋ค๋ฅด๋ฉด ์์ ๋ ธ๋์ ํด์๊ฐ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ๋น๊ตํ๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ฒํท์ ์ฐพ์ ๋๊ธฐํํ ์ ์์ต๋๋ค.
- ๋จธํด ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ธฐํํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ ์ค์ ๋ก ์กด์ฌํ๋ ์ฐจ์ด์ ํฌ๊ธฐ์ ๋น๋กํ ๋ฟ, ๋ ์๋ฒ์ ๋ณด๊ด๋ ๋ฐ์ดํฐ์ ์ด๋๊ณผ๋ ๋ฌด๊ดํด์ง๋๋ค.
- ์ผ์์ ์ฅ์ ์ฒ๋ฆฌ
์์คํ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ
- ์ค์ฌ์๋ ํด๋ผ์ด์ธํธ์๊ฒ ํค-๊ฐ ์ ์ฅ์์ ๋ํ ํ๋ฝ์ ์ญํ ์ ํ๋ ๋ ธ๋
- ๋ ธ๋๋ ์์ ํด์์ ํด์ ๋ง์ ๋ถํฌ
- ๋ ธ๋๋ ์๋์ผ๋ก ์ถ๊ฐ ๋๋ ์ญ์ ํ ์ ์๋๋ก ์์คํ ์ ์์ ํ ๋ถ์ฐ
- ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฐ์ ์ฑ ์์ ์ง๋ ํํ
์ฐ๊ธฐ๊ฒฝ๋ก
- ์ฐ๊ธฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์บ์์ ๊ธฐ๋ก
- ๋ฉ๋ชจ๋ฆฌ ์บ์๊ฐ ์๊ณ์น์ ๋๋ฌํ๋ฉด ๋ฐ์ดํฐ๋ ๋์คํฌ์ SSTable(Sorted-String Table)์ ๊ธฐ๋ก
- SSTable: <ํค, ๊ฐ>์ ์์์์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ ํํ๋ก ๊ด๋ฆฌํ๋ ํ ์ด๋ธ
์ฝ๊ธฐ๊ฒฝ๋ก
- ๋ฉ๋ชจ๋ฆฌ ์บ์์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋์คํฌ์ SSTable์์ ๋ธ๋ฃธ ํํฐ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ต๋๋ค.
๋ธ๋ฃธ ํํฐ(Bloom filter)์ ์๋ฆฌ
๋ธ๋ฃธ ํํฐ๋ ์ฌ๋ฌ ๊ฐ์ ํด์ํจ์๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํด์ ๊ฐ์ ๋ง๋ค๊ณ ๋์๋๋ ๋นํธ ๊ฐ๋ค์ ๋ชจ๋ 1๋ก ๋ณ๊ฒฝํ๋ฏ๋ก์จ ๋นํธ ๋ฐฐ์ด์ ์ํ๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ฐ์ด ์๋์ง ํน์ ์์ ์ ์๋์ง๋ฅผ ํ์
ํ๋๋ฐ ๋์์ ์ค๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ๋์คํฌ ๋ฐ์ดํฐ๋ฅผ ํ์
ํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์กฐํํด์ผ ํ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์ถ์์์ผ ์ค๋๋ค.
๋ธ๋ฃธ ํํฐ ์๋ฆฌ์ ์
- ์๋ฅผ ๋ค์ด, ํด์ ํจ์ 1์ โappleโ์ 3, โbananaโ๋ฅผ 7, โorangeโ๋ฅผ 2๋ก ๋งคํํ ์ ์์ต๋๋ค. ํด์ ํจ์ 2๋ โappleโ์ 4, โbananaโ๋ฅผ 2, โorangeโ๋ฅผ 6์ผ๋ก ๋งคํํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ํด์ ํจ์ 3์ โappleโ์ 1, โbananaโ๋ฅผ 5, โorangeโ๋ฅผ 4๋ก ๋งคํํ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฒ ํด์ ํจ์๋ฅผ ํตํด ๋งคํ๋ ๊ฐ ๊ณผ์ผ์ ์ฌ๋ฌ ํด์ ๊ฐ์ ๋์๋๋ ๋นํธ๋ค์ 1๋ก ๋ณ๊ฒฝํ๋ฉด, ๋นํธ ๋ฐฐ์ด์ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.
Index: 1 2 3 4 5 6 7 8
Value: 1 1 1 1 0 1 1 0
๋ชฉํ/๋ฌธ์ | ๊ธฐ์ |
---|---|
๋๊ท๋ชจ ๋ฐ์ดํฐ ์ ์ฅ | ์์ ํด์๋ฅผ ์ฌ์ฉํด ์๋ฒ๋ค์ ๋ถํ ๋ถ์ฐ |
์ฝ๊ธฐ ์ฐ์ฐ์ ๋ํ ๋์ ๊ฐ์ฉ์ฑ ๋ณด์ฅ | ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฐ์ดํฐ์ผํฐ์ ๋ค์คํ |
์ฐ๊ธฐ ์ฐ์ฌ์ ๋ํ ๋์ ๊ฐ์ฉ์ฑ ๋ณด์ฅ | ๋ฒ์ ๋ ๋ฐ ๋ฒกํฐ ์๊ณ๋ฅผ ์ฌ์ฉํ ์ถฉ๋ ํด์ |
๋ฐ์ดํฐ ํํฐ์ | ์์ ํด์ |
์ ์ง์ ๊ท๋ชจ ํ์ฅ | ์์ ํด์ |
๋ค์์ฑ | ์์ ํด์ |
์กฐ์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ | ์ ์กฑ์ ํฉ์ |
์ผ์์ ์ฅ์ ์ฒ๋ฆฌ | ๋์จํ ์ ์กฑ์ ํ๋กํ ์ฝ๊ณผ ๋จ์ ํ ์์ ์ํ |
์๊ตฌ์ ์ฅ์ ์ฒ๋ฆฌ | ๋จธํด ํธ๋ฆฌ |
๋ฐ์ดํฐ ์ผํฐ ์ฅ์ ๋์ | ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์น ๋ฐ์ดํฐ ๋ค์คํ |
7์ฅ. ๋ถ์ฐ์์คํ ์ ์ํ ์ ์ผ ID ์์ฑ๊ธฐ ์ค๊ณ
ID๋ฅผ ์์ฑํ ๋ ์ด๋ป๊ฒ ํด์ผํ ๊น? ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ UUID, auto_increment๋ฅผ ์ด์ฉํด์ ๊ฐํธํ๊ฒ ID๋ฅผ ์์ฑํ์๋๋ฐ ํน์ ์กฐ๊ฑด์ด ์์ ๋ ์ด๋ป๊ฒ ID๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์๊น์ ๋ํด ์ ์ ์์์ต๋๋ค.
1๋จ๊ณ ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
์ ์ผ ID ์์ฑ๊ธฐ๋ฅผ ๋ง๋ค์ด๋ณด๋ผ๊ณ ํ์ ๋ ์ฐ๋ฆฌ๋ ์ด๋ค ๊ฑธ ํ์ธํด์ผ ํ ๊น์?
- ID์ ํน์ฑ
- ์๋ก์ด ID ์์ฑ์ ์ฆ๊ฐ
- ๊ตฌ์ฑ๋ฌธ์ - ์ซ์์ธ์ง ๋ฌธ์์ธ์ง ํผํฉ์ธ์ง
- ์์คํ ๊ท๋ชจ (์ด๋น 10,000 ID ์์ฑ ํ์)
2๋จ๊ณ ๊ณ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
- ๋ค์ค ๋ง์คํฐ ๋ณต์ (multi-master replication)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ auto-increment ๊ธฐ๋ฅ์ ํ์ฉํ๋๋ฐ, ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์๋งํผ ID ๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค.
- ํ์ง๋ง ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
- ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์ณ ๊ท๋ชจ๋ฅผ ๋๋ฆฌ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ID์ ์ ์ผ์ฑ์ ๋ณด์ฅ๋๊ฒ ์ง๋ง ๊ทธ ๊ฐ์ด ์๊ฐ ํ๋ฆ์ ๋ง์ถฐ ์ปค์ง๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋๋ ์ ๋์ํ๋๋ก ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- UUID (Universally Unique Identifier)
- ์ปดํจํฐ ์์คํ ์ ์ ์ฅ๋๋ ์ ๋ณด๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ๊ธฐ ์ํ 128bit ์๋ฆฌ ์
- ์ค๋ณต UUID๊ฐ 1๊ฐ ์๊ธฐ๊ธฐ ์ํด์๋ ์ด๋น 10์ต๊ฐ์ UUID๋ฅผ 100๋ ๋์ ๊ณ์ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
- ๋๊ธฐํ ์ด์๊ฐ ์๊ณ , ๊ท๋ชจ ํ์ฅ์ด ์ฝ์ต๋๋ค.
- ๋์ ID๊ฐ 128๋นํธ๋ก ๊ธธ๊ณ , ์๊ฐ์ ์ ๋ ฌ์ด๋ ์ซ์๋ง์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
- ํฐ์ผ ์๋ฒ
- ํ๋ฆฌ์ปค๋ ๋ถ์ฐ ๊ธฐ๋ณธ ํค๋ฅผ ๋ง๋ค์ด ๋ด๊ธฐ ์ํด ์ด ๊ธฐ์ ์ ์ด์ฉํ์ต๋๋ค.
- auto-increment ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์ค์ ์ง์คํ์ผ๋ก ์ฐ๋ ๋ฐฉ์์ ๋๋ค.
- ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด, ํฐ์ผ ์๋ฒ๊ฐ SPOF(Single-Point-of-Failure)๊ฐ ๋๋ค๋ ๋ฌธ์ ๊ฐ ์๊ณ , ์ฌ๋ฌ ๋๋ก ๋ง๋ค๋ฉด ๋ ๋ฐ์ดํฐ ๋๊ธฐํ ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํธ์ํฐ ์ค๋
ธํ๋ ์ดํฌ ์ ๊ทผ๋ฒ
- ์์ฑํด์ผ ํ๋ ID ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฌ ์ ๋ก ๋ถํ (64๋นํธ ID๋ฅผ ๋ถํ )
- ์ฌ์ธ ๋นํธ: ์ฌ์์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํ 1๋นํธ
- ํ์์คํฌํ: ๊ธฐ์ ์๊ฐ ์ดํ๋ก ๋ช ๋ฐ๋ฆฌ์ด ๊ฒฝ๊ณผํ๋์ง ๋ํ๋ด๋ ๊ฐ
- ๋ฐ์ดํฐ์ผํฐ ID
- ์๋ฒ ID
- ์ผ๋ จ๋ฒํธ
- ์์ฑํด์ผ ํ๋ ID ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฌ ์ ๋ก ๋ถํ (64๋นํธ ID๋ฅผ ๋ถํ )
- ๋ถ์ฐ ํ๊ฒฝ์์ ๊ท๋ชจ ํ์ฅ์ด ๊ฐ๋ฅ
3๋จ๊ณ ์์ธ ์ค๊ณ
2๋จ๊ณ์์ ์ค๋ช
ํ ์ค๋
ธ์ฐํ๋ ์ดํฌ ์ ๊ทผ๋ฒ์ ๋ํด์ ์์ธ์ค๊ณํ๋ ๊ณผ์ ์
๋๋ค. ์ผ๋จ ๋ฐ์ดํฐ์ผํฐ ID์ ์๋ฒ ID๋ ์์คํ
์์์ ๊ฒฐ์ ๋๋ ๋ถ๋ถ์
๋๋ค.
- ํ์์คํฌํ
- 41๋นํธ๋ฅผ ์ฐจ์งํ๊ณ ์๋ ๋ถ๋ถ์ธ๋ฐ ์๊ฐ์ ์ ๋ ฌ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์ด ๋ถ๋ถ์ 10์ง์ํํ๊ณ ํธ์ํฐ ๊ธฐ์ ์๊ฐ(epoch)์ ๋ํ๋ฉด ๋ฐ๋ฆฌ์ด ๊ฐ์ด ๊ณ์ฐ๋๊ณ ์ด๋ฅผ UTC ์๊ฐ์ผ๋ก ๋ณํํ๋ฉด ๊ฐ์ ๊ตฌํ ์ ์์ต๋๋ค.
- 41๋นํธ์ด๋ฏ๋ก ์ต๋๋ก ํํํ ์ ์๋ ๊ฐ์ ๋๋ต 69๋ (219902325551 ๋ฐ๋ฆฌ์ด)์ ํด๋นํฉ๋๋ค.
- ์ผ๋ จ๋ฒํธ
- 12๋นํธ์ด๋ฏ๋ก 4096๊ฐ์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ด๋ค ์๋ฒ๊ฐ ๊ฐ์ ๋ฐ๋ฆฌ์ด ๋์ ํ๋ ์ด์์ ID๋ฅผ ๋ง๋ค์ด๋ธ ๊ฒฝ์ฐ์๋ง 0๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
4๋จ๊ณ ๋ง๋ฌด๋ฆฌ
์ถ๊ฐ๋ก ๋
ผ์ํ ์ ์๋ ๋ถ๋ถ์ ์ด๋ค๊ฒ ์์๊น?
- ์๊ณ ๋๊ธฐํ
- ID ์์ฑ ์๋ฒ๋ค์ด ์ ๋ถ ๊ฐ์ ์๊ณ๋ฅผ ์ฌ์ฉํ์ง ์์ ์ ์๋ค๋ ์
- NTP(Network Time Protocol)์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ๊ฐ ์ ์ ๊ธธ์ด ์ต์ ํ
- ๋์์ฑ์ด ๋ฎ๊ณ ์๋ช ์ด ๊ธด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ จ๋ฒํธ ๊ธธ์ด๋ฅผ ์ค์ด๊ณ ํ์์คํฌํ ์ ์ ๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ด ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
- ๊ณ ๊ฐ์ฉ์ฑ
8์ฅ. URL ๋จ์ถํค ์ค๊ณ
1๋จ๊ณ ๋ฌธ์ ์ดํด ๋ฐ ์ค๊ณ ๋ฒ์ ํ์
- URL ๋จ์ถํค๋ ๊ธด URL์ ์ ๋ ฅํ์ ๋ ๋จ์ถ URL์ ์ ๊ณตํ๊ณ , ๋จ์ถ URL๋ก ์ ๊ทผํ์ ๋๋ ์๋ URL๋ก ๋์๊ฐ ์ ์์ด์ผ ํฉ๋๋ค.
- ํธ๋ํฝ ๊ท๋ชจ
- ๋จ์ถ URL์ ๊ธธ์ด
- ๋จ์ถ URL์ ํฌํจ๋ ๋ฌธ์
- ์ญ์ , ๊ฐฑ์ ์ฌ๋ถ
2๋จ๊ณ ๊ฐ๋ต์ ์ค๊ณ์ ์ ์ ๋ฐ ๋์ ๊ตฌํ๊ธฐ
- API ์๋ํฌ์ธํธ
- URL ๋จ์ถ์ฉ ์๋ํฌ์ธํธ, URL ๋๋ฆฌ๋ ์ ์ฉ ์๋ํฌ์ธํธ
- 301 Permanently Moved
- URL์ ๋ํ HTTP ์์ฒญ์ ์ฒ๋ฆฌ ์ฑ ์์ด ์๊ตฌ์ ์ผ๋ก Location ํค๋์ ๋ฐํ๋ URL๋ก ์ด์ ๋์๋ค๋ ์๋ต์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด ์๋ต์ ์บ์ํด ์ถํ ์์ฒญ์ด ์ค๋ฉด ์๋ URL๋ก ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
- ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
- 302 Found
- ์ผ์์ ์ผ๋ก Location ํค๋๊ฐ ์ง์ ํ๋ URL์ ์ํด ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ์๋ต์ผ๋ก ํญ์ ๋จ์ถ URL ์๋ฒ๋ฅผ ํตํ๊ฒ ๋ฉ๋๋ค.
- URL ๋จ์ถ์ ์ ์ ํ ํด์ํจ์๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
3๋จ๊ณ ์์ธ ์ค๊ณ
๋ฉ๋ชจ๋ฆฌ๋ณด๋ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋จ์ถ URL, ์๋ URL ์์์์ ์ ์ฅํฉ๋๋ค. ๋จ์ถ์ ์ํด์๋ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ํ๋ ๋จ์ถ๊ฐ์ ๊ธธ์ด, ๋ฌธ์ ์ ํ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ฑ
์์๋ ํด์ ํ ์ถฉ๋ ํด์ ์ ๋ต๊ณผ Base-62 ๋ณํ์ ์๊ฐํ๊ณ ์์ต๋๋ค.
- ํด์ ํ ์ถฉ๋ ํด์ ์ ๋ต
- ๋จ์ถ URL ๊ธธ์ด๋ฅผ ๋ ์ค์ด๊ธฐ ์ํด์ ํด์ ๊ฐ์ ์ผ๋ถ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด ์ถฉ๋ํด์๊น์ง ์ฌ์ ์ ์ ํ ๋ฌธ์์ด์ ์ถ๊ฐํด์ ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
- ํ์ง๋ง ๊ฒฐ๊ตญ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ๋ณต์ ์ผ๋ก ์กฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ํฌ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- CRC32, MD5, SHA-1
- base-62 ๋ณํ
- 62์ง๋ฒ์ ์ฐ๋ ์ด์ ๋ hashValue์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ์๊ฐ 62๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๊ณ , 62์ง๋ฒ์ ๋๋จธ์ง์ ๋ฐ๋ผ 62์ง์๋ก ํํํ๋ ๋ฐฉ์์ ๋๋ค.
- ์ด ๊ฒฝ์ฐ ID ์ ์ผ์ฑ ๋ณด์ฅ๋ ํ ์ ์ ์ฉ ๊ฐ๋ฅํ ์ ๋ต์ด๋ผ ์ถฉ๋์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๋์ ๋ค์ ๋จ์ถ URL์ด ๋ฌด์์ธ์ง ์ฝ๊ฒ ์์๋ผ ์ ์๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
4๋จ๊ณ ๋ง๋ฌด๋ฆฌ
์ถ๊ฐ๋ก ๋
ผ์ํ ์ฌํญ๋ค
- ์ฒ๋ฆฌ์จ ์ ํ ์ฅ์น
- ์น ์๋ฒ์ ๊ท๋ชจ ํ์ฅ
- ์น ๊ณ์ธต์ด ๋ฌด์ํ ๊ณ์ธต์ผ๋ก ์ค๊ณ๋์ด ์์ผ๋ฏ๋ก ์์ ๋กญ๊ฒ ์ฆ์ค ์ญ์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ท๋ชจ ํ์ฅ
- ๋ฐ์ดํฐ ๋ถ์ ์๋ฃจ์
- ์ด๋ค ๋งํฌ๋ก์ ์ฌ์ฉ์ ์ ๊ทผ์ด ๋ง์์ง ์ธ์ ํด๋ฆญํ๋์ง ๋ฑ์ ๋ฐ์ดํฐ ๋ถ์ ์๋ฃจ์ ์ ํตํฉํด๋๋ฉด ์ ์ ์์ต๋๋ค.
- ๊ฐ์ฉ์ฑ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ, ์์ ์ฑ