โ C++ : ์ฌ๊ธฐ์ ์น๊ตฌ๋ค์ด ๋น์ ์ private members์ ์ ๊ทผํ ์ ์๋ค. โ
- ์ฝ๋ฉ ๋๋ด

Redis (Remote Dictionary Server)
Redis๋ Remote(์๊ฒฉ)์ ์์นํ๊ณ ํ๋ก์ธ์ค๋ก ์กด์ฌํ๋ In-Memory ๊ธฐ๋ฐ์ Dictionary(key-value) ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ Server ์์คํ ์ด๋ค.
์ฌ๊ธฐ์ key-value ๊ตฌ์กฐ ๋ฐ์ดํฐ๋, mysql ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๊ฐ ์๋ ๋น ๊ด๊ณํ ๊ตฌ์กฐ๋ก์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ์ 'ํค-๊ฐ' ํํ๋ก ๋จ์ํ๊ฒ ์ ์ฅํ๋ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
๊ทธ๋์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ด ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ง์ํ์ง ์์ง๋ง, ๋์ ๋ฐ์ดํฐ์ ๊ณ ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ์ ์ต์ ํ ๋์ด ์๋ค.
๊ทธ๋์ Redis๋ ์ผ์ข ์ NoSQL ๋ก ๋ถ๋ฅ๋๊ธฐ๋ ํ๋ค.

NoSQL์ Not Only SQL์ ์ฝ์๋ก์จ ๊ธฐ์กด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)๋ณด๋ค ๋ ์ตํต์ฑ ์๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ ๋ฐ์ดํฐ์ ์ ์ฅ ๋ฐ ๊ฒ์์ ์ํ ํนํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ์ ์ฅ๊ธฐ์ ์ ์๋ฏธํ๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋จ์ ๊ฒ์ ๋ฐ ์ถ๊ฐ ์์ ์ ์์ด์ ๋งค์ฐ ์ต์ ํ๋ ํค-๊ฐ ์ ์ฅ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์๋ต์๋๋ ์ฒ๋ฆฌ ํจ์จ ๋ฑ์ ์์ด์ ๋งค์ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค.
๋ํ Redis๋ ์ธ ๋ฉ๋ชจ๋ฆฌ(In-Memory) ์๋ฃจ์ ์ผ๋ก๋ ๋ถ๋ฅ๋๊ธฐ๋ ํ๋๋ฐ, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ง์ํจ์ผ๋ก์จ DB, Cache, Message Queue, Shared Memory ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์๋ค.
์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ด ๋์คํฌ(ssd)์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๊ตฌ์กฐ๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ(dram)์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์ ์๋๊ฐ ์๋นํ ๋น ๋ฅด๋ค.

๋ฉ๋ชจ๋ฆฌ | RAM | CPU์์ ์ด๋ฃจ์ด์ง ์ฐ์ฐ์ ๊ธฐ๋กํ๋ ๋ฉ๋ชจ๋ฆฌ CPU์ ํ๋๋์คํฌ๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ฅ์น |
์ธ๋ถ ์ ์ฅ ์ฅ์น | HDD, SDD | ์ปดํจํฐ์ ์ ๋ณด, ๋ฌธ์, ์๋ฃ ๋ฑ์ ์ ์ฅํ๊ณ ์ฝ์ ์ ์๋ ์ฅ์น |
์ธ๋ถ ์ ์ฅ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ธ๋ถ ์ ์ฅ ์ฅ์น์์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๊ฒ ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ ์ฅ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
๋ง์ง๋ง์ผ๋ก Redis๊ฐ ์ธ๊ธฐ ์๋ ์ด์ ๋ Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go๋ฅผ ๋น๋กฏํ ์ ๋ง ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ํ๋ ์์ํฌ์ ๋ํ API๋ฅผ ํญ๋๊ฒ ์ง์ํ๊ธฐ ๋๋ฌธ์ด๋ค. (์ฐธ๊ณ : http://www.redis.io/clients )
Redis ํ์ ๋ฐฐ๊ฒฝ์๋ Salvatore Sanfilippo๋ผ๋ ์ดํ๋ฆฌ์ ํด์ปค๊ฐ
MySQL๋ก ์ด๋ค ์ดํ์ ๊ฐ๋ฐํ๋ค๊ฐ ๋๋ คํฐ์ก๋ค๊ณ ์๊ฐํด ์ง์ ๋น ๋ฅธ ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๊ณ ,
๊ทธ ๊ฒฐ๊ณผ Redis๋ฅผ ๊ฐ๋ฐํ๊ฒ ๋์๋ค๋ ๋นํ์ธ๋ ์คํ ๋ฆฌ๊ฐ ์๋ค.
์ง๊ธ๊น์ง์ Redis์ ๋ํ ํน์ง์ ์ด๊ฑฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- NoSql DBMS(๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ก ๋ถ๋ฅ๋๋ฉฐ In memory ๊ธฐ๋ฐ์ Key - Value ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด๋ผ ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์กฐํ์ ๋งค์ฐ ๋น ๋ฅด๋ค. (๋ฆฌ์คํธํ ๋ฐ์ดํฐ ์ ๋ ฅ๊ณผ ์ญ์ ๊ฐ MySQL์ ๋นํด์ 10๋ฐฐ์ ๋ ๋น ๋ฆ)
- ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ฉด์ ์๋น์ค์ ์ํฉ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, Cache๋ก๋ ์ฌ์ฉ๋ ์ ์๋ค.
- Remote Data Storage๋ก ์ฌ๋ฌ ์๋ฒ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ๋ณด๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
- ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ๋ฅผ ์ง์ํ๋ค. (Strings, Set, Sorted-Set, Hashes, List ...)
- ์ฐ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ธก ์ค๋ฉ(Sharding)์ ์ง์ํ๋ค.
- Sharding : ๊ฐ์ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ(row)๋ฅผ ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด์ง๋ง Redis๋ ์์์ ์ธ ๋ฐ์ดํฐ ๋ณด์กด(Persistence)์ด ๊ฐ๋ฅํ๋ค. (๋ฉ๋ชจ๋ฆฌ๋ ์๋ ํ๋ฐ์ฑ)
- ์ค๋ ์ท ๊ธฐ๋ฅ์ ์ ๊ณตํด ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ *.rdb ํ์ผ๋ก ์ ์ฅํ์ฌ ํด๋น ์์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ค.
- ์ฌ๋ฌ ํ๋ก์ธ์ค์์ ๋์์ ๊ฐ์ key์ ๋ํ ๊ฐฑ์ ์ ์์ฒญํ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ๋ถ์ ํฉ ๋ฐฉ์ง Atomic ์ฒ๋ฆฌ ํจ์๋ฅผ ์ ๊ณตํ๋ค(์์์ฑ)
- Redis๋ ๊ธฐ๋ณธ์ ์ผ๋ก 1๊ฐ์ ์ฑ๊ธ ์ฐ๋ ๋๋ก ์ํ๋๊ธฐ ๋๋ฌธ์, ์์ ์ ์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ธฐ์ํด์๋ Replication(Master-Slave ๊ตฌ์กฐ) ํ์์ด๋ค.
Redis ํ์ฉํ๊ธฐ - ์บ์(Cache)
์บ์ฌ(Cache) ๋?
Cache๋ ํ๋ฒ ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ํน์ ๊ณต๊ฐ์ ์ ์ฅํด๋๊ณ , ๋๊ฐ์ ์์ฒญ์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ์๋ฒ์๊ฒ ๋ค์ ์์ฒญํ์ง ๋ง๊ณ ์ ์ฅํด๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, ๋ฏธ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ๋์ค์ ์์ฒญ์ด ์ค๋ฉด ๊ทธ ์์ฒญ์ ๋ํด์ DB ๋๋ API๋ฅผ ์ฐธ์กฐํ์ง ์๊ณ Cache๋ฅผ ์ ๊ทผํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
์๋น์ค๋ฅผ ์ฒ์ ์ด์ํ ๋๋ WEB-WAS-DB ์ ๋๋ก ์๊ฒ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋๋ฐ, ์ฌ์ฉ์๊ฐ ๋์ด๋๋ฉด DB์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ๊ธฐ ์์ํ๋ค.
DB๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌผ๋ฆฌ ๋์คํฌ์ ์ง์ ์ฐ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง๋ ์์ง๋ง, ๋งค ํธ๋์ญ์ ๋ง๋ค ๋์คํฌ์ ์ ๊ทผํด์ผํ๋ฏ๋ก ๋ถํ๊ฐ ๋ง์์ง๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
๊ทธ๋์ ์ฌ์ฉ์๊ฐ ๋์ด๋๋ฉด DB๋ฅผ ์ค์ผ์ผ ์ธ ๋๋ ์ค์ผ์ผ ์์ํ๋ ๋ฐฉ์ ์ธ์๋ ์บ์ ์๋ฒ๋ฅผ ๊ฒํ ํ๊ฒ ๋๋ค.
Redis Cache ๋ ๋ฉ๋ชจ๋ฆฌ ๋จ (In-Memory) ์ ์์นํ๋ค. ๋ฐ๋ผ์ ์ฉ๋์ ์ ์ง๋ง ์ ๊ทผ ์๋๊ฐ ๋น ๋ฅด๋ค.
๋ค๋ง ์ ์ฅํ๋ ค๋ ๋ฐ์ดํฐ ์ ์ด ์ฃผ์ด์ง ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ฉด ๋์คํฌ๋ฅผ ์ฐ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ ํ์ด๋ค.
์บ์์ ๊ตฌ์กฐ ํจํด
Look aside Cache ํจํด
์บ์๋ฅผ ์ฌ์ฉํ๋ ํจํด์ ์ฒซ ๋ฒ์งธ๋ก Look aside Cache ํจํด์ด๋ค.
์์์ ๋งํ ์ผ๋ฐ์ ์ธ ์บ์ ์ ์๋ฅผ ๊ทธ๋๋ก ๊ตฌํํ ๊ตฌ์กฐ์ด๋ค.
look aside cache๋ ์บ์๋ฅผ ํ ๋ฒ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ๋จํ ํ, ์๋ค๋ฉด ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉด ์ค์ DB ๋๋ API๋ฅผ ํธ์ถํ๋ค.
[Look aside Cache ์ฟผ๋ฆฌ ์์]
- ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ ์์ฒญ
- ์๋ฒ์์ ์บ์์ ๋ฐ์ดํฐ ์กด์ฌ ์ ๋ฌด ํ์ธ
- ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์บ์์ ๋ฐ์ดํฐ ์ฌ์ฉ (๋น ๋ฅธ ์กฐํ)
- ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ค์ DB ๋ฐ์ดํฐ์ ์ ๊ทผ
- ๊ทธ๋ฆฌ๊ณ DB์์ ๊ฐ์ ธ ์จ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ๋ฐํ

Cache Miss : ๋ฉ๋ชจ๋ฆฌ์ ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์์ด์ ๋์คํฌ์ ์กฐํ ํ ๋
Cache Hit : ๋ฉ๋ชจ๋ฆฌ์ ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋
Write Back ํจํด
write back์ ์ฃผ๋ก ์ฐ๊ธฐ ์์ ์ด ๊ต์ฅํ ๋ง์์, INSERT ์ฟผ๋ฆฌ๋ฅผ ์ผ์ผ์ด ๋ ๋ฆฌ์ง ์๊ณ ํ๊บผ๋ฒ์ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด ์์ด ๋ฃ๊ธฐ ํ๊ฐ๋ฅผ ์จ๋ผ์ธ์ผ๋ก ์งํํ๋ ์๋น์ค๊ฐ ์์ ๋, ์ฌ๋ฌ ํ์์ด ๋์์ ์ ์ถ ๋ฒํผ์ ๋๋ฅด๋ฉด์ DB์ ๊ฐ์์ค๋ฝ๊ฒ ์์ฒญ๋ ์ฐ๊ธฐ ์์ฒญ์ด ๋ชฐ๋ฆฌ๊ฒ ๋๋ฉด DB ์๋ฒ๊ฐ ์ฃฝ์ ์๋ ์๋ค.
์ด๋ write back ๊ธฐ๋ฐ์ ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋๊ณ , ์ดํ DB ๋์คํฌ์ ์ ๋ฐ์ดํธ ํด ์ฃผ๋ฉด ์์ ํ๊ฒ ์ฐ๊ธฐ ์์ ์ ์ดํํ ์ ์๋ ๊ฒ์ด๋ค.
์ฆ, insert ๋ฅผ 1๊ฐ์ฉ 500๋ฒ ์ํํ๋ ๊ฒ๋ณด๋ค 500๊ฐ๋ฅผ ํ๋ฒ์ ์ฝ์ ํ๋ ๋์์ด ํจ์ฌ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ write back ๋ฐฉ์์ ๋น ๋ฅธ ์๋๋ก ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋จ์ ๋ ์๋ค.
DB์์ ๋์คํฌ๋ฅผ ์ ๊ทผํ๋ ํ์๊ฐ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์์ง๋ง, DB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ ์ ์บ์ ์๋ฒ๊ฐ ์ฃฝ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
๊ทธ๋์ ๋ค์ ์ฌ์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋, ๊ทน๋จ์ ์ผ๋ก heavy ํ ๋ฐ์ดํฐ์์ write back ๋ฐฉ์์ ๋ง์ด ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค๋ฉด ๋ก๊ทธ๋ฅผ ์บ์์ ์ ์ฅํ๊ณ ํน์ ์์ ์ DB ์ ํ๋ฒ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
[write back ์ฟผ๋ฆฌ ์์]
- ์ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์น ์ ์ฅ
- ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค DB์ ํ๊บผ๋ฒ์ ์ ์ฅ (๋ฐฐ์น)
- ๊ทธ๋ฆฌ๊ณ ๋์ DB์ ์ ์ฅํ์ผ๋ ์์กด ๋ฐ์ดํฐ๋ฅผ ์บ์์์ ์ ๊ฑฐ

Redis ์บ์์ ํ์ฉ ์ฌ๋ก
Twitter๋ 140์ ์ ๋์ ์งง์ ๊ธ์ ์ฌ๋ฆด ์ ์๋ ์์ ๋คํธ์ํน ์๋น์ค(SNS)์ด๋ค.
Twitter์์์ Timeline์ ์ฌ์ฉ์๊ฐ Follow(๊ตฌ๋ )ํ๋ ์ฌ์ฉ์๋ค์ ์ต๊ทผ ํธ์์ ํ์ธํ ์ ์๋ ํ์ด์ง์ด๋ค.
2012๋ ๋น์ Twitter๋ 15๋ง๋ช ์ด ๋๋ ์ค์๊ฐ ํ๋ ์ฌ์ฉ์์ ์ด๋น 30๋ง ๊ฑด์ด ๋๋ Timeline ์์ฒญ์ด ๋ฐ์ํ์๋ค.
์ด๋ฌํ ๊ท๋ชจ์ Timeline ์์ฒญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ๊ทผํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉด Query๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์๋๊ฐ ํ์ ํ ๋จ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Twitter๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ NoSQL ๊ธฐ์ ์ธ Redis๋ฅผ ์ฌ์ฉํ์๋ค๊ณ ํ๋ค.
Twitter์ ๋ฐ์ดํฐ ์ผํฐ์ ์กด์ฌํ๋ ๋ฐฉ๋ํ ์์ Redis Cluster๋ ๊ฐ ์ฌ์ฉ์์ Timeline์ ๋ ธ์ถ๋ Tweet์ ์ ๋ณด(Tweet ID, ์์ฑ์ ID)๋ฅผ List ํํ๋ก ์ฝ 800๊ฐ ์ ๋ ์บ์ฑํ๋ค.
๋ฐ์ํ๋ Timeline ์์ฒญ์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ๊ทผํ์ง ์๊ณ Redis์ ์บ์ฑ๋ Timeline ์ ๋ณด๋ฅผ ๋จผ์ ๊ฐ์ ธ์์, ์ด๋ฅผ ํ ๋๋ก Query๋ฅผ ๋จ์ํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ์ฒ๋ฆฌํ๋ค.

๋จ, ๋ชจ๋ ์ฌ์ฉ์์ Timeline์ ์บ์ฑํ๊ฒ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง ์ ์์ผ๋ฏ๋ก, ๋ก๊ทธ์ธ์ ์ํ ์ง 30์ผ์ด ์ง๋ ์ฌ์ฉ์์ Timeline์ Redis Cluster์์ ์ญ์ ํ๋๋ก ์ค์ ํ๋ค.
Redis Cluster์์ ์ญ์ ๋ ์ฌ์ฉ์์ Timeline ์ ๋ณด๋ ํด๋น ์ฌ์ฉ์๊ฐ ๋ค์ ๋ก๊ทธ์ธ์ ํ ์์ ์ฌ์์ฑ ํ๊ฒ ํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ๊ทผํ๋ ๊ณผ์ ์ด ํ์ํ๊ธฐ์ ์๊ฐ์ด ๋ค์ ์์๋ ์๋ ์๋ค.
์ด์ธ์๋ Redis๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ณณ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ธ์ฆ ํ ํฐ ๋ฑ์ ์ ์ฅ(Strings or Hash)
- Ranking ๋ณด๋๋ก ์ฌ์ฉ(Sorted-Set)
- ์ ์ API Limit
- ์กํ(list)
์ด์ฒ๋ผ, Redis๋ ํนํ Remote Dictionary๋ก์ RDBMS์ ์บ์ ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉ ์ฉ๋๊ฐ ๊ต์ฅํ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ์ฅ์ฅ์น์ ์ ์ฅ์ด ๋๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ๋ ค๋ฉด ์ ์ฅ์ฅ์น๋ก i/o๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
RDBMS์์ SELECT ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ค ํน์ ๋ฐ์ดํฐ๋ค์ FETCHํ์ ๋, RDBMS์ ๊ตฌ์กฐ์ DISK์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๋ ๋ฐ Memory์์ ์ฝ์ด๋ค์ด๋ ๊ฒ๋ณด๋ค ์ฒ๋ฐฐ ๊ฐ๋ ๋ ๋๋ฆฌ๋ค.
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ 10,000๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ฝ๋๋ค๊ณ ๊ฐ์ ํ์ ๋ disk์ ์ ์ฅ๋์ด ์๋ค๋ฉด ์ฝ 30์ด์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฐ๋ฉด RAM์์ ์ฝ์ ๊ฒฝ์ฐ์ ์ฝ 0.0002์ด ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค.

๋ฐ๋ผ์ Redis๊ฐ์ ์ ์ฐํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์ธ๋ฉ๋ชจ๋ฆฌ Key-value ์๋ฃจ์ ์ ์ฌ์ฉํ์ฌ DB ๋ถํ์ Read ์ฐ์ฐ์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๋ ๋ฐ ์ ์ฉํ๋ค.
์บ์๋ in-memory ๋ฐฉ์์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํด๋๊ธฐ ๋๋ฌธ์ ์ ์ฅ์ฅ์น์ i/o๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋ค.
๊ทธ๋์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ์บ์ ์๋ฒ์์ ์ฐ์ ์กฐํํ๊ณ ์์ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์ ์กฐํํ๋ ๋ฐฉ์์ ํ์ฉํ๋ฉด ์ ์ฒด์ ์ธ ์๋น์ค์ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ค.
๋, ํ๋ํ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฌธ์ด ๊ธธ๊ณ ๋ณต์กํด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐํํ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋๋ฐ, ๋ง์ผ ์ด ์ฟผ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํด๋น ์ฟผ๋ฆฌ๊ฐ ์ ์ฒด ์๋น์ค ์๋์ ๋ณ๋ชฉ์ด ๋ ์ ์๋ค.
๊ทธ๋ด๋๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์์ฒด๋ฅผ Redis๋ก ์บ์ฑ์ ํด๋๊ณ , ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ ์ ์๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์บ์์ ์ ์ฌ๋ฅผ ์๋กํ๋ค๋ฉด ์ ์ฒด ์๋น์ค ์๋๋ฅผ ํฅ์ ์ํฌ ์๋ ์๋ค.
๊ทธ๋์ ์บ์ฑ์ด ํ์ํ ๋ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ ์ฆ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ๋ ๋๋, ์ฅ๋ฐ๊ตฌ๋์ ์ญ์ ์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ง์ด ์ฌ์ฉํ๋ ํธ์ด๋ค.
๋ํ RAM์ ํ๋ฐ์ฑ์ธ๋ฐ ๊ทธ๋ผ ์คํ์ค์ธ Redis๋ฅผ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ๋ถ ๋ ๋ผ๊ฐ๋ค๊ณ ์๊ฐ์ด ๋ค๊ฒ ๋๋๋ฐ, Redis๋ in-memory ์ด์ง๋ง persistent on-disk ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐ๋ ํ๋ค.
Redis๋ ํน์ ํ ๋์ ํ์ฌ๊น์ง์ in-memory ์ํ๋ฅผ disk์ ์ ์ฅํด ๋์๋ค๊ฐ Redis๋ฅผ ๋ค์ ์์ํ์ ๋ disk์ ์ ์ฅํด ๋์๋ dump ํ์ผ๋ค์ load ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์์ค ๋ฐ์์ ๋ฐฉ์งํ ์๋ ์๋ค.
Redis ํ์ฉํ๊ธฐ - ์ธ์ ์คํ ์ด(Session Store)
์๋ฒ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๊ฒฝ์์์ ์ธ์ ๋ถ์ผ์น
๋ณดํต ์ค๋ฌด์์๋ ํธ๋ํฝ ๋ถํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ก๋๋ฐธ๋ฐ์์ ์๋ฒ๋ฅผ ์ฌ๋ฌ๋ ์ด์ํ๋ค.
๊ทธ๋ฌ๋ ์๋ฒ๋ฅผ ์ฌ๋ฌ๋๋ฅผ ์ด์ํ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์ ์ธ์ ์ด ์๋ก ์๋ฒ๋ง๋ค ๋ฌ๋ผ ์๋น์ค ์ด์ฉ์ ์ง์ฅ์ ์ค ์ ์๋ค๋ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ธ์ ๋ถ์ผ์น ๋ฌธ์ ์ ํด๊ฒฐ๋ฐฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ์ ์ ๋ฆฌ๋ ํฌ์คํ ์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
[WEB] ๐ ์ธ์ (Session) ๋ถ์ผ์น ๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๋ฒ ๋ค์คํ ํ๊ฒฝ์์์ ์ธ์ ๋ถ์ผ์น ๋จ์ผ ์๋ฒ ํ๊ฒฝ์์๋ session์ ํตํ ๋ก๊ทธ์ธ์ ๊ตฌํํ ๋ session ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๋ค. ํ์ง๋ง ์๋น์ค๊ฐ ์ปค์ง์ ๋ฐ๋ผ ํ๋์ ์๋ฒ๋ก ์ด์ํ๋๊ฒ
inpa.tistory.com
In-memory DB vs Disk based DB
๋ณ๋์ ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌ์ฑํ์ฌ ์ธ์ ์ ์ ํฉ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ ๋, Session storage๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ด์์ ์ด๋ค.
๊ทธ๋ผ ์ธ์ ์คํ ๋ฆฌ์ง๋ก์ ์ ํฉํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ๋ฌด์์ผ๊น?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ์ด๋ ๊ณต๊ฐ์ ์ ์ฅ์ด ๋๋๊ฐ์ ๋ฐ๋ผ์ In-memory DB์ Disk based DB๋ก ๋ถ๋ฅ๋๋ค.
์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๊ณ , ํ์๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ค.

in-memory DB | ๋ฉ๋ชจ๋ฆฌ(RAM) | ์๋๋ ๋น ๋ฅด์ง๋ง ์์์ฑ์ ๋ณด์ฅํ์ง ์๊ณ (๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ), ์ ์ฅ ๊ณต๊ฐ์ด ํ์ ๋์ด ์์ |
disk-based DB | ์ธ๋ถ ์ ์ฅ ์ฅ์น(๋์คํฌ) | ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆผ |
์ฐ๋ฆฌ๊ฐ ๋ง๋ ์น ์๋น์ค๋ฅผ ์ด์ฉํ ๋ ๋น์ธ๊ฐ ์ฌ์ฉ์์ ์ธ๊ฐ๋ ์ฌ์ฉ์ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ ์์ฒญ๋ ์กด์ฌํ๊ณ , ์ธ๊ฐ๋ ์ฌ์ฉ์(๋ก๊ทธ์ธ ์ธ์ ์ด ์กด์ฌํ๋ ์ฌ์ฉ์)๋ง์ด ์ ๊ทผํ ์ ์๋ ์์ฒญ๋ ์กด์ฌํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ธ๊ฐ๋ ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๋ ์์ฒญ์ ์ฒ๋ฆฌํ ๋๋ง๋ค ๋งค๋ฒ ์ธ์ ์ ์ฅ์์์ ํด๋น ๋ก๊ทธ์ธ ์ธ์ ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ์์ ์ ์งํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ๋น ๋ฅด๊ฒ ์ธ์ ์ ๋ณด๋ฅผ ์ฐพ์์ ์ ๊ณตํด์ผ ํ๋ค.
Disk based DB๋ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ํ์ด์ง ๋จ์๋ก ๋ฒํผ๋ก ์ ์กํ๋ ์๊ฐ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ I/O ์์ ์ฒ๋ฆฌ์ ์์ด์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ธ์ ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ์์ ์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํด์ผ ํ๋ ์๋น์ค์์ ์ธ์ ์คํ ๋ฆฌ์ง๋ก Disk based DB๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์์ ์ฌ๋ฐ๋ฅธ ์ ํ์ด ์๋๋ผ๊ณ ์๊ฐ๋๋ค.
๋ฐ๋ฉด, In-memory DB ๋ ์ ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ Disk I/O ์์ ์ด ๋ฐ์ํ ์ผ์ด ์๋ค. ๋ฐ๋ผ์ ๋์คํฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ๋ณ๋ชฉ ํ์์ ํผํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ์ ์ HTTP์ ๋น์ฐ๊ฒฐ ์งํฅ๊ณผ ์ํ์์(stateless)๊ณผ ๊ฐ์ ํน์ฑ์ ๋ณด์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ธ์ ์๋ ์ฃผ๋ก ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋๋ฐ, ์ด ์ ๋ณด๋ ์์ํ ์ ์ฅ๋์ด์ผ ํ๋ ์ ๋ณด๊ฐ ์๋๋ค.
๊ฑฐ๊ธฐ๋ค ์ธ์ ์ ๋ฐ์ดํฐ ์ ์ค๋ก ์ธํด ๋ฐ์ํ๋ ํผํด๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋นํด ์ ๋ค. ๊ทน๋จ์ ์ธ ์๋ก ์ธ์ ์ ์ฅ์์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋ค๋ฉด ์ฌ์ฉ์๋ ์ฌ ๋ก๊ทธ์ธ๋ง ์งํํ๋ฉด ๋๋ค.
๊ทธ๋์ ์ธ์ ์คํ ๋ฆฌ์ง๋ก In-memory DB์ ์ฌ์ฉ์ด ์ ์ ํ๋ค.

๋ํ ๋ช ๋ช In-memory DB๋ ์ธ์ ์คํ ๋ฆฌ์ง ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ค๋ฅธ ์ธ์ ์คํ ๋ฆฌ์ง์ ๋ณต์ฌํ๋ [๋ง์คํฐ-์ฌ๋ ์ด๋ธ] ๋ณต์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฑฐ๋ 'Consistent Hashing' ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๊ธฐ๋ ํ๋ค.
Redis vs Memcached
์์ ์ฐ๋ฆฌ๋ ์ธ์ ์ ์ ์ฅํ๋๋ฐ ์์ด, In-memory DB๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
๊ฐ์ Relation Database๋ผ๋ MySQL, MSSQL, Oracle ๋ฑ์ ์ข
๋ฅ๊ฐ ์๋ฏ์ด, In-memory DB์๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ด ์กด์ฌํ๋ค.
๊ทธ ์ค์์๋ ์ธ์
์ ์ฅ์๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋๋น๋ก๋ Redis ์ Memcached ๊ฐ ์๋ค.
๋ ๊ฐ์ ๊ณตํต์ ์ผ๋ก๋ In Memory ์ ์ฅ์ ๋ผ๋ ์ ๊ณผ Key-value ์ ์ ์ฅ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ค์ ํน์ง์, ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฌด๋ฃ ์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐ ๋๋ฌธ์ ๋ผ์ด์ผ์ค ๋น์ฉ์ด ๋ํญ ์ ์ฝ๋๋ค.
- sub-milisecond ๋จ์์ ๋์ ์๋ต ์๋๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๋์ฉ๋ ํธ๋ํฝ์ ๊ณ ๋ คํ๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์ ์ ํ๋ค.
- Key-Value ํํ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ Key-Value ๋ก ์ ์ฅ๋๋ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ ํฉํ๋ค.
๊ทธ๋ผ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฉด์, ์ธ์ ์ ์ ์ฅํ๋๋ฐ ์ ํฉํ key-value ํํ๋ก ๊ด๋ฆฌ๋๊ณ ์๋๋ ๋น ๋ฅธ ์ด ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?

Redis / Memcached ๋น๊ต
Redis | Memcached | |
์ฝ์ด | ์ฑ๊ธ ์ฝ์ด | ๋ฉํฐ ์ฝ์ด |
์๋ฃ๊ตฌ์กฐ | Strings, Set,, Sorted-Set, Hashes ๋ฑ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ์ง์ | Strings, Intergers๋ง ์ง์ |
๋ฐ์ดํฐ ์ ์ฅ | Memory, Disk | Memory |
์๋ | ์ฝ๊ธฐ, ์ฐ๊ธฐ ์๋๊ฐ Memcached๋ณด๋ค ๋๋ฆผ ํ์ง๋ง ํฐ ์ฐจ์ด๋ ์์ |
๋์คํฌ๋ฅผ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ ์๋๊ฐ Redis๋ณด๋ค ๋น ๋ฆ |
๋ณต์ | Master-Slave, Multi-Master Replication ๋ฐฉ์ ์ง์ | ์ง์ X |
๋ด๊ตฌ์ฑ | Memcached๋ณด๋ค ๋ด๊ตฌ์ฑ์ด ๋ฐ์ด๋จ | Redis๋ณด๋ค ๋ด๊ตฌ์ฑ์ด ๋จ์ด์ง |
์์์ฑ | ์์์ฑ ๋ฐ์ดํฐ ์ฌ์ฉ | ์ง์ X |
ํ์ด์ ๋ ๋ฐฉ๋ฒ | ์ค๋ฉ ์ง์ | ์ง์ X |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ | ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ์ง ์์, ๋ช ์์ ์ผ๋ก๋ง ๋ฐ์ดํฐ ์ ๊ฑฐ ๊ฐ๋ฅ | ์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉ. ๋ง๋ฃ์ ์ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด LRU ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ญ์ |
๋ง๋ฃ์ผ ์ง์ ๋ฐฉ์ | ๋ง๋ฃ์ผ์ ์ง์ ํ๋ฉด ๋ง๋ฃ๋ ๋ฐ์ดํฐ๋ ์บ์์ฒ๋ผ ์ฌ๋ผ์ง | ๋์ผ |




ํด๋น ํ์์ ๋ณผ ์ ์๋ฏ์ด Memcached์ ๊ฒฝ์ฐ Write ์ฐ์ฐ์ ์์ด์, Redis ๋ณด๋ค ์ข์ ์ฑ๋ฅ์ ๋ณด์์ ์ ์ ์๋ค.
ํ์ง๋ง, Read ์ฐ์ฐ์ ์์ด์๋ Redis๊ฐ ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
์ด๋ฅผ ๋น๊ตํด๋ณด์์ ๋, Redis๊ฐ ์ธ์ ์ ์ ์ฅํ๋ ๋ฐ ๋ ์ ํฉํ๋ค๋ ์ ์ ์ ์ ์๋ค.
์ธ์ ๊ด๋ จ ์์ ์ ๊ฒฝ์ฐ, ์ฐ๊ธฐ ์ฐ์ฐ๋ณด๋ค๋ ์ฝ๊ธฐ ์ฐ์ฐ์ด ์๋์ ์ผ๋ก ๋์ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ง๋ง์ผ๋ก Redis๊ฐ Read/Write์ ์์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๊ทธ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉํ ๊ฒฐ๊ณผ, ์ฐ๊ธฐ ์ฑ๋ฅ์์๋ Memcached๊ฐ ์์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ๊ณผ ์ฒ๋ฆฌ์๋, ๊ทธ๋ฆฌ๊ณ ์ด์ธ์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ์ง์๊ณผ ์ํคํ ์ณ ์ง์์ ๋ชจ๋ ๊ณ ๋ คํ๋ค๋ฉด Redis๊ฐ ์๋์ ์ผ๋ก ๋ ๋์ ์ ํ์์ ์ ์ ์๋ค.
Redis / Memcached ์ํฉ์ ๋ฐ๋ฅธ ์ ํ
MemCached
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ญ์ ๋์ด๋ ์๋ณธ ๋ฐ์ดํฐ๋ก ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ฅ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ
- ๋จ์ ์กฐํ๋ก ํต์ ์๋๋ง์ ํฅ์์ํค๋ ๋ชฉ์ ์ธ ๊ฒฝ์ฐ
Redis
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ญ์ ๋์์ ๋ ์๋น์ค ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒฝ์ฐ
- ์๋น์ค์ ํน์ ๊ธฐ๋ฅ์ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ( ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ํ์ฉํด์ ์ฌ์ฉํ ๋ ๋ฑ )
Redis์ ๋ฌธ์ ์ (์ฃผ์ํด์ผ ํ ์ )
๊ทธ๋ฌ๋ Redis์๋ ์ค๊ณ ๊ตฌ์กฐ์ ๋จ์ ์ด ์กด์ฌํ๋ค.
์๊ฐ ๋ณต์ก๋
๋ ๋์ค๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ด ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๋ค.
๊ทธ๋์ ํ ๋ฒ์ ๋ฑ ํ๋์ ๋ช ๋ น์ด๋ง ์คํํ๊ธฐ ๋๋ฌธ์, ๊ธด ์ฒ๋ฆฌ์๊ฐ์ด ํ์ํ ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด ๋ถ๋ฆฌํ๊ณ ์์ฒญ ๊ฑด์ ์ฒ๋ฆฌํ๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์๋น์ค ์์ฒญ์ ๋ฐ์๋ค์ผ์ ์๊ณ ์๋ฒ๊ฐ ๋ค์ด ๋๋ ํ์์ด ์ผ์ด ๋ ์ ์๋ค.
๋ฐ๋ผ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง O(N) ๋ช
๋ น์ด keys flush getall ๋ ์ฃผ์ํด์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.

๋ํ์ ์ธ O(N) ๋ช ๋ น ๋ฐ ์ฌ๋ก
- KEYS, FLUSHALL, FLUSHDB, Delete COlLECTIONS, Get All Collections
- ๋ชจ๋ํฐ๋ง ์คํฌ๋ฆฝํธ๊ฐ ์ผ์ด์ ํ๋ฒ์ฉ keys ํธ์ถ
- ํฐ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ
-- Access Token ์ ์ฅ์ List(O(N)) ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง -> ์ญ์ ์์ ๋ชจ๋ item์ ์ฐพ์๋ด์ผํจ, ์ต๊ทผ์๋ Set์ ํตํด ๊ฐ์ ธ์ค๋๋ก ํจ์น๋จ
- keys๋ scan ๋ช ๋ น์ด๋ก ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ํ๋์ ๊ธด๋ช ๋ น์ ์งง์ ์ฌ๋ฌ ๋ช ๋ น์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
๋ฉ๋ชจ๋ฆฌ ํํธํ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๊ณ ํด์ ํ๋ ๊ณผ์ ์์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ถ๋ถ๋ถ๋ถ ๋น ๊ณต๊ฐ์ด ์๊ธฐ๊ฒ ๋๋๋ฐ, 4๋ฒ๊ฐ์ด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ๋ ์๋ง๋ ๊ณต๊ฐ(4์นธ)์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง๋ถ๋ถ(์ฐ์ธก) ๋ถ๋ถ์ ํ๋ก์ธ์ค๊ฐ ์์นํด์ผ ๋๊ณ , ๊ทธ๋ฌ๋ฉด ๋น ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋จ์ ๋ญ๋น๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํ์์ด ๊ณ์๋๋ฉด ์ค์ physical ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ปค์ ธ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๋ ํ์์ด ๋ฐ์ ํ ์๋ ์๋ค.
๋ํ ์ฐ๊ธฐ ์ฐ์ฐ์ด copy on wirte ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์ต๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 2๋ฐฐ ์ด์๊น์ง ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
๊ทธ๋์ redis๋ฅผ ์ฌ์ฉํ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋นํ ์ฌ์ ์๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.

# ์ฐธ๊ณ ์๋ฃ
https://redis.com/nosql/key-value-databases/
https://chs96.github.io/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4/Redis%EB%9E%80/
https://sehajyang.github.io/2019/12/11/how-to-operate-redis/
https://medium.com/garimoo/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-01-92aaa24ca8cc
https://xzio.tistory.com/2053
https://droomii.tistory.com/18
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.