Post

๐Ÿงฐ Redis (02) - ์บ์‹œ(Cache), ์บ์‹ฑ(Caching) ์ „๋žต



ํ•™์Šต ํ™˜๊ฒฝ : Mac, iTerm

์บ์‹œ(Cache), ์บ์‹ฑ(Caching)์ด๋ž€?

โœ”๏ธ ย ์บ์‹œ(Cache)

์›๋ณธ ์ €์žฅ์†Œ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

img

Cache Aside (= Look Aside, Lazy Loading) ์ „๋žต

์บ์‹œ(์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ)์— ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‹ค๋ฌด์—์„œ๋Š” API ์‘๋‹ต ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋А๋ฆฌ๋‹ค๋ฉด ์กฐํšŒ ์†๋„๋ฅผ ํ–ฅ์ƒ๊ธฐ ์œ„ํ•ด ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•ด ๋‘๊ณ  ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต (Cache Aside, Write Around)

Redis๋ฅผ ์บ์‹œ๋กœ ์“ธ ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ „๋žต์€ ์•„์ฃผ ๋‹ค์–‘ํ•˜๋‹ค. ๊ทธ์ค‘์—์„œ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” 2๊ฐ€์ง€๋งŒ ์•Œ์•„๋ณด๊ณ  ๋‚˜๋จธ์ง€ ์ „๋žต๋“ค์€ ์ต์ˆ™ํ•ด์ง„ ๋’ค ์ถ”๊ฐ€๋กœ ํ•™์Šตํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค์–‘ํ•œ ์ „๋žต์„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

โœ”๏ธ Cache Aside (= Look Aside, Lazy Loading) ์ „๋žต

Cache Aside ์ „๋žต์€ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด DB๋ฅผ ํ†ตํ•ด ์กฐํšŒํ•ด์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.


๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต์ด ์ด Cache Aside ์ „๋žต์ด๋‹ค.
๊ฒŒ์‹œํŒ์—์„œ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฅผ ๋ฐฐํฌํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  Cache Aside ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•ด๋ณด์ž.

  1. ์ฒ˜์Œ ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋ฉด ๊ฒŒ์‹œ๊ธ€์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ ˆ๋””์Šค์— ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  2. ์ผ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋“ค์–ด์™€ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ์„ ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค. (๋ ˆ๋””์Šค์—๋Š” ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.)
  3. ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๋ ค๊ณ  ์š”์ฒญํ•œ๋‹ค. ์ด ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ํ•˜๊ธฐ ์ „์— ๋ ˆ๋””์Šค์— ์žˆ๋Š” ์ง€ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
  4. ๋ ˆ๋””์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฑธ ํ™•์ธํ•œ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ์‘๋‹ตํ•œ๋‹ค.
  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•œ ๋’ค์— ๋ ˆ๋””์Šค์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋‘”๋‹ค.
  6. ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๊ณ  ์š”์ฒญํ•œ๋‹ค.
  7. ๋ ˆ๋””์Šค์— ์กฐํšŒํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์งˆ ํ™•์ธํ–ˆ๋”๋‹ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ด์„œ ๋ ˆ๋””์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ •๋ฆฌํ•˜์ž๋ฉด,

1. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ (= Cache Hit) แ„ƒแ…กแ„‹แ…ฎแ†ซแ„…แ…ฉแ„ƒแ…ณ (1) ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์บ์‹œ(Redis)์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ Cache Hit๋ผ๊ณ  ํ•œ๋‹ค.

2. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ (= Cache Miss) แ„ƒแ…กแ„‹แ…ฎแ†ซแ„…แ…ฉแ„ƒแ…ณ (2) ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์บ์‹œ(Redis)์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ Cache Miss๋ผ๊ณ  ํ•œ๋‹ค.

โœ”๏ธ Write Around ์ „๋žต

Write Around ์ „๋žต์€ ์“ฐ๊ธฐ ์ž‘์—…(์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ)์„ ์บ์‹œ์—๋Š” ๋ฐ˜์˜ํ•˜์ง€ ์•Š๊ณ , DB์—๋งŒ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.


Cache Aside ์ „๋žต์ด ๋ฐ์ดํ„ฐ ์กฐํšŒ์™€ ๊ด€๋ จ๋œ ์ „๋žต์ด๋ผ๋ฉด Write Around ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์“ธ ์ง€(์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ)์— ๊ด€๋ จ๋œ ์ „๋žต์ด๋‹ค.

แ„ƒแ…กแ„‹แ…ฎแ†ซแ„…แ…ฉแ„ƒแ…ณ (3)

Write Around ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ ˆ๋””์Šค์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ ˆ๋””์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์™€์„œ ๋ ˆ๋””์Šค์— ์ €์žฅ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

Cache Aside, Write Around ์ „๋žต์˜ ํ•œ๊ณ„์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ”๏ธ Cache Aside, Write Around ์ „๋žต์˜ ํ•œ๊ณ„์ 

1. ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ์™€ DB๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

Cache Aside์™€ Write Around ์ „๋žต์„ ๊ฐ™์ด ์ผ์„ ๋•Œ์˜ ํ•œ๊ณ„์  ์ค‘ ํ•˜๋‚˜๋Š” ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ์™€ DB์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป

๋‘ ๋ฐฉ์‹์„ ๊ฐ™์ด ์“ฐ๋Š” ๊ฑด ํ˜„์—…์—์„œ๋„ ๋งŽ์ด ์“ฐ๋Š” ๋ฐฉ์‹์ด์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ DB๋งŒ ์—…๋ฐ์ดํŠธ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์ €์žฅ๋œ Redis์˜ ๋ฐ์ดํ„ฐ์™€ DB์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค๋ฅผ ์ˆ˜๋ฐ–์— ์—†๋‹ค.

ex) ํ”„๋กœํ•„ ์ˆ˜์ •์—์„œ ๋‚ด ์ด๋ฆ„์„ โ€˜๊น€๋ณด๊ฒฝโ€™์—์„œ โ€˜๊น€๋ณด๊ฐฑโ€™์œผ๋กœ ๋ฐ”๊ฟจ๋Š”๋ฐ, ๋‚ด ํ”„๋กœํ•„ ์กฐํšŒ๋ฅผ ํ•ด๋ดค๋”๋‹ˆ ๋‚ด ์ด๋ฆ„์ด ์—ฌ์ „ํžˆ โ€˜๊น€๋ณด๊ฒฝโ€™์ด๋ผ๊ณ  ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

2. ์บ์‹œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ๋น„๊ต์  ํ˜‘์†Œ

DB๋Š” ๋””์Šคํฌ(Disk)์— ์ €์žฅํ•ด์„œ ๋งŽ์€ ์–‘์„ ์ €์žฅํ•˜๊ธฐ ์šฉ์ดํ•˜์ง€๋งŒ, ์บ์‹œ๋Š” ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— DB์— ๋น„ํ•ด ๋งŽ์€ ์–‘์„ ์ €์žฅ ํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿค” ์ด ํ•œ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ• ๊นŒ?

1. ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ์™€ DB๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
์บ์‹œ์™€ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค Redis์™€ DB์— ๋™์‹œ์— ์—…๋ฐ์ดํŠธ์‹œํ‚ค๋ฉด?
โ†’ ๋ฐ์ดํ„ฐ๋Š” ์ผ์น˜ํ•  ๊ฒƒ. ๊ทธ๋Ÿฌ๋‚˜ ์„ฑ๋Šฅ์ด ๋А๋ ค์งˆ ๊ฒƒ
๊ทธ๋ ‡๋‹ค๊ณ  ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด DB์˜ ๋ฐ์ดํ„ฐ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์บ์‹œ์™€ DB์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ์ผ์น˜

ํ•˜์ง€๋งŒ ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค. ์–ด๋–ค ์„ ํƒ์„ ํ•˜๋“  ๊ธฐํšŒ ๋น„์šฉ(Trade Off)์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ์–ป์œผ๋ฉด ๋ฌด์–ธ๊ฐ€๋ฅผ ํฌ๊ธฐํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ชฉ์ ์œผ๋กœ ๋ ˆ๋””์Šค๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ํƒํ•œ ๊ฒƒ์ด๋‹ค.

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

    ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์—์„œ ์‚ญ์ œ๋œ๋‹ค. ๊ทธ๋Ÿผ ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ์กฐํšŒ๋ฅผ ํ•˜๋Š” ์ˆœ๊ฐ„ Cache Miss๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ์กฐํšŒํ•ด์™€์„œ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๊ฐฑ์‹ ๋˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ!

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

โœ… ํ•œ์ค„ ์š”์•ฝ

Cache Aside, Write Around ์ „๋žต์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ TTL์„ ๊ฐ™์ด ํ™œ์šฉํ•œ๋‹ค.



๐Ÿ”— ย ํ•™์Šต ๊ฐ•์˜ ์˜์ƒ

This post is licensed under CC BY 4.0 by the author.