μΉ μΊμ
μΉ μΊμλ₯Ό κ²μ¦ν μ μλ μ¬λ¬ ν€λ
νλ‘μ μΊμ
- μΊμ(cache)λ μ»΄ν¨ν° κ³Όνμμ λ°μ΄ν°λ κ°μ 미리 볡μ¬ν΄ λλ μμ μ₯μμ΄λ€.
- μΉμμλ λμΌν μμ²μ κ²½μ° κ°μ λ°μ΄ν°λ₯Ό λ€μ λ€μ΄λ‘λνμ§ μκ³ μ΄λ₯Ό μΉ μΊμλ‘ μ μ₯ν΄μ λΉ λ₯΄κ² λΆλ¬μ¬ μ μλ€.
- κ°μΈ μ»΄ν¨ν°μ μ μ₯νλ νλΌμ΄λΉ μΊμ & μ¬λ¬ μ μ μκ² κ³΅ν΅μ μΌλ‘ 보μ¬μ§λ λ°μ΄ν°μ κ²½μ° νλ‘μ μλ²μ λ³λλ‘ μΊμλ₯Ό μ μ₯ν΄μ μ¬μ©μ κ²½νμ ν₯μμν¬ μ μλ€.
HTTP ν€λ - μΊμμ κ΄λ ¨λ
if) μΊμ(λ°μ΄ν°λ κ°μ 미리 볡μ¬ν΄ λλ μμ μ₯μ)κ° μμ κ²½μ° {
μμ μ¬λ‘μ²λΌ λμΌν μ΄λ―Έμ§λ₯Ό μμ²νλ λ° λ€νΈμν¬λ₯Ό ν΅ν΄ κ°μ λ°μ΄ν°λ₯Ό λ λ€μ΄λ°μμΌνλ€.
}
κ²°κ³Ό
β₯ μ©λμ΄ ν΄μλ‘ λΉμ©μ΄ 컀μ§κ³ λΈλΌμ°μ μ λ‘λ© μλκ° λλ €μ§λ€.
β₯ λλ¦° μ¬μ©μ κ²½ν μ 곡
if) μΊμ(λ°μ΄ν°λ κ°μ 미리 볡μ¬ν΄ λλ μμ μ₯μ)κ° μλ κ²½μ° {
κ³μ°μ΄λ μ κ·Ό μκ° μμ΄ λ λΉ λ₯Έ μλλ‘ λ°μ΄ν°μ μ κ·Όν μ μλ€.
}
β₯ μΊμλ μΊμμ μ κ·Ό μκ°μ λΉν΄ μλ λ°μ΄ν°λ₯Ό μ κ·Όνλ μκ°μ΄ μ€λ 걸리λ κ²½μ°λ κ°μ λ€μ κ³μ°νλ μκ°μ μ μ½νκ³ μΆμ κ²½μ°μ μ¬μ©νλ€.
λΈλΌμ°μ μ μΊμλ₯Ό μ μ₯ν λ ν€λμ cache-control μμ±μ ν΅ν΄ μΊμκ° μ ν¨ν μκ°μ μ§μ ν μ μλ€.
ex) Cache-Control: max-age = 60
π 60μ΄ λμμ ν΄λΉ μΊμκ° μ ν¨νλ€.
μλ΅μ λ°μμ λ λΈλΌμ°μ μΊμμ ν΄λΉ μλ΅ κ²°κ³Όλ₯Ό μ μ₯νλ©° μ΄λ 60μ΄ κ° μ ν¨νλ€.
if) μΊμλ₯Ό μ μ©νλλ° μΊμ μκ°μ΄ μ΄κ³Όλμ§ μμμ κ²½μ° {
μ ν¨ν μΊμμ΄λ―λ‘ ν΄λΉ μΊμμμ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€.
}
κ²°κ³Ό
β₯ μΊμ λλΆμ μΊμ κ°λ₯ μκ°λμ λ€νΈμν¬λ₯Ό μ¬μ©νμ§ μμλ λλ€.
β₯ λΉμΌ λ€νΈμν¬ μ¬μ©λμ μ€μΌ μ μλ€.
β₯ λΈλΌμ°μ λ‘λ© μλκ° λΉ¨λΌ, λΉ λ₯Έ μ¬μ©μ κ²½νμ μ 곡νλ€.
if) μΊμλ₯Ό μ μ©νλλ° μΊμ μκ°μ΄ μ΄κ³Όν κ²½μ° {
λ€μ μλ²μ μμ²νκ³ λ°μ΄ν°λ₯Ό μλ΅λ°κ³ , μΊμλ₯Ό κ°±μ νλ€.
}
β₯ μ΄λ λ€μ λ€νΈμν¬ λ€μ΄λ‘λκ° λ°μνλ€.
μλ΅ κ²°κ³Όλ₯Ό λΈλΌμ°μ κ° λ λλ§νλ©΄ λΈλΌμ°μ μΊμλ κΈ°μ‘΄ μΊμλ₯Ό μ§μ°κ³ μλ‘μ΄ μΊμλ‘ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈνλ€. π μΊμ μ ν¨ μκ°μ΄ λ€μ μ΄κΈ°νλλ€.
μΊμλ₯Ό μ μ΄ν μ μλ κ²μ¦ ν€λ & μ‘°κ±΄λΆ μμ²
π€λ§μ½ μΊμ μ ν¨μκ°μ΄ μ§λ¬μ§λ§, λ³κ²½μ΄ μλ€λ©΄ κΈ°μ‘΄ λ°μ΄ν°λ₯Ό μ΄λ₯Ό κ²μ¦νκ³ μ¬μ©νλ λ°©λ²μ΄ μμκΉ??π€
κ²μ¦ ν€λ Last Modifiedλ₯Ό μ΄μ©ν΄μ μΊμμ μμ μκ°, λ°μ΄ν°κ° λ§μ§λ§μΌλ‘ μμ λ μκ° μ 보λ₯Ό ν€λμ ν¬ν¨νλ€.
β₯ μλ΅ κ²°κ³Όλ₯Ό μΊμμ μ μ₯ν λ λ°μ΄ν° μ΅μ’ μμ μΌλ μ μ₯λλ€.
π μΊμ μ ν¨μκ°μ΄ μ΄κ³ΌλλλΌλ If-Modified-Since ν€λλ₯Ό μ΄μ©ν΄μ μ‘°κ±΄λΆ μμ²μ ν μ μλ€.
Last-Modified & If-Modified-Since μλλ°©μ
1. λ°μ΄ν°κ° μμ λμλμ§ κ²μ¦
2. μμ λμ§ μμλ€λ©΄ μλ²μμ ν΄λΌμ΄μΈνΈλ‘ λ°λλ₯Ό μ μΈν HTTP ν€λλ§ μ μ‘
(μλ²μ ν΄λΉ μλ£μ μ΅μ’ μμ μΌκ³Ό λΉκ΅ν΄μ λ°μ΄ν°κ° μμ μ΄ μλμμ κ²½μ° μλ΅ λ©μμ§μ μ΄λ₯Ό λ΄μμ μλ €μ€λ€.
μ΄λ HTTP Bodyλ μλ΅ λ°μ΄ν°κ° μμΌλ©° μν μ½λλ 304 Not Modifiedλ‘ λ³κ²½λ κ²μ΄ μλ€λ λ»μ΄λ€. μ μ‘ λ°μ΄ν°μ λ°λκ° λΉ μ‘κΈ° λλ¬Έμ ν€λλ§ ν¬ν¨λ 0.1Mλ§ μ μ‘λλ€. )
3. λΈλΌμ°μ μΊμμμ μλ΅ κ²°κ³Όλ₯Ό μ¬μ¬μ©, ν€λ λ©νλ°μ΄ν° λν κ°±μ
4. λΈλΌμ°μ λ μΊμμμ μ‘°νν λ°μ΄ν°λ₯Ό λ λλ§
Last-Modified & If-Modified-Since
π ν΄λΌμ΄μΈνΈμμλ ν΄λΉ μλ΅μ λ°μ λ€ μΊμλ₯Ό κ°±μ ν΄μ£Όκ³ λ€μ μΌμ μκ° λμ μ ν¨νκ² λλ€.
π ν΄λΌμ΄μΈνΈλ μΊμμ μ μ₯λμ΄ μλ λ°μ΄ν°λ₯Ό μ¬νμ©νλ€.
π κ²°κ³Όμ μΌλ‘ λ€νΈμν¬ λ€μ΄λ‘λκ° λ°μνμ§λ§ μ©λμ΄ μ μ ν€λ μ λ³΄λ§ λ€μ΄λ‘λ
π π λ§€μ° μ€μ©μ μ΄λ€.
λ¨μ
- 1μ΄ λ―Έλ§ λ¨μλ‘ μΊμ μ‘°μ μ΄ λΆκ°λ₯νλ€.
- λ μ§ κΈ°λ°μ λ‘μ§μ μ¬μ©νλ€.
- λ°μ΄ν°λ₯Ό μμ ν΄μ λ μ§κ° λ€λ₯΄μ§λ§, κ°μ λ°μ΄ν°λ₯Ό μμ ν΄μ λ°μ΄ν° κ²°κ³Όκ° κ°μ κ²½μ° λͺ»μ΄λ€.
- μλ²μμ λ³λμ μΊμ λ‘μ§μ κ΄λ¦¬νκ³ μΆμ κ²½μ° λͺ»μ΄λ€.
ex) μ€νμ΄μ€λ μ£Όμμ²λΌ ν¬κ² μν₯μ΄ μλ λ³κ²½μμ μΊμλ₯Ό μ μ§νκ³ μΆμ κ²½μ°
ETag & If-None-Match κ²μ¦ ν€λ (Last-Modified & If-Modified-Since λ³΄λ€ κ°λ¨ν λ°©μ)
ETag(entity tag)
- μΊμμ© λ°μ΄ν°μ μμμ κ³ μ ν λ²μ μ΄λ¦μ λ¬μλ
- λ°μ΄ν°κ° λ³κ²½λλ©΄ μ΄ μ΄λ¦μ λ°κΏμ λ³κ²½νλ€. (hash λ€μ μμ±)
- λ¨μνκ² ETagλ§ λ³΄λ΄μ κ°μΌλ©΄ μ μ§, λ€λ₯΄λ©΄ λ€μ λ°λ λ°©μ
μλ²μμ ν€λμ ETagλ₯Ό μμ±ν΄μ μλ΅νκ³ , ν΄λΌμ΄μΈνΈμ μΊμμμ ν΄λΉ ETag κ°μ μ μ₯νλ€.
μλ²μμ μμ ν μΊμλ₯Ό 컨νΈλ‘€νκ³ μΆμ κ²½μ° ETagλ₯Ό μ¬μ©ν μ μλ€.
ETag & If-None-Match μλ λ°©μ
1. λ°μ΄ν°κ° μμ λμλμ§ ETagλ₯Ό μ΄μ©ν΄μ κ²μ¦νλ€.
2. μμ λμ§ μμλ€λ©΄ λ°λλ₯Ό μ μΈν HTTP ν€λλ§ μ μ‘νλ€.
3. λΈλΌμ°μ μΊμμμ μλ΅ κ²°κ³Όλ₯Ό μ¬μ¬μ©, ν€λ λ©νλ°μ΄ν°λ κ°±μ νλ€.
4. λΈλΌμ°μ μΊμμμλ μλ΅ κ²°κ³Όλ₯Ό μ¬μ¬μ©νκ³ ν€λ λ°μ΄ν°λ₯Ό κ°±μ νλ€.
λ§μ½ μΊμ μκ°μ΄ μ΄κ³Όλμ΄ λ€μ μμ²μ ν΄μΌνλ κ²½μ°, μ΄λ ETag κ°μ κ²μ¦νλ If-None-Matchλ₯Ό μμ² ν€λμ μμ±ν΄μ 보λΈλ€.
μλ²μμ λ°μ΄ν°κ° λ³κ²½λμ§ μμμ κ²½μ°, ETagλ λμΌνκΈ°μ If-None-Matchλ κ±°μ§μ΄ λλ€.
π μλ²μμ 304 Not Modifiedλ₯Ό μλ΅νλ©° μ΄λ μμ HTTP Bodyλ μλ€.
μ 리
λ¨μνκ² ETagλ§ λ³΄λ΄μ κ°μΌλ©΄ μ μ§, λ€λ₯΄λ©΄ λ€μ λ°λ λ°©μ
μΊμ μ μ΄ λ‘μ§μ μλ²μμ μμ ν κ΄λ¦¬
ν΄λΌμ΄μΈνΈλ λ¨μν μ΄ κ°μ μλ²μ μ 곡 (ν΄λΌμ΄μΈνΈλ μΊμ λ©μ»€λμ¦μ λͺ¨λ¦)
ex) μ ν리μΌμ΄μ λ°°ν¬ μ£ΌκΈ°μ λ§μΆ°μ ETag κ°±μ , λ² ν μ€ν κΈ°κ°μΈ 3μΌλμ νμΌμ΄ λ³κ²½λμ΄λ ETagλ₯Ό λμΌνκ² μ μ§
μ€μ λ‘λ ETag, last-modified λ λ€ κ°μ΄ μ΄λ€.
κ·Έ μ΄μ λ νΉμλΌλ λ€μ΄μμ§ μμ κ²½μ°λ₯Ό λλΉν΄μ λ λ€ λ³΄λΈλ€.(λ μ€μ νλμ κ±Έλ¦¬κ² μ§λΌλ λ§μμΌλ‘ )
Cache-Control = μΊμ μ§μμ΄
- Cache-control : max-age / μΊμ μ ν¨ μκ°. μ΄ λ¨μ
- Cache-control : no-cache / λ°μ΄ν°λ μΊμν΄λ λμ§λ§, νμ μ€λ¦¬μ§λ μλ²μ κ²μ¦νκ³ μ¬μ©νλ€. μ μλ²μ μ κ·Όμ΄ λΆκ°ν λ μΊμ μλ² μ€μ μ λ°λΌ μΊμ λ°μ΄ν°λ₯Ό μΈ μ μλ€.
- Cache-control : no-store / λ°μ΄ν°μ λ―Όκ°ν μ λ³΄κ° μμΌλ―λ‘ μ μ₯νλ©΄ μλλ€. (λ©λͺ¨λ¦¬μμ μ¬μ©νκ³ μ΅λν 빨리 μμ )
Expires = μΊμ λ§λ£μΌ μ§μ (νμ νΈν)
- μΊμ λ§λ£μΌμ μ νν λ μ§λ‘ μ§μ
- HTTP 1.0 λΆν° μ¬μ©
- μ§κΈμ λ μ μ°ν Cache-control : max-age κΆμ₯
- Cache-control : max-ageμ ν¨κ» μ¬μ©νλ©΄ Expiresλ 무μλλ€.
νλ‘μ μλ²
νλ‘μλ?
ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μ λλ¦¬λ‘ ν΅μ μ μννλ κ²μ λ§νλ€.
κ·Έ μ€κ³ κΈ°λ₯μ νλ μλ²λ₯Ό νλ‘μ μλ²λΌκ³ νλ€.
ν΄λΌμ΄μΈνΈμ μ€λ¦¬μ§λ μλ² μ¬μ΄μ νλ‘μ μΊμ μλ²λ₯Ό λμ νμ¬ ν΄μΈμ μλ μ€λ¦¬μ§λ μλ²μ μ κ·Όνλ κ²λ³΄λ€ ν¨μ¬ λΉ λ₯Έ μλμ μλ£λ₯Ό κ°μ Έμ¬ μ μλ€. (μ¬λ¬ μ¬λμ΄ μ°Ύμ μλ£μΌμλ‘ μ΄λ―Έ μΊμμ λ±λ‘λμ΄ μκΈ°μ λΉ λ₯Έ μλλ‘ μλ£λ₯Ό κ°μ Έμ¬ μ μλ€.)
private μΊμ : ν΄λΌμ΄μΈνΈμμ μ¬μ©νκ³ μ μ₯νλ μΊμ,
public μΊμ : νλ‘μ μΊμ μλ²μ μΊμ
νλ‘μ μΊμμ κ΄λ ¨λ ν€λ - Cache-Control μΊμ μ§μμ΄
- Cache-control : public / μλ΅μ΄ public μΊμμ μ μ₯λμ΄λ λ¨
- Cache-control : private / μλ΅μ΄ ν΄λΉ μ¬μ©μλ§μ μν κ², private μΊμμ μ μ₯ν΄μΌ ν¨(κΈ°λ³Έκ°)
- Cache-control : s-maxage / νλ‘μ μΊμμλ§ μ μ©λλ max-age
- Age : 60 (HTTP ν€λ) / μ€λ¦¬μ§ μλ²μμ μλ΅ ν νλ‘μ μΊμ λ΄μ λ¨Έλ¬Έ μκ° (μ΄)
π€ν΄λΌμ΄μΈνΈκ° μΊμλ₯Ό μ μ©νμ§ μμλλ°, μΉ λΈλΌμ°μ κ° μμλ‘ μΊμ±μ ν λ, μ΄λ₯Ό 무ν¨ννλ λ°©λ²? π€
μΊμλ₯Ό 무ν¨νν μ μλ ν€λ - Cache-Control μΊμ μ§μμ΄
- Cache-control : no-cache / λ°μ΄ν°λ μΊμν΄λ λμ§λ§, νμ μ€λ¦¬μ§λ μλ²μ κ²μ¦νκ³ μ¬μ©(μ΄λ¦μ μ£ΌμνκΈ°!)
μ μλ²μμ κ²μ¦ ν 304 μλ΅μ νλ€.
λ§μ½ νλ‘μ μΊμ μλ²μ μ μλ² κ° λ€νΈμν¬ μ°κ²°μ΄ λ¨μ λμ΄ μ κ·Όμ΄ λΆκ°λ₯νλ€λ©΄, μ€λ₯κ° μλ μ€λλ λ°μ΄ν°λΌλ 보μ¬μ£ΌμλΌλ κ°λ μΌλ‘ 200 OKλ‘ μλ΅νλ€.
- Cache-control : no-store / λ°μ΄ν°μ λ―Όκ°ν μ λ³΄κ° μμ΄μ μ μ₯νλ©΄ μλλ€. (λ©λͺ¨λ¦¬μμ μ¬μ©νκ³ μ΅λν 빨리 μμ )
- Cache-control : must-revalidate / μΊμ λ§λ£ ν μ΅μ΄ μ‘°ν μ μ€λ¦¬μ§λ μλ²μ κ²μ¦νκΈ°.
(μ€λ¦¬μ§λ μλ² μ κ·Ό μ€ν¨ μ λ°λμ μ€λ₯κ° λ°μν΄μΌνλ€. 504 gateway timeout)
(must-revalidateλ μΊμ μ ν¨ μκ°μ΄λΌλ©΄ μΊμλ₯Ό μ¬μ©νλ€. )
μλ΅μ΄ μμΌλ©΄ λͺ»μ΄λ€.
- Pragma : no-cache / HTTP 1.0 νμ νΈν
! μΊμλ₯Ό 무ν¨νλ₯Ό νμ€νκ² ν΄μΌ νλ κ²½μ° Pragmaμ κ°μ νμ νΈνκΉμ§ ν¬ν¨νμ¬ μ μ©ν΄μΌ νλ€.
βοΈ ν΅μ₯ μκ³ λ± μ€μν μ λ³΄κ° μ μλ²λ₯Ό λͺ»λ°μλ€κ³ ν΄μ μμ λ°μ΄ν°λ‘ λ¨λ©΄ ν° λ¬Έμ κ° μκΈ°κΈ° λλ¬Έμ μ΄λ° κ²½μ°μλ Cache-control : must-revalidate λ₯Ό μ¨μΌ νλ€.