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)λŠ” μ‹œμŠ€ν…œ μ„±λŠ₯κ³Ό 응닡 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” μ€‘μš”ν•œ κΈ°μˆ μž…λ‹ˆλ‹€.
  • β†˜οΈŽ μ μ ˆν•œ 캐싱 μ „λž΅κ³Ό μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄ μ‹œμŠ€ν…œμ˜ λΆ€ν•˜λ₯Ό 쀄이고 μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • β†˜οΈŽ κ·ΈλŸ¬λ‚˜ μΊμ‹œ 일관성 λ¬Έμ œμ™€ μ˜€λ²„ν—€λ“œ 등을 κ³ λ €ν•˜μ—¬ 섀계해야 ν•©λ‹ˆλ‹€.
  • πŸ”‘ 핡심: β€œμžμ£Ό μ‚¬μš©λ˜λŠ” 데이터λ₯Ό 더 λΉ λ₯Έ μ €μž₯μ†Œμ— μž„μ‹œλ‘œ μ €μž₯해두어 μ„±λŠ₯을 μ΅œμ ν™”ν•œλ‹€.”