Home > CS > 2024 > ๐Ÿ’พ [CS] Cache(์บ์‹œ)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ [CS] Cache(์บ์‹œ)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
CS

๐Ÿ’พ [CS] Cache(์บ์‹œ)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ“Œ Intro.

  • โ†˜๏ธŽ ์บ์‹œ(Cache)๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์ ‘๊ทผ ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜์—ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋˜๋Š” ์ €์žฅ์†Œ.

1๏ธโƒฃ Cache(์บ์‹œ)์˜ ๋ชฉ์ .

  • 1๏ธโƒฃ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    • โ†˜๏ธŽ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ €์žฅ.
  • 2๏ธโƒฃ ์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐ์†Œ(Latency Reduction)
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์›๊ฒฉ ์„œ๋ฒ„์™€์˜ ๋ฐ˜๋ณต์ ์ธ ์š”์ฒญ์„ ์ค„์—ฌ ์‘๋‹ต ์†๋„ ๊ฐœ์„ .
  • 3๏ธโƒฃ ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ๊ฐ์†Œ
    • โ†˜๏ธŽ ๋™์ผํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ ์ธ ์ฒ˜๋ฆฌ ๋ถ€ํ•˜๋ฅผ ์ค„์ž„.
  • 4๏ธโƒฃ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ ˆ๊ฐ
    • โ†˜๏ธŽ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ๋ฐ˜๋ณต ์š”์ฒญ์„ ์ค„์—ฌ ํŠธ๋ž˜ํ”ฝ ์ ˆ๊ฐ.

2๏ธโƒฃ Cache(์บ์‹œ)์˜ ์ž‘๋™ ์›๋ฆฌ.

  • 1๏ธโƒฃ ์บ์‹œ ๋ฏธ์Šค(Cache Miss)
    • โ†˜๏ธŽ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒ.
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์บ์‹œ์— ์ €์žฅ.
  • 2๏ธโƒฃ ์บ์‹œ ํžˆํŠธ(Cache Hit)
    • โ†˜๏ธŽ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•  ๋•Œ ๋ฐœ์ƒ.
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์Šค ๋Œ€์‹  ์บ์Šค์—์„œ ๊ฐ€์ ธ์˜ด.
  • 3๏ธโƒฃ ์บ์‹œ ๋งŒ๋ฃŒ(Cache Expiration)
    • โ†˜๏ธŽ ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ค์ •๋œ ์‹œ๊ฐ„(TTL: Time To Live)์ด ์ง€๋‚˜๋ฉด ๋งŒ๋ฃŒ.
    • โ†˜๏ธŽ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ๊ต์ฒด๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋จ.

3๏ธโƒฃ ์บ์‹œ์˜ ์œ ํ˜•.

  • 1๏ธโƒฃ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ (In-Memory Cache)
    • โ†˜๏ธŽ ์„ค๋ช… : RAM(Random Access Memory)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.
    • โ†˜๏ธŽ ์˜ˆ์‹œ : Redis, Memcached
  • 2๏ธโƒฃ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ (Browser Cache)
    • โ†˜๏ธŽ ์„ค๋ช… : ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€์˜ ์ž์›(์ด๋ฏธ์ง€, CSS, JavaScript ๋“ฑ)์„ ์ €์žฅ.
    • โ†˜๏ธŽ ์˜ˆ์‹œ : ํฌ๋กฌ, ํŒŒ์ด์–ดํญ์Šค์˜ ์บ์‹œ.
  • 3๏ธโƒฃ ๋””์Šคํฌ ์บ์‹œ (Disk Cache)
    • โ†˜๏ธŽ ์„ค๋ช… : ๋””์Šคํฌ์˜ ์ผ๋ถ€๋ฅผ ์บ์‹œ๋กœ ์‚ฌ์šฉ.
    • โ†˜๏ธŽ ์˜ˆ์‹œ : ์šด์˜์ฒด์ œ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ.
  • 4๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œ (Database Cache)
    • โ†˜๏ธŽ ์„ค๋ช… : ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅ.
    • โ†˜๏ธŽ ์˜ˆ์‹œ : MySQL Query Cache
  • 5๏ธโƒฃ ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ (CDN Cache)
    • โ†˜๏ธŽ ์„ค๋ช… : CDN ์„œ๋ฒ„๊ฐ€ ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์บ์‹œํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต.
    • โ†˜๏ธŽ ์˜ˆ์‹œ : Cloudflare, AWS CloudFront

4๏ธโƒฃ ์บ์‹œ ๋ฌดํšจํ™”(Cache Invalidation).

๐Ÿ“Œ ์บ์‹œ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•:

  • 1๏ธโƒฃ ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ๋ฌดํšจํ™” (Time-to-Live, TTL)
    • โ†˜๏ธŽ ์บ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋งŒ๋ฃŒ.
  • 2๏ธโƒฃ ์ˆ˜๋™ ๋ฌดํšจํ™” (Manual Invalidation)
    • โ†˜๏ธŽ ๊ด€๋ฆฌ์ž๊ฐ€ ํŠน์ • ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฌดํšจํ™”.
  • 3๏ธโƒฃ Write-Through ์บ์‹ฑ
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์ €์žฅ๋˜๋ฉด์„œ ๋™์‹œ์— ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋„ ์ €์žฅ.
  • 4๏ธโƒฃ Write-Back ์บ์‹ฑ
    • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ๋จผ์ € ์ €์žฅ๋˜๊ณ , ๋‚˜์ค‘์— ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ.

5๏ธโƒฃ ์บ์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Cache Algorithm).

  • 1๏ธโƒฃ LRU (Least Recently Used)
    • ๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์‚ญ์ œ.
  • 2๏ธโƒฃ LFU (Least Frequently Used)
    • ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์‚ญ์ œ.
  • 3๏ธโƒฃ FIFO (First In First Out)
    • ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์‚ญ์ œ.
  • 4๏ธโƒฃ Random Replacement
    • ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜์—ฌ ์‚ญ์ œ.

6๏ธโƒฃ ์บ์‹œ์˜ ์žฅ์ ๊ณผ ๋‹จ์ .

๐ŸŽฏ ์žฅ์ .

  • โ†˜๏ธŽ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„ ํ–ฅ์ƒ.
  • โ†˜๏ธŽ ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ๊ฐ์†Œ.
  • โ†˜๏ธŽ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ ˆ๊ฐ.

๐ŸŽฏ ๋‹จ์ .

  • โ†˜๏ธŽ ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ (Cache Consistency)
  • โ†˜๏ธŽ ์บ์‹œ ์˜ค์—ผ(Cache Pollution)
  • โ†˜๏ธŽ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ €์žฅ ๊ณต๊ฐ„ ์ถ”๊ฐ€ ํ•„์š”,

7๏ธโƒฃ ์บ์‹œ ์‚ฌ์šฉ ์‚ฌ๋ก€.

  • 1๏ธโƒฃ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜.
    • โ†˜๏ธŽ ์ •์  ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€, CSS, JavaScript)๋ฅผ ์บ์‹œํ•˜์—ฌ ๋น ๋ฅธ ๋กœ๋”ฉ.
  • 2๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.
    • โ†˜๏ธŽ ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ.
  • 3๏ธโƒฃ API ์š”์ฒญ.
    • โ†˜๏ธŽ ๋ฐ˜๋ณต๋˜๋Š” API ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ.
  • 4๏ธโƒฃ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ.
    • โ†˜๏ธŽ ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋Š” ์›น ํŽ˜์ด์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œ.
  • 5๏ธโƒฃ CDN(Content Delivery Network)
    • โ†˜๏ธŽ ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด CDN ์„œ๋ฒ„์— ์บ์‹œ.

8๏ธโƒฃ ์บ์‹œ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด.

  • 1๏ธโƒฃ ์บ์‹œ ํžˆํŠธ(Cache Hit) : ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ด.
  • 2๏ธโƒฃ ์บ์‹œ ๋ฏธ์Šค(Cache Miss) : ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์–ด์„œ ์›๋ณธ์—์„œ ๊ฐ€์ ธ์˜ด.
  • 3๏ธโƒฃ TTL(Time to Live) : ์บ์‹œ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„.
  • 4๏ธโƒฃ Eviction(์ œ๊ฑฐ) : ์˜ค๋ž˜๋œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ.

9๏ธโƒฃ ์บ์‹œ ์ „๋žต ์„ ํƒ ๊ธฐ์ค€.

  • 1๏ธโƒฃ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํŒจํ„ด : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์ธ์ง€.
  • 2๏ธโƒฃ ์ผ๊ด€์„ฑ ์š”๊ตฌ์‚ฌํ•ญ : ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•œ์ง€.
  • 3๏ธโƒฃ ์Šคํ† ๋ฆฌ์ง€ ๋น„์šฉ : ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ๋””์Šคํฌ ๋น„์šฉ ๊ณ ๋ ค.
  • 4๏ธโƒฃ TTL(Time to Live) ์„ค์ • : ์บ์‹œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„.

๐Ÿš€ ๊ฒฐ๋ก .

  • โ†˜๏ธŽ ์บ์‹œ(Cache)๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ๊ณผ ์‘๋‹ต ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
  • โ†˜๏ธŽ ์ ์ ˆํ•œ ์บ์‹ฑ ์ „๋žต๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • โ†˜๏ธŽ ๊ทธ๋Ÿฌ๋‚˜ ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ์™€ ์˜ค๋ฒ„ํ—ค๋“œ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ”‘ ํ•ต์‹ฌ: โ€œ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋น ๋ฅธ ์ €์žฅ์†Œ์— ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘์–ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.โ€