web cache - TECH-SHARING-STUDY/FE_STUDY GitHub Wiki

μΊμ‹œμ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€ - μ›Ή μΊμ‹œ, λΈŒλΌμš°μ € μΊμ‹œ



λ“€μ–΄κ°€λ©°

πŸŽ’ γ€€ μΊμ‹œ λ°°κ²½

1. νŒŒλ ˆν† μ˜ 법칙 2 λŒ€ 8 법칙

원인 쀑 μƒμœ„ 20% κ°€ 전체 결과의 80% λ₯Ό λ§Œλ“ λ‹€


2. μ§€μ—­μ„±μ˜ 원리
μ‹œκ°„ 지역성

졜근 μ ‘κ·Όν•œ λ°μ΄ν„°λŠ” λ‹€μ‹œ μ ‘κ·Όν•  ν™•λ₯ μ΄ 크닀

곡간 지역성

졜근 μ ‘κ·Όν•œ 데이터 μ£Όλ³€ 곡간에 λ‹€μ‹œ μ ‘κ·Όν•  ν™•λ₯ μ΄ 크닀

/*
μ‹œκ°„ 지역성 - λ°°μ—΄μ˜ μ›μ†Œμ— μ ‘κ·Όν•˜λŠ” 인덱슀둜 μ‚¬μš©λ˜λŠ” λ³€μˆ˜ i
곡간 지역성 - λ°°μ—΄μ˜ 0 ~ 9 번 μ§Έ μš”μ†Œ 
*/

const arr = [];

for (let i = 0 ; i < 10 ; i++) {
  arr[i] = i;
}



πŸ“Œ γ€€ μΊμ‹œλž€?

ν•˜λ“œμ›¨μ–΄μ—μ„œ

μΊμ‹œλŠ” CPU μΉ© μ•ˆμ— λ“€μ–΄κ°€λŠ” μž‘κ³  λΉ λ₯Έ λ©”λͺ¨λ¦¬λ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ 맀번 메인 λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•΄ 데이터λ₯Ό λ°›μ•„μ˜€λ©΄ μ‹œκ°„μ΄ 였래 걸리기 λ•Œλ¬Έμ—, μΊμ‹œμ— 자주 μ‚¬μš©ν•˜λŠ” 데이터λ₯Ό 담아두고, ν•΄λ‹Ή 데이터가 ν•„μš”ν•  λ•Œ ν”„λ‘œμ„Έμ„œκ°€ 메인 λ©”λͺ¨λ¦¬ λŒ€μ‹  μΊμ‹œμ— μ ‘κ·Όν•˜λ„λ‘ ν•΄ 처리 속도λ₯Ό 높인닀.

λͺ©μ 

자주 찾을 것 같은 데이터λ₯Ό μ–΄λ”˜κ°€μ— μ €μž₯ν•΄μ„œ μ‹œκ°„μ„ μ ˆμ•½ν•˜μž!

μ–΄λ–»κ²Œ?

ν†΅μƒμ μœΌλ‘œ μ›λž˜μ˜ 데이터 μ €μž₯μ†Œλ³΄λ‹€ λΉ λ₯΄κ³ , 자주 μ•‘μ„ΈμŠ€λ˜λŠ” 데이터λ₯Ό 보유

어디에 μ‚¬μš©ν•˜λŠ”κ°€?

ν•˜λ“œμ›¨μ–΄, 운영체제, μ›Ή λΈŒλΌμš°μ €, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ“±μ—μ„œ λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©




μ›Ή μ„œλΉ„μŠ€μ— μ‚¬μš©ν•˜λŠ” μΊμ‹œλ“€

image

캐싱은 μ›Ή λΈŒλΌμš°μ €λΆ€ν„° μ›Ήμ„œλ²„μ™€ ν•˜λ“œλ””μŠ€ν¬ 및 CPU에 이λ₯΄κΈ°κΉŒμ§€ λͺ¨λ“  곳에 μ μš©λœλ‹€.




μ›Ή μΊμ‹œ

λ„€νŠΈμ›Œν¬λ₯Ό 톡해 무언가λ₯Ό κ°€μ Έμ˜€λŠ” μž‘μ—…μ€ 느린 λ™μ‹œμ— λΉ„μš©λ„ 많이 λ“ λ‹€. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­κ³Ό μ‘λ‹΅μ˜ 볡사본을 μ €μž₯ν–ˆλ‹€κ°€ λ™μΌν•œ URL에 λŒ€ν•œ μš”μ²­μ΄ 있으면 μ„œλ²„μ— λ‹€μ‹œ μš”μ²­ν•˜μ§€ μ•Šκ³ , μ €μž₯ν•΄ λ‘” λ¦¬μ†ŒμŠ€λ₯Ό μ„œλΉ™ν•˜κ±°λ‚˜ μž¬μ‚¬μš©ν•˜λŠ” 것을 μ›Ή μΊμ‹œ(web cache)라 ν•œλ‹€

이점
  • latency μ ˆμ•½ - μ„œλ²„μ— μš”μ²­μ„ ν•˜κ³  기닀릴 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ‹œκ°„μ΄ μ ˆμ•½λœλ‹€.
  • λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ μ ˆμ•½ - λ¦¬μ†ŒμŠ€λ₯Ό μž¬μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©ν•˜λŠ” λŒ€μ—­ν­μ΄ 쀄어든닀. λ§Œμ•½ 데이터 톡신에 λΉ„μš©μ΄ λ“ λ‹€λ©΄, λΉ„μš©μ„ μ ˆκ°ν•  수 μžˆλ‹€.
μ’…λ₯˜

CDN (Contents Delivery Network), Proxy Server (Forward Proxy, Reverse Proxy, web accelerator Β·Β·Β·. ), load balancer, browser cacheΒ·Β·Β·.




private cache, shared cache

private, shared

private(local) cache

단일 μ‚¬μš©μžλ₯Ό μœ„ν•œ μΊμ‹œμ΄λ‹€. λΈŒλΌμš°μ €μ— μ €μž₯λ˜λŠ” μΊμ‹œλ‘œ, λ’€λ‘œ κ°€κΈ°, μ•žμœΌλ‘œ κ°€κΈ°, μƒˆλ‘œ κ³ μΉ¨λ“± λ°©λ¬Έν–ˆλ˜ νŽ˜μ΄μ§€μ— μ‚¬μš©λœλ‹€.

shared cache

λ‹€μˆ˜μ˜ μ‚¬μš©μžλ₯Ό μœ„ν•œ μΊμ‹œμ΄λ‹€. 인기글 같이 많이 μ‘°νšŒκ°€ λ˜λŠ” λ¦¬μ†ŒμŠ€λ“€μ„ μ €μž₯ν•œλ‹€.




πŸ“Œ γ€€ μΊμ‹œμ˜ λŒ€μƒ

μΊμ‹œ ν‚€ : μš”μ²­ λ©”μ„œλ“œ + λŒ€μƒ URI γ€€ γ€€ GET /files

  • GET μš”μ²­μ˜ μ„±κ³΅ν•œ κ²°κ³Ό: HTML, JS, CSS, 이미지 λ“± 정적 λ¦¬μ†ŒμŠ€ νŒŒμΌμ— λŒ€ν•œ GET μš”μ²­μ΄ μ„±κ³΅ν–ˆμ„ λ•Œμ˜ κ²°κ³Ό 200 OK
  • 영ꡬ적인 λ¦¬λ‹€μ΄λ ‰νŠΈ: 301 응닡
  • νŽ˜μ΄μ§€λ₯Ό 찾을 수 μ—†μŒ: 404 응닡
  • μ™„μ „ν•˜μ§€ μ•Šμ€ κ²°κ³Ό : 206 (뢀뢄적인 컨텐츠) 응닡
  • μΊμ‹œ ν‚€λ‘œ μ‚¬μš©ν•˜κΈ°μ— μ μ ˆν•œ 무언가가 μ •μ˜λœ 경우의 GET μ΄μ™Έμ˜ 응닡 (?)



πŸ“‹ γ€€ λΈŒλΌμš°μ € μΊμ‹œ

image-20200708114852209

λΈŒλΌμš°μ € μΊμ‹œλŠ” ν•˜λ“œ λ””μŠ€ν¬λ‚˜ λ©”λͺ¨λ¦¬μ˜ ν•œ 뢀뢄에 μ €μž₯ν•œλ‹€. λΈŒλΌμš°μ €κ°€ μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  HTTP μš”μ²­μ€ λ¨Όμ € μš”μ²­ν•˜κΈ° 전에 μ‚¬μš©ν•  수 μžˆλŠ” μœ νš¨ν•œ μΊμ‹œλœ 응닡이 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λΈŒλΌμš°μ € μΊμ‹œλ‘œ μ „μ†‘ν•œλ‹€. μΌμΉ˜ν•˜λŠ” 응닡이 있으면 μΊμ‹œμ—μ„œ μ½λŠ”λ‹€.

μΊμ‹œμ— μ‚¬μš©ν•˜λŠ” λ‹€μŒμ˜ APIλŠ” λͺ¨λ“  λΈŒλΌμš°μ €μ—μ„œ μ§€μ›λœλ‹€.

  • Cache-Control : μ–΄λ–»κ²Œ, μ–Όλ§ˆλ‚˜, λˆ„κ°€ μΊμ‹œν• μ§€
  • ETag : λΈŒλΌμš°μ €μ—μ„œ 만료된 응닡에 λŒ€ν•΄ λ¦¬μ†ŒμŠ€κ°€ λ°”λ€Œμ—ˆλŠ”μ§€μ— λŒ€ν•œ μœ νš¨μ„± 검사
  • Last-Modified : ETag와 동일. ν•˜μ§€λ§Œ 토큰이 μ•„λ‹Œ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μœ νš¨μ„± 검사

이점

  • μ„œλ²„ μΈ‘μ—μ„œλŠ” ν•΄λ‹Ή μš”μ²­μ— λŒ€ν•œ 응닡 λ¦¬μ†ŒμŠ€λ₯Ό λ‹€ 보내주지 μ•Šμ•„λ„ λœλ‹€
  • λΈŒλΌμš°μ €λŠ” μš”μ²­μ— λŒ€ν•œ 응닡을 기닀리지 μ•Šμ•„λ„ λœλ‹€
  • 데이터 톡신에 λ“œλŠ” λΉ„μš©μ„ μ ˆκ°ν•  수 μžˆλ‹€

λ©”λͺ¨λ¦¬ μΊμ‹œλŠ” λΈŒλΌμš°μ €λ₯Ό 닫을 λ•ŒκΉŒμ§€ 컨텐츠 μ‚¬μš©ν•˜κ³ , λ””μŠ€ν¬ μΊμ‹œλŠ” 영ꡬ적으둜 λ™μž‘ν•œλ‹€.

πŸ˜ƒ λΈŒλΌμš°μ €κ°€ μ–΄λ–»κ²Œ μ •ν•˜λŠ”μ§€λŠ” λͺ¨λ₯΄κ² μŒ




πŸ“Œ γ€€ 기본적인 λ™μž‘ 원리

HTTP μš”μ²­

λΈŒλΌμš°μ €κ°€ λ§Œλ“œλŠ” λͺ¨λ“  HTTP μš”μ²­μ€ λ¨Όμ € λΈŒλΌμš°μ € μΊμ‹œλ‘œ λΌμš°νŒ…λ˜μ–΄, λ„€νŠΈμ›Œν¬ μš”μ²­ μ „ μ‚¬μš©ν•  수 μžˆλŠ” μΊμ‹œλœ 응닡이 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. μΊμ‹œλœ 응닡이 있고, μœ νš¨ν•˜λ‹€λ©΄ μš”μ²­μ„ 보내지 μ•Šκ³  ν•΄λ‹Ή 응닡을 읽어 μ‚¬μš©ν•œλ‹€ β†’ λ ˆμ΄ν„΄μ‹œ 및 νŠΈλž˜ν”½ 절감

  1. 응닡 헀더가 μΊμ‹œμ— λ³΄κ΄€ν•˜μ§€ 말라고 μ§€μ‹œν•˜λ©΄ μΊμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.
  2. μš”μ²­μ΄ 인증 λ˜λŠ” λ³΄μ•ˆ (예 : HTTPS) 인 경우, 곡유 μΊμ‹œμ— μΊμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.
  3. λ‹€μŒκ³Ό 같은 κ²½μš°μ—λŠ” μΊμ‹œν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.
    • 만료 μ‹œκ°„μ΄λ‚˜ 유효 μ‹œκ°„μ΄ 헀더에 있고, μ—¬μ „νžˆ μΊμ‹œμ˜ 유효 μ‹œκ°„μ΄ λ‚¨μ•„μžˆμ„ λ•Œ
    • μΊμ‹œκ°€ μ΅œκ·Όμ— ν‘œμ‹œλ₯Όλ³΄κ³  비ꡐ적 였래 전에 μˆ˜μ • 된 경우 (?)
  4. λ¦¬μ†ŒμŠ€μ˜ μΊμ‹œκ°€ λ§Œλ£Œλμ„ λ•Œ, μ„œλ²„λŠ” 이λ₯Ό κ²€μ¦ν•˜μ—¬ μ—¬μ „νžˆ μ‚¬μš©ν•΄λ„ λ˜λŠ”μ§€ μ•Œλ €μ€€λ‹€.
  5. νŠΉμ • 상황 (예 : λ„€νŠΈμ›Œν¬μ™€μ˜ 연결이 λŠμ–΄μ§„ 경우)μ—μ„œ μΊμ‹œλŠ” μ„œλ²„μ— κ²€μ¦ν•˜μ§€ μ•Šκ³ , 만료된 μΊμ‹œλ₯Ό μ‚¬μš©ν•œλ‹€.

ETagλ‚˜ Last-modified κ°€ 응닡 헀더에 μ—†λ‹€λ©΄, 일반적으둜 μΊμ‹œν•  수 μ—†λ‹€κ³  κ°„μ£Όλœλ‹€. (항상 그런건 μ•„λ‹˜)

μΊμ‹œμ—μ„œ 유효 μ‹œκ°„κ³Ό 검증은 컨텐츠λ₯Ό μž¬μ‚¬μš©μ— μžˆμ–΄ μ€‘μš”ν•˜λ‹€. μΊμ‹œμ—μ„œ μœ νš¨κΈ°κ°„μ΄ λ§Œλ£Œλ˜μ—ˆμ„ 경우, μ„œλ²„μ—μ„œ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό 응닡받아 μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, μœ νš¨μ„± 검사λ₯Ό 톡해 λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ•˜μ„ 경우 μΊμ‹œλœ 응닡을 μ‚¬μš©ν•œλ‹€.




πŸ“Œ γ€€ μΊμ‹œ μ œμ–΄

HTTP/1.1 μŠ€νŽ™μ—μ„œ μš”μ²­ 헀더와 응닡 ν—€λ”μ˜ μ‘°ν•©μœΌλ‘œ μ œμ–΄ν•œλ‹€.

image-20200708135120492

πŸ“Œ γ€€ Cache-Control

μΊμ‹œν•˜μ§€ μ•ŠμŒ

Cache-Control: no-store
Cache-Control: no-cache, no-store, must-revalidate

μΊμ‹œν•˜μ§€λ§Œ μž¬κ²€μ¦

Cache-Control: no-cache
  • no-store: μ–΄λ””μ„œλ“  μΊμ‹œν•˜μ§€ 마라

    맀 μš”μ²­μ΄ μ„œλ²„λ‘œ μ „μ†‘λ˜κ³  응닡 λ°›μŒ

  • no-cache: 맀번 μ‚¬μš©ν•˜κΈ° μ „ μ„œλ²„μ— μ‚¬μš©ν•΄λ„ λ˜λƒκ³  물어봐라

    Etagκ°€ μžˆμ„ 경우, μΊμ‹œλœ μ‘λ‹΅μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜λŠ” 데 ν•œ 번 ν†΅μ‹ ν•˜μ§€λ§Œ, λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ€ 경우 λ‹€μš΄λ‘œλ“œλ°›μ§€ μ•Šμ„ 수 μžˆλ‹€.

  • must-revalidate : 만료된 μΊμ‹œλ§Œ 물어봐라

곡유 μΊμ‹œμ™€ 프라이빗 μΊμ‹œ

Cache-Control: private
Cache-Control: public
  • public 응닡은 λͺ¨λ“  κ³³μ—μ„œ μ €μž₯될 수 μžˆλ‹€.

    보톡 λͺ…μ‹œμ μΈ 캐싱 정보 max-age κ°€ 응닡이 μ–΄λŠ κ²½μš°μ—λ„ μΊμ‹œ κ°€λŠ₯ν•˜λ‹€κ³  λ‚˜νƒ€λ‚΄λ―€λ‘œ, λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. HTTP 인증으둜 보호된 νŽ˜μ΄μ§€λŠ” private둜 μ„€μ •λ˜μ–΄ 곡유 μΊμ‹œμ— μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€. 이 κ²½μš°μ— public으둜 λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•˜λ©΄ 인증이 된 μƒνƒœμ—λ„ μΊμ‹œν•œλ‹€.

  • private

    λΈŒλΌμš°μ €λ§Œ μΊμ‹œν•˜λ„λ‘ μ„€μ •ν•œλ‹€. 이 κ²½μš°μ— 곡유 μΊμ‹œ (ex, proxy) μ—μ„œλŠ” μΊμ‹œν•  수 μ—†λ‹€.

만료

Cache-Control: max-age=60

μΊμ‹œν•œ 응닡을 μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€ μ‹œκ°„ (초)이닀. μœ„μ˜ 경우 60초 λ™μ•ˆ μΊμ‹œλ˜μ–΄ μž¬μ‚¬μš©ν•  수 μžˆλ‹€.




πŸ“Œ γ€€ μœ νš¨μ„± 검사

etag

Etag와 Last-Modified λ₯Ό μ΄μš©ν•΄ 만료된 λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μž¬κ²€μ¦μ„ μš”μ²­ν•œλ‹€.

처음 μš”μ²­ ν›„ 120μ΄ˆκ°€ μ§€λ‚œ 후에 λ™μΌν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μƒˆ μš”μ²­μ„ ν–ˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž. λΈŒλΌμš°μ €λŠ” 둜컬 μΊμ‹œλ₯Ό ν™•μΈν•˜κ³  이전 응닡을 μ°ΎλŠ”λ‹€. ν•˜μ§€λ§Œ λΈŒλΌμš°μ €λŠ” 이전 응닡이 λ§Œλ£Œλ˜μ–΄ μ‚¬μš©ν•  수 μ—†λ‹€. 이 μ‹œμ μ—μ„œ λΈŒλΌμš°μ €λŠ” μƒˆ μš”μ²­μ„ 보내고 전체 λ¦¬μ†ŒμŠ€λ₯Ό λ‹€μ‹œ λ‹€μš΄λ‘œλ“œν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ, λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ€ 경우 이미 μΊμ‹œμ— μžˆλŠ” λ™μΌν•œ 정보λ₯Ό λ‹€μš΄λ‘œλ“œ ν•  μ΄μœ κ°€ 없기에 이 μž‘μ—…μ€ λΉ„νš¨μœ¨μ μ΄λ‹€.

Etag 의 μœ νš¨μ„± 검사 토큰은 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‚˜μ™”λ‹€. μ„œλ²„λŠ” 일반적으둜 λ¦¬μ†ŒμŠ€μ— ν•΄μ‹œλ‚˜ 토큰을 μƒμ„±ν•˜κ³  λ°˜ν™˜ν•œλ‹€. 토큰이 μœ νš¨ν•˜λ‹€λ©΄, λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— λ‹€μš΄λ‘œλ“œλ₯Ό κ±΄λ„ˆ λ›Έ 수 μžˆλ‹€.

If-None-Match: ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ˜ Etag κ°’ 

λΈŒλΌμš°μ €λŠ” 만료된 λ¦¬μ†ŒμŠ€λ₯Ό 재 μš”μ²­μ‹œ, HTTP μš”μ²­ 헀더에 ETag 토큰을 μžλ™μœΌλ‘œ μΆ”κ°€ν•œλ‹€. μ„œλ²„λŠ” ν˜„μž¬ λ¦¬μ†ŒμŠ€μ™€ λΉ„κ΅ν•˜μ—¬ 토큰을 κ²€μ‚¬ν•˜κ³ , 토큰이 λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ μΊμ‹œν•œ λ¦¬μ†ŒμŠ€λ₯Ό 계속 μ‚¬μš©ν•˜λΌλŠ” 304 Not Modified 응닡을 λ°˜ν™˜ν•œλ‹€. 응닡을 μ „μ†‘μ‹œμ— 전솑할 데이터가 거의 μ—†μœΌλ―€λ‘œ, μš”μ²­λœ λ¦¬μ†ŒμŠ€λ₯Ό λ‹€μ‹œ λ³΄λ‚΄λŠ” 것보닀 훨씬 λΉ λ₯΄κ³ , 톡신 λΉ„μš©μ„ μ ˆκ°ν•  수 μžˆλ‹€.

유효 수λͺ…
Cache-control: max-age=N

μœ„μ˜ 경우 μΊμ‹œμ˜ 유효 수λͺ…은 Nκ³Ό λ™μΌν•˜λ‹€. λ§Œμ•½ 이 헀더가 μ—†λ‹€λ©΄, Expires 헀더λ₯Ό κ²€μ‚¬ν•œλ‹€. Expires 헀더도 μ—†λ‹€λ©΄ Last-Modified 헀더λ₯Ό μ°ΎλŠ”λ‹€. 유효 수λͺ…은 λ‹€μŒκ³Ό 같이 κ³„μ‚°λœλ‹€. μœ„μ— μžˆμ„μˆ˜λ‘ μš°μ„  μˆœμœ„κ°€ λ†’λ‹€.

유효 수λͺ…

= max-age

= Expires 헀더 - Date 헀더

= ( Date 헀더 - Last-Modified 헀더 ) / 10




πŸ“Œ γ€€ μ–΄λ–»κ²Œ μΊμ‹œ 헀더λ₯Ό κ΅¬μ„±ν• κΉŒ

μΊμ‹œ μ •μ±…

μ΅œλŒ€ν•œ λ§Žμ€ 응닡을 μ΅œλŒ€ν•œ 길게 μΊμ‹œν•˜κ³ , 각 응닡에 μž¬κ²€μ¦μ΄ κ°€λŠ₯ν•˜λ„λ‘ μœ νš¨μ„± 검사λ₯Ό ν•˜μž!




πŸ“Œ γ€€ μ΅œλŒ€ν•œ μΊμ‹œλœ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ, μ›ΉνŽ˜μ΄μ§€ μ—…λ°μ΄νŠΈμ‹œ μΊμ‹œλœ 응닡을 λ¬΄μ‹œν•˜κ³  μ‹Άλ‹€

Cache-Control: max-age=31536000

μΊμ‹œλœ λ¦¬μ†ŒμŠ€λŠ” μΊμ‹œ 유효 수λͺ…λ§ŒνΌ 별닀λ₯Έ 이유(μ‚¬μš©μžκ°€ λΈŒλΌμš°μ € μΊμ‹œλ₯Ό 지움)κ°€ 없을 λ•ŒκΉŒμ§€ ν•΄λ‹Ή μΊμ‹œλ₯Ό μž¬μ‚¬μš©ν•œλ‹€. 효율적으둜 μ„œλΉ™ν•˜κΈ° μœ„ν•΄ μΊμ‹œ 기간을 길게 μž‘μ•˜λŠ”λ°, μ›ΉνŽ˜μ΄μ§€λ₯Ό μˆ˜μ •ν–ˆλ‹€λ©΄ μ–΄λ–¨κΉŒ? μ„œλ²„λŠ” μš”μ²­μ„ 받지 μ•ŠλŠ” 이상, ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ—…λ°μ΄νŠΈλœ 사싀을 μ•Œλ¦΄ 수 μ—†λ‹€. 이 κ²½μš°μ—λŠ” μΊμ‹œλ˜μ§€ μ•Šμ€ λΈŒλΌμš°μ €λŠ” μ—…λ°μ΄νŠΈλœ μ›ΉνŽ˜μ΄μ§€λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, μΊμ‹œλœ λΈŒλΌμš°μ €λŠ” 이전 λ²„μ „μ˜ νŒŒμΌμ„ μ‚¬μš©ν•΄ μ—…λ°μ΄νŠΈ λ˜μ§€ μ•Šμ€ μ›Ή μ‚¬μ΄νŠΈλ₯Ό 보게 될 수 μžˆλ‹€. μ΅œλŒ€ν•œ 길게 μΊμ‹œν•˜λ©΄μ„œ, λΉ λ₯Έ μ—…λ°μ΄νŠΈλ₯Ό ν•  수 μžˆμ„κΉŒ? 파일의 λ‚΄μš©μ΄ λ³€κ²½λ˜λ©΄ λΈŒλΌμš°μ €κ°€ μΊμ‹œλœ κΈ°μ‘΄ νŒŒμΌμ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ νŒŒμΌμ„ 내렀받도둝 ν•΄μ•Ό ν•œλ‹€.

λ¦¬μ†ŒμŠ€μ˜ URL을 λ³€κ²½ν•˜κ³ , 컨텐츠가 변경될 λ•Œλ§ˆλ‹€ μ‚¬μš©μžκ°€ μƒˆμ‘λ‹΅μ„ λ‹€μš΄λ°›λ„λ‘ ν•˜λ©΄ λœλ‹€.

이미지

  • HTML

    no-cache 섀정은 맀 μš”μ²­λ§ˆλ‹€ μž¬κ²€μ¦μ„ 톡해 컨텐츠가 λ³€κ²½λœ κ²½μš°μ—λ§Œ μ΅œμ‹  버전을 κ°€μ Έμ˜€κ²Œ ν•œλ‹€. html μ•ˆμ— linkλ‚˜ script νƒœκ·Έ μ•ˆμ— μžˆλŠ” css, js 파일 κ²½λ‘œκ°€ ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ— 이 νŒŒμΌλ“€μ˜ 컨텐츠가 λ³€κ²½λ˜λ©΄, νŽ˜μ΄μ§€μ˜ HTML λ˜ν•œ λ³€κ²½λ˜μ–΄ μš”μ²­μ‹œ μ—…λ°μ΄νŠΈ 된 λ‚΄μš©μ„ λ‹€μš΄λ‘œλ“œν•˜κ²Œ λœλ‹€.

  • CSS, JS

    CDN 등이 μΊμ‹œν•  수 μžˆλ‹€. μœ„μ˜ κ²½μš°μ— CSSκ°€ μ—…λ°μ΄νŠΈλ˜λ©΄ html λ‚΄μ˜ URL도 λ³€κ²½λ˜κΈ° λ•Œλ¬Έμ— 1λ…„μ΄λΌλŠ” κΈ΄ μ‹œκ°„ν›„μ— λ§Œλ£Œλ˜λ„λ‘ μ„€μ •ν•  수 μžˆλ‹€.




πŸ“Œ γ€€ μ°Έκ³ , 더 읽어보면 쒋을 것듀

MDN - HTTP caching

λΈŒλΌμš°μ €μ˜_μΊμ‹œ_λ§€μ»€λ‹ˆμ¦˜

μ›Ή 캐쉬- κ°“λŒ€ν¬μ˜ μž‘μ€κ³΅κ°„

HTTP 캐싱

μ›Ή μΊμ‹±μ˜ μˆ¨κ²¨μ§„ μš”μ†Œλ“€

μ›Ή μΊμ‹œ(WEB Cache)λž€ 무엇인가?

The hidden components of Web Caching

[10λΆ„ ν…Œμ½”ν†‘] 🐻큰곰의 Cache

Caching Tutorial

Express.js μ„œλ²„λŠ” μ™œ 304λ₯Ό λ°˜ν™˜ν•˜λŠ” 걸까?

Express.static()

Module ngx_http_headers_module

⚠️ **GitHub.com Fallback** ⚠️