DBMS/Redis

[REDIS] ๐Ÿ“š ๋ ˆ๋””์Šค ์†Œ๊ฐœ & ์‚ฌ์šฉ์ฒ˜ (์บ์‹œ / ์„ธ์…˜) - ํ•œ๋ˆˆ์— ์™ ์ •๋ฆฌ

์ธํŒŒ_ 2022. 6. 29. 08:28

redis-์ •๋ฆฌ

Redis (Remote Dictionary Server)

Redis๋Š” Remote(์›๊ฒฉ)์— ์œ„์น˜ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋กœ ์กด์žฌํ•˜๋Š” In-Memory ๊ธฐ๋ฐ˜์˜ Dictionary(key-value) ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ Server ์‹œ์Šคํ…œ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ key-value ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ๋ž€, mysql ๊ฐ™์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋น„ ๊ด€๊ณ„ํ˜• ๊ตฌ์กฐ๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ์ € 'ํ‚ค-๊ฐ’' ํ˜•ํƒœ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋Œ€์‹  ๋ฐ์ดํ„ฐ์˜ ๊ณ ์† ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ Redis๋Š” ์ผ์ข…์˜ NoSQL ๋กœ ๋ถ„๋ฅ˜๋˜๊ธฐ๋„ ํ•œ๋‹ค.

key-value ๊ตฌ์กฐ

NoSQL์€ Not Only SQL์˜ ์•ฝ์ž๋กœ์จ ๊ธฐ์กด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)๋ณด๋‹ค ๋” ์œตํ†ต์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ํŠนํ™”๋œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•œ๋‹ค.
NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‹จ์ˆœ ๊ฒ€์ƒ‰ ๋ฐ ์ถ”๊ฐ€ ์ž‘์—…์— ์žˆ์–ด์„œ ๋งค์šฐ ์ตœ์ ํ™”๋œ ํ‚ค-๊ฐ’ ์ €์žฅ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์†๋„๋‚˜ ์ฒ˜๋ฆฌ ํšจ์œจ ๋“ฑ์— ์žˆ์–ด์„œ ๋งค์šฐ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

 

๋˜ํ•œ Redis๋Š” ์ธ ๋ฉ”๋ชจ๋ฆฌ(In-Memory) ์†”๋ฃจ์…˜์œผ๋กœ๋„ ๋ถ„๋ฅ˜๋˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ง€์›ํ•จ์œผ๋กœ์จ DB, Cache, Message Queue, Shared Memory ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์ด ๋””์Šคํฌ(ssd)์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ(dram)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—… ์†๋„๊ฐ€ ์ƒ๋‹นํžˆ ๋น ๋ฅด๋‹ค.

์ธ ๋ฉ”๋ชจ๋ฆฌ(In-Memory)

๋ฉ”๋ชจ๋ฆฌ 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 ์ฟผ๋ฆฌ ์ˆœ์„œ]

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญ
  2. ์„œ๋ฒ„์—์„œ ์บ์‹œ์— ๋ฐ์ดํ„ฐ ์กด์žฌ ์œ ๋ฌด ํ™•์ธ
  3. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ (๋น ๋ฅธ ์กฐํšŒ)
  4. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์‹ค์ œ DB ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ
  5. ๊ทธ๋ฆฌ๊ณ  DB์—์„œ ๊ฐ€์ ธ ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜

Look aside Cache

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 ์ฟผ๋ฆฌ ์ˆœ์„œ]

  1. ์šฐ์„  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์‹น ์ €์žฅ
  2. ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค DB์— ํ•œ๊บผ๋ฒˆ์— ์ €์žฅ (๋ฐฐ์น˜)
  3. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„  DB์— ์ €์žฅํ–ˆ์œผ๋‹ˆ ์ž”์กด ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์—์„œ ์ œ๊ฑฐ

Write Back


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 vs 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

 

๋˜ํ•œ ๋ช‡ ๋ช‡ 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 vs Memcached

 

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 ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
๋งŒ๋ฃŒ์ผ ์ง€์ • ๋ฐฉ์‹ ๋งŒ๋ฃŒ์ผ์„ ์ง€์ •ํ•˜๋ฉด ๋งŒ๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์ฒ˜๋Ÿผ ์‚ฌ๋ผ์ง ๋™์ผ

Redis vs MemcachedRedis vs MemcachedRedis vs MemcachedRedis vs Memcached
๊ทธ๋ž˜ํ”„ ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์ข‹์€ ๊ฒƒ์ž„

 

ํ•ด๋‹น ํ‘œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Memcached์˜ ๊ฒฝ์šฐ Write ์—ฐ์‚ฐ์— ์žˆ์–ด์„œ, Redis ๋ณด๋‹ค ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, Read ์—ฐ์‚ฐ์— ์žˆ์–ด์„œ๋Š” Redis๊ฐ€ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค.

์ด๋ฅผ ๋น„๊ตํ•ด๋ณด์•˜์„ ๋•Œ, Redis๊ฐ€ ์„ธ์…˜์„ ์ €์žฅํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•˜๋‹ค๋Š” ์ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์„ธ์…˜ ๊ด€๋ จ ์ž‘์—…์˜ ๊ฒฝ์šฐ, ์“ฐ๊ธฐ ์—ฐ์‚ฐ๋ณด๋‹ค๋Š” ์ฝ๊ธฐ ์—ฐ์‚ฐ์ด ์••๋„์ ์œผ๋กœ ๋†’์€ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Redis๊ฐ€ Read/Write์— ์žˆ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ๊ทธ๋ž˜ํ”„ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•œ ๊ฒฐ๊ณผ, ์“ฐ๊ธฐ ์„ฑ๋Šฅ์—์„œ๋Š” Memcached๊ฐ€ ์•ž์„œ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจ๊ณผ ์ฒ˜๋ฆฌ์†๋„, ๊ทธ๋ฆฌ๊ณ  ์ด์™ธ์˜ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›๊ณผ ์•„ํ‚คํ…์ณ ์ง€์›์„ ๋ชจ๋‘ ๊ณ ๋ คํ•œ๋‹ค๋ฉด Redis๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋” ๋‚˜์€ ์„ ํƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

Redis / Memcached ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์„ ํƒ

 

MemCached

  1. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ ์›๋ณธ ๋ฐ์ดํ„ฐ๋กœ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  2. ๋‹จ์ˆœ ์กฐํšŒ๋กœ ํ†ต์‹  ์†๋„๋งŒ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ชฉ์ ์ธ ๊ฒฝ์šฐ

Redis

  1. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์„ ๋•Œ ์„œ๋น„์Šค ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
  2. ์„œ๋น„์Šค์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ( ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋“ฑ )

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://workinprogress.kr/wiki/programming/do-not-feed-the-gc/


# ์ฐธ๊ณ ์ž๋ฃŒ

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