DBMS/Redis

[REDIS] ๐Ÿ“š ์บ์‹œ(Cache) ์„ค๊ณ„ ์ „๋žต ์ง€์นจ ๐Ÿ’ฏ ์ด์ •๋ฆฌ

์ธํŒŒ_ 2022. 11. 10. 15:46

redis-Cache

Redis - ์บ์‹œ(Cache) ์ „๋žต

์บ์‹ฑ ์ „๋žต์€ ์›น ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์ด๋‹ค. 

์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ(cache)๋Š” ๋ฉ”๋ชจ๋ฆฌ(RAM)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์–ด ์ด์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ RAM์˜ ์šฉ๋Ÿ‰์€ ์ปค๋ด์•ผ 16 ~ 32G ์ •๋„๋ผ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์บ์‹œ์— ์ €์žฅํ•ด๋ฒ„๋ฆฌ๋ฉด ์šฉ๋Ÿ‰ ๋ถ€์กฑ ํ˜„์ƒ์ด ์ผ์–ด๋‚˜ ์‹œ์Šคํ…œ์ด ๋‹ค์šด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์–ด๋Š ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ• ์ง€, ์–ผ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ• ์ง€, ์–ผ๋งˆ๋™์•ˆ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์—์„œ ์ œ๊ฑฐํ•˜๋Š”์ง€์— ๋Œ€ํ•œ '์ง€์นจ ์ „๋žต' ์„ ์ˆ™์ง€ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์บ์‹œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ด์šฉํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ์บ์‹œ์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ํŠน์„ฑ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ, ๊ฒฐ๊ณผ๊ฐ’์ด ์ž์ฃผ ๋ณ€๋™๋˜์ง€ ์•Š๊ณ  ์ผ์ •ํ•œ ๋ฐ์ดํ„ฐ, ์กฐํšŒํ•˜๋Š”๋ฐ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•ด๋‘๋ฉด ์ข‹๋‹ค.

 

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

๋…ธ๋“œ๋‚˜ ์Šคํ”„๋ง์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์žˆ์–ด, ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์— ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋ ค ํ• ๋•Œ, ์š”์ฒญ(request)์ด ๋ผ์šฐํ„ฐ์— ์˜ค๋ฉด ์–ด๋Š ์ƒํ™ฉ์—์„œ ์–ด๋–ค์‹์œผ๋กœ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ๋น ๋ฆฟ๋น ๋ฆฟํ•˜๊ฒŒ ๋Œ์•„๊ฐ€๋„๋ก ์„ค๊ณ„ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์ฐธ๊ณ ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

์ฐธ๊ณ ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ์„ ์ˆ˜ ์ง€์‹์ด ํ•„์š”ํ•œ๋ฐ, ๋ฐ”๋กœ cache hit ๊ณผ cache miss ์ด๋‹ค.

  • cache hit : ์บ์‹œ ์Šคํ† ์–ด(redis)์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ด (๋น ๋ฆ„)
  • cache miss : ์บ์‹œ ์Šคํ† ์–ด(redis)์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์–ด์ฉ”์ˆ˜์—†์ด DB์—์„œ ๊ฐ€์ ธ์˜ด (๋Š๋ฆผ)

Redis ์บ์‹œ(Cache) ์„ค๊ณ„


์บ์‹ฑ ์ „๋žต ํŒจํ„ด ์ข…๋ฅ˜

์บ์‹œ๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ฅ์ณ์˜ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ์ด๋‹ค.

๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์ด๋ž€, ์–ด๋Š ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ(Cache Store)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Data Store) ์ด ๋‘ ๊ณณ์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ •๋ณด๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ˜„์ƒ์„ ๋งํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์บ์‹œ์—๋Š” ์–ด๋–ค ๊ฒŒ์‹œ๊ธ€์˜ ์ข‹์•„์š” ๊ฐฏ์ˆ˜๊ฐ€ 10๊ฐœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” 7๊ฐœ๋กœ ์ €์žฅ๋˜์–ด์žˆ์„ ๊ฒฝ์šฐ ์ •๋ณด ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

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

๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ์บ์‹œ ์ฝ๊ธฐ ์ „๋žต(Read Cache Strategy)๊ณผ ์บ์‹œ ์“ฐ๊ธฐ ์ „๋žต(Write Cache Strategy)์„ ํ†ตํ•ด, ์บ์‹œ์™€ DB๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๋ฉด์„œ๋„ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์žƒ์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์‹ฌํžˆ ์—ฐ๊ตฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.


์บ์‹œ ์ฝ๊ธฐ ์ „๋žต (Read Cache Strategy)

 

Look Aside ํŒจํ„ด

  • Cache Aside ํŒจํ„ด์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„๋•Œ ์šฐ์„  ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์šฐ์„ ์ ์œผ๋กœ ํ™•์ธํ•˜๋Š” ์ „๋žต.
    ๋งŒ์ผ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด DB์—์„œ ์กฐํšŒํ•จ.
  • ๋ฐ˜๋ณต์ ์ธ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ํ˜ธ์ถœ์— ์ ํ•ฉ.
  • ์บ์‹œ์™€ DB๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐ€์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์บ์‹œ์— ์ €์žฅ
  • ์บ์‹œ์™€ DB๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐ€์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ ์žฅ์•  ๋Œ€๋น„ ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ์Œ.
    ๋งŒ์ผ redis๊ฐ€ ๋‹ค์šด ๋˜๋”๋ผ๋„ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ์–ด ์„œ๋น„์Šค ์ž์ฒด๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Œ.
  • ๋Œ€์‹ ์— ์บ์‹œ์— ๋ถ™์–ด์žˆ๋˜ connection์ด ๋งŽ์•˜๋‹ค๋ฉด, redis๊ฐ€ ๋‹ค์šด๋œ ์ˆœ๊ฐ„ ์ˆœ๊ฐ„์ ์œผ๋กœ DB๋กœ ๋ชฐ๋ ค์„œ ๋ถ€ํ•˜ ๋ฐœ์ƒ.

redis-Cache Aside

Look Asdie Cache ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์บ์‹ฑ์„ ์ด์šฉํ• ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์บ์‹œ ์ „๋žต์ด๋‹ค.

์ด ๋ฐฉ์‹์€ ์บ์‹œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ DB์— ์š”์ฒญ์„ ์ „๋‹ฌํ•จ์œผ๋กœ์จ ์บ์‹œ ์žฅ์• ๋กœ ์ธํ•œ ์„œ๋น„์Šค ๋ฌธ์ œ๋Š” ๋Œ€๋น„ํ• ์ˆ˜ ์žˆ์ง€๋งŒ, Cache Store์™€ Data Store(DB)๊ฐ„ ์ •ํ•ฉ์„ฑ ์œ ์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดˆ๊ธฐ ์กฐํšŒ ์‹œ ๋ฌด์กฐ๊ฑด Data Store๋ฅผ ํ˜ธ์ถœ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹จ๊ฑด ํ˜ธ์ถœ ๋นˆ๋„๊ฐ€ ๋†’์€ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ๋Œ€์‹  ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋น„์Šค์— ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ DB์—์„œ ์บ์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋„ฃ์–ด์ฃผ๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์ด๋ฅผ Cache Warming์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

[ Cache Warming ]

๋ฏธ๋ฆฌ cache๋กœ db์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด ๋„ฃ์–ด๋‘๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค.
์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์„œ๋น„์Šค ์ดˆ๊ธฐ์— ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ์‹œ ๋Œ€๋Ÿ‰์˜ cache miss ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆ ํ•  ์ˆ˜ ์žˆ๋‹ค. (Thundering Herd)
๋‹ค๋งŒ, ์บ์‹œ ์ž์ฒด๋Š” ์šฉ๋Ÿ‰์ด ์ž‘์•„ ๋ฌดํ•œ์ •์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค๊ณ  ์žˆ์„์ˆ˜๋Š” ์—†์–ด ์ผ์ •์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด expire๋˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์‹œ Thundering Herd๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ์˜ TTL์„ ์ž˜ ์กฐ์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. (๋’ค์—์„œ ์ž์„ธํžˆ ์„ค๋ช…)
Thundering Herd๋Š” ๋ชจ๋“  ์ง€์ ์—์„œ ๋ฐœ์ƒ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์„œ๋น„์Šค์˜ ์ฒซ ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ์กฐํšŒ๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ์ง€์ ์—์„œ ์ฃผ๋กœ ๋ฐœ์ƒ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

Read Through ํŒจํ„ด

  • ์บ์‹œ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ „๋žต (inline cache)
  • Look Aside ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์บ์‹œ ์ œ๊ณต์ž์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Œ.
  • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ์žˆ์–ด ์ „์ฒด์ ์œผ๋กœ ์†๋„๊ฐ€ ๋Š๋ฆผ.
  • ๋˜ํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์ „์ ์œผ๋กœ ์บ์‹œ์—๋งŒ ์˜์ง€ํ•˜๋ฏ€๋กœ, redis๊ฐ€ ๋‹ค์šด๋  ๊ฒฝ์šฐ ์„œ๋น„์Šค ์ด์šฉ์— ์ฐจ์งˆ์ด ์ƒ๊ธธ์ˆ˜ ์žˆ์Œ.
  • ๋Œ€์‹ ์— ์บ์‹œ์™€ DB๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•ญ์ƒ ์ด๋ฃจ์–ด์ ธ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ์—์„œ ๋ฒ—์–ด๋‚ ์ˆ˜ ์žˆ์Œ
  • ์—ญ์‹œ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ์›Œํฌ๋กœ๋“œ์— ์ ํ•ฉ

Read Through

Read Through ๋ฐฉ์‹์€ Cache Aside ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, Cache Store์— ์ €์žฅํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ Server์ด๋ƒ ๋˜๋Š” Data Store ์ž์ฒด์ด๋ƒ์—์„œ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ์ง์ ‘์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  Read ์— ๋Œ€ํ•œ ์†Œ๋ชจ๋˜๋Š” ์ž์›์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์บ์‹œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๊ฒฝ์šฐ ์ด๋Š” ๋ฐ”๋กœ ์„œ๋น„์Šค ์ „์ฒด ์ค‘๋‹จ์œผ๋กœ ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— redis๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ Replication ๋˜๋Š” Cluster๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ์„ ๋†’์—ฌ์•ผ ํ•œ๋‹ค. 

์ด ๋ฐฉ์‹ ๋˜ํ•œ ์„œ๋น„์Šค ์šด์˜ ์ดˆ๋ฐ˜์— cache warming์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์บ์‹œ ์“ฐ๊ธฐ ์ „๋žต (Write Cache Strategy)

 

Write Back ํŒจํ„ด

  • Write Behind ํŒจํ„ด ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ.
  • ์บ์‹œ์™€ DB ๋™๊ธฐํ™”๋ฅผ ๋น„๋™๊ธฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™” ๊ณผ์ •์ด ์ƒ๋žต
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ๋•Œ DB์— ๋ฐ”๋กœ ์ฟผ๋ฆฌํ•˜์ง€์•Š๊ณ , ์บ์‹œ์— ๋ชจ์•„์„œ ์ผ์ • ์ฃผ๊ธฐ ๋ฐฐ์น˜ ์ž‘์—…์„ ํ†ตํ•ด DB์— ๋ฐ˜์˜
  • ์บ์‹œ์— ๋ชจ์•„๋†จ๋‹ค๊ฐ€ DB์— ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ ์ฟผ๋ฆฌ ํšŒ์ˆ˜ ๋น„์šฉ๊ณผ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • Write๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉด์„œ Read๋ฅผ ํ•˜๋Š”๋ฐ ๋งŽ์€ ์–‘์˜ Resource๊ฐ€ ์†Œ๋ชจ๋˜๋Š” ์„œ๋น„์Šค์— ์ ํ•ฉ
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ํ™•๋ณด
  • ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ €์žฅ.
  • ์บ์‹œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ ์†Œ์‹คํ•จ.

Write Back ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ๋•Œ DB๊ฐ€ ์•„๋‹Œ ๋จผ์ € ์บ์‹œ์— ์ €์žฅํ•˜์—ฌ ๋ชจ์•„๋†“์•˜๋‹ค๊ฐ€ ํŠน์ • ์‹œ์ ๋งˆ๋‹ค DB๋กœ ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์บ์‹œ๊ฐ€ ์ผ์ข…์˜ Queue ์—ญํ• ์„ ๊ฒธํ•˜๊ฒŒ ๋œ๋‹ค.

์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•˜๋‹ค๊ฐ€ ํ•œ ๋ฒˆ์— DB์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB ์“ฐ๊ธฐ ํšŸ์ˆ˜ ๋น„์šฉ๊ณผ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๊ธฐ ์ „์— ์บ์‹œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์˜คํžˆ๋ ค ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ง€์†์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ด ์ „๋žต ๋˜ํ•œ ์บ์‹œ์— Replication์ด๋‚˜ Cluster ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ Cache ์„œ๋น„์Šค์˜ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ์บ์‹œ ์ฝ๊ธฐ ์ „๋žต์ธ Read-Through์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์— ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ญ์ƒ ์บ์‹œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜ผํ•ฉ ์›Œํฌ๋กœ๋“œ์— ์ ํ•ฉํ•˜๋‹ค.

 

Write Through ํŒจํ„ด

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Cache์— ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ „๋žต
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋จผ์ € ์บ์‹œ์— ์ €์žฅํ•œ ๋‹ค์Œ ๋ฐ”๋กœ DB์— ์ €์žฅ (๋ชจ์•„๋†“์•˜๋‹ค๊ฐ€ ๋‚˜์ค‘์— ์ €์žฅ์ด ์•„๋‹Œ ๋ฐ”๋กœ ์ €์žฅ)
  • Read Through ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ DB ๋™๊ธฐํ™” ์ž‘์—…์„ ์บ์‹œ์—๊ฒŒ ์œ„์ž„
  • DB์™€ ์บ์‹œ๊ฐ€ ํ•ญ์ƒ ๋™๊ธฐํ™” ๋˜์–ด ์žˆ์–ด, ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€
  • ์บ์‹œ์™€ ๋ฐฑ์—… ์ €์žฅ์†Œ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ™์ด ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์•ˆ์ •์ 
  • ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์— ์ ํ•ฉ
  • ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ €์žฅ.
  • ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋‘๋ฒˆ์˜ Write๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ๋นˆ๋ฒˆํ•œ ์ƒ์„ฑ, ์ˆ˜์ •์ด ๋ฐœ์ƒํ•˜๋Š” ์„œ๋น„์Šค์—์„œ๋Š” ์„ฑ๋Šฅ ์ด์Šˆ ๋ฐœ์ƒ
  • ๊ธฐ์–ต์žฅ์น˜ ์†๋„๊ฐ€ ๋Š๋ฆด ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•  ๋•Œ CPU๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๊ฐ์†Œ

redis-Write Through

Write Through ํŒจํ„ด์€ Cache Store์—๋„ ๋ฐ˜์˜ํ•˜๊ณ  Data Store์—๋„ ๋™์‹œ์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (Write Back์€ ์ผ์ • ์‹œ๊ฐ„์„ ๋‘๊ณ  ๋‚˜์ค‘์— ํ•œ๊บผ๋ฒˆ์— ์ €์žฅ)

๊ทธ๋ž˜์„œ ํ•ญ์ƒ ๋™๊ธฐํ™”๊ฐ€ ๋˜์–ด ์žˆ์–ด ํ•ญ์ƒ ์ตœ์‹ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ ์ €์žฅํ• ๋•Œ๋งˆ๋‹ค 2๋‹จ๊ณ„ ๊ณผ์ •์„ ๊ฑฐ์ณ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฌ๋ฉฐ, ๋ฌด์กฐ๊ฑด ์ผ๋‹จ Cache Store์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ๋งŒ ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด์„œ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

write throuth ํŒจํ„ด๊ณผ write back ํŒจํ„ด ๋‘˜ ๋‹ค ๋ชจ๋‘ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๋ฌธ์ œ์ ์„ ์•ˆ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด TTL์„ ๊ผญ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค. (expire ๋ช…๋ น์–ด)
Write-Through ํŒจํ„ด๊ณผ Read-Through ํŒจํ„ด์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด, ์บ์‹œ์˜ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ ์ง€์™€ ๋”๋ถˆ์–ด ์ •ํ•ฉ์„ฑ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ AWS์˜ DynamoDB Accelerator(DAX)๊ฐ€ ์žˆ๋‹ค.
DAX ํŒจํ„ด์„ ํ†ตํ•ด DynamoDB์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
DynamoDB Accelerator(DAX)

 

Write Around ํŒจํ„ด

  • Write Through ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ„
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” DB์— ์ €์žฅ (์บ์‹œ๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์Œ)
  • Cache miss๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ DB์™€ ์บ์‹œ์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๋”ฐ๋ผ์„œ ์บ์‹œ์™€ DB ๋‚ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ (๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜)

Write Around ํŒจํ„ด

Write Around ํŒจํ„ด์€ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, cache miss๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ์กฐํšŒํ•˜๋Š” cache์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •, ์‚ญ์ œ๋  ๋•Œ๋งˆ๋‹ค, Cache ๋˜ํ•œ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉฐ, Cache์˜ expire๋ฅผ ์งง๊ฒŒ ์กฐ์ •ํ•˜๋Š” ์‹์œผ๋กœ ๋Œ€์ฒ˜ํ•ด์•ผ ํ•œ๋‹ค.

Write Around ํŒจํ„ด์€ ์ฃผ๋กœ Look aside, Read through์™€ ๊ฒฐํ•ฉํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฒˆ ์“ฐ์—ฌ์ง€๊ณ , ๋œ ์ž์ฃผ ์ฝํžˆ๊ฑฐ๋‚˜ ์ฝ์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ ์ข‹์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์บ์‹œ ์ฝ๊ธฐ + ์“ฐ๊ธฐ ์ „๋žต ์กฐํ•ฉ

 

Look Aside + Write Around ์กฐํ•ฉ

  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ์กฐํ•ฉ

Look Aside + Write Around

 

Read Through + Write Around ์กฐํ•ฉ

  • ํ•ญ์ƒ DB์— ์“ฐ๊ณ , ์บ์‹œ์—์„œ ์ฝ์„๋•Œ ํ•ญ์ƒ DB์—์„œ ๋จผ์ € ์ฝ์–ด์˜ค๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ์ด์Šˆ์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์•ˆ์ „ ์žฅ์น˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

Read Through + Write Around

 

Read Through + Write Through ์กฐํ•ฉ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ๋•Œ ํ•ญ์ƒ ์บ์‹œ์— ๋จผ์ € ์“ฐ๋ฏ€๋กœ, ์ฝ์–ด์˜ฌ๋•Œ ์ตœ์‹  ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ณด์žฅ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ๋•Œ ํ•ญ์ƒ ์บ์‹œ์—์„œ DB๋กœ ๋ณด๋‚ด๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ

Read Through + Write Through


์บ์‹œ ์ €์žฅ ๋ฐฉ์‹ ์ง€์นจ

์บ์‹œ ์†”๋ฃจ์…˜์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉด์„œ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์บ์‹œ ์„œ๋ฒ„์— ์ ์šฉํ•˜์—ฌ ๋ฐ˜์˜ํ•  ๊ฒฝ์šฐ ๋†’์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋ค„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ Cache Hit Rating์ด๋ผ๊ณ  ํ•œ๋‹ค.


์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ํ˜•ํƒœ๋ฅผ ์„ ํ˜ธํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ๋กœ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ Redis์™€ MemCached๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด์™€ ๊ฐ™์€ ์†”๋ฃจ์…˜์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 1์ฐจ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ์™€ ๋‹ฌ๋ฆฌ ์ œ์•ฝ์ ์ธ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŽ์•„์•ผ ์ˆ˜์‹ญ๊ธฐ๊ฐ€ ์ •๋„์˜ ์ €์žฅ์†Œ๋ฅผ ๋ณด์œ ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋Š” ๊ฒฐ๊ตญ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฝ‘์•„ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ  ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐํ•ด ๋‚˜๊ฐˆ ๊ฒƒ์ด๋ƒ๋ฅผ ์ง€์†์ ์œผ๋กœ ๊ณ ๋ฏผํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์บ์‹œ๋ฅผ ์ €์žฅํ•˜๋Š” ์‹œ์ ์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉฐ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๋˜ํ•œ ํ•œ๊ฐ€์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ ์บ์‹œ ์†”๋ฃจ์…˜์€ ์–ธ์ œ๋“ ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํœ˜๋ฐœ์„ฑ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•จ์œผ๋กœ์„œ ์–ด๋Š์ •๋„ ํ•ด๊ฒฐ์„ ๋ณผ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์–ด ์–ด๋Š ์ •๋„ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ณผ ์ €์žฅ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„ ํ•ด์•ผ ๋œ๋‹ค.

์ฆ‰ ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค ๋˜๋Š” ์ •ํ•ฉ์„ฑ์ด ์ผ์ • ๋ถ€๋ถ„ ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ์บ์‹œ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ค‘์š”ํ•œ ์ •๋ณด, ๋ฏผ๊ฐ ์ •๋ณด ๋“ฑ์€ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ์บ์‹œ ์†”๋ฃจ์…˜์ด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ๋Œ€์‘๋ฐฉ์•ˆ์„ ๋ชจ์ƒ‰ํ•ด ๋‘๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. (TimeOut, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ๋ณ‘ํ–‰ ๋“ฑ)

[ ํŒŒ๋ ˆํ†  ๋ฒ•์น™ - 8:2 ๋ฒ•์น™ ]

ํŒŒ๋ ˆํ†  ๋ฒ•์น™์ด๋ž€ ์ „์ฒด ๊ฒฐ๊ณผ์˜ 80%๊ฐ€ ์ „์ฒด ์›์ธ์˜ 20%์—์„œ ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. 
์„œ๋น„์Šค์— ๋น—๋Œ€์–ด ํ‘œํ˜„ํ•˜์ž๋ฉด 80%์˜ ํ™œ๋™์„ 20%์˜ ์œ ์ €๊ฐ€ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 20%์˜ ๋ฐ์ดํ„ฐ๋งŒ ์บ์‹œ ํ•ด๋„ ์„œ๋น„์Šค ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ๋ง์ด๋‹ค.
์ฆ‰, ์บ์‹œ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ•„์š” ์—†์ด "ํŒŒ๋ ˆํ†  ๋ฒ•์น™"์— ๋”ฐ๋ผ ์ผ๋ถ€๋งŒ ์ €์žฅํ•ด๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ €์žฅ ์ง€์นจ์ด๋‹ค.
Pareto 80–20 rule redis cache

์บ์‹œ ์ œ๊ฑฐ ๋ฐฉ์‹ ์ง€์นจ

์บ์‹œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์บ์‹œ ์„œ๋ฒ„์—๋งŒ ๋‹จ๋…์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„ ์˜๊ตฌ ์ €์žฅ์†Œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ด๋Š” 2์ฐจ ์ €์žฅ์†Œ(์˜๊ตฌ ์ €์žฅ์†Œ)์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ์บ์‹œ ์†”๋ฃจ์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™” ํ•˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•จ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ๊ณผ์ •์— ๊ณ ๋ ค์‚ฌํ•ญ์ด ๋Š˜์–ด๋‚œ๋‹ค๋Š” ์ ์„ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์บ์‹œ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ commit ์‹œ์ ์— ๋Œ€ํ•œ ๊ณ ๋ ค ๋“ฑ์ด ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. 

์บ์‹œ์˜ ๋งŒ๋ฃŒ ์ •์ฑ…์ด ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์—๋„ ์˜ค๋ž˜๋œ ์ •๋ณด๊ฐ€ ์บ์‹ฑ ๋˜์–ด์žˆ์–ด ์˜ค๋ž˜๋œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.


๋”ฐ๋ผ์„œ ์บ์‹œ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ ๋งŒ๋ฃŒ ์ •์ฑ…์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๊ฐ„ ๋งŒ๋ฃŒ ๋˜๋ฉด ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ ๋˜๊ณ , ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์›๋ž˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์บ์‹œ ๋งŒ๋ฃŒ ์ฃผ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์งง์œผ๋ฉด ๋ฐ์ดํ„ฐ๋Š” ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ œ๊ฑฐ๋˜๊ณ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์€ ์ค„์–ด๋“ ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋„ˆ๋ฌด ๊ธฐ๊ฐ„์ด ๊ธธ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์ž์ฃผ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜๋Š” ๋“ฑ์˜ ์—ญํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.


Cache Stampede ํ˜„์ƒ

Cache Stampede

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ TTL ๊ฐ’์ด ๋„ˆ๋ฌด ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด cache stampede ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

์œ„์—์„œ ๋ฐฐ์› ๋“ฏ์ด Look-aside ํŒจํ„ด์—์„œ redis์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ์‘๋‹ต์„ ๋ฐ›์€ ์„œ๋ฒ„ (์บ์‹œ ๋ฏธ์Šค)๊ฐ€ ์ง์ ‘ DB๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญํ•œ ๋’ค, ๋‹ค์‹œ redis์— ์ €์žฅํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์œ„ ์ƒํ™ฉ์—์„œ key๊ฐ€ ๋งŒ๋ฃŒ(Key Expires)๋˜๋Š” ์ˆœ๊ฐ„ ๋งŽ์€ ์„œ๋ฒ„์—์„œ ์ด key๋ฅผ ๊ฐ™์ด ๋ณด๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด ๋ชจ๋“  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ DB๋กœ ๊ฐ€์„œ ์ฐพ๊ฒŒ ๋˜๋Š” duplicate read ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋˜ ์ฝ์–ด์˜จ ๊ฐ’์„ ๊ฐ ๊ฐ redis์— ์“ฐ๋Š” duplicate write ๋„ ๋ฐœ์ƒ๋˜์–ด, ์ฒ˜๋ฆฌ๋Ÿ‰๋„ ๋‹ค ๊ฐ™์ด ๋Š๋ ค์งˆ ๋ฟ ์•„๋‹ˆ๋ผ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์ด ๊ต‰์žฅํžˆ ๋Š˜์–ด๋‚˜ ์š”์ฒญ์–‘ ํญ์ฃผ๋กœ ์žฅ์• ๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ ๋„ ์žˆ๋‹ค.


์บ์‹œ ๊ณต์œ  ๋ฐฉ์‹ ์ง€์นจ

์บ์‹œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์—์„œ ๊ณต์œ ํ•˜๋„๋ก ์„ค๊ณ„๋œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์–ด๋Š ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์บ์‹œ์— ๋ณด์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“œ๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“  ๋ณ€๊ฒฝ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋–„๋ฌธ์ด๋‹ค. (๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งˆ๋‹ค ํ‘œ์‹œ๋˜๋Š” ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ํ˜„์ƒ)

๋ฐ์ดํ„ฐ์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ์ทจํ•ด์•ผ ํ•œ๋‹ค.


๋จผ์ €, ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ง์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์ƒ‰๋œ ์ดํ›„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ผ์ผํžˆ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๊ฒฐ์ •ํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋“œ๋ฌผ๊ณ  ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์— ์ ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.

 

๋‘๋ฒˆ์งธ๋กœ, ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์ „์— Lock์„ ์žก๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ์กฐํšŒ์„ฑ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์— Lock์œผ๋กœ ์ธํ•œ ๋Œ€๊ธฐํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์•„ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์—…๋ฌด์™€ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์— ์ ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.


์บ์‹œ ๊ฐ€์šฉ์„ฑ ์ง€์นจ

์บ์‹œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชฉ์ ์€ ๋น ๋ฅธ ์„ฑ๋Šฅ ํ™•๋ณด์™€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๊ณ  ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์€ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์— ์œ„์ž„ํ•˜๊ณ , ์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ™•๋ณด์˜ ์ง€์นจ ์‚ฌํ•ญ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ์บ์‹œ ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๋กœ ์ธํ•ด ๋‹ค์šด๋˜์—ˆ์„ ๊ฒฝ์šฐ๋‚˜ ์„œ๋น„์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ์—๋„ ์ง€์†์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

์ด๋Š” ์บ์‹œ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฒฐ๊ตญ ๊ธฐ์กด ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์— ๋™์ผํ•˜๊ฒŒ ์ €์žฅ๋˜๊ณ  ์œ ์ง€๋œ๋‹ค๋Š” ์ ์„ ๋’ท๋ฐ”์นจํ•˜๋Š” ์„ค๊ณ„๋ฐฉ์‹์ด๋‹ค. (Write Through)

์ฆ‰, ์บ์‹œ ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๋กœ ๋ถ€ํ„ฐ ๋ณต๊ตฌ๋˜๋Š” ๋™์•ˆ ์„ฑ๋Šฅ์ƒ์˜ ์ง€์—ฐ์€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋น„์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค.


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

https://waspro.tistory.com/697 

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-02-f1029893e263