Cache λμμ ν΅μ¬μ μ¬κ²μ¦ μ£ΌκΈ°μ μ¬κ²μ¦ κΈ°μ€ μ£ΌκΈ°μ κ²μ¦ μ£ΌκΈ°μ κ²μ¦ μ£ΌκΈ°μ κ²μ¦ μ£ΌκΈ°μ κ²μ¦ μ£ΌκΈ°μ κ²μ¦
HTTP Cacheλ μΉ μ±λ₯ μ΅μ νμ μ€μν μν μ νμ§λ§, μ€μκ° λ°μ΄ν°λ₯Ό μ ννκ² λ°μνμ§λ μλλ€. μλ₯Ό λ€μ΄, μν κ³μ’ μκ³ μ²λΌ μ€μκ°μΌλ‘ λ³λλλ λ°μ΄ν°μ κ²½μ°, μΊμλ₯Ό ν΅ν΄ μλͺ»λ μ λ³΄κ° μ 곡 λ μ μλ€. λ§μ½ 100λ§ μμ΄ μΊμλμ΄ μλ μνμμ λμ κ³μ μ¬μ©νλ©΄, μ€μ μκ³ κ° -500λ§ μμ΄ λμ΄λ μΊμκ° κ°±μ λμ§ μλ ν 100λ§μ λ§ λ³΄μΌ μ μλ€.
μ΄λ¬ν μ΄μ λ‘ μ€μκ°μ±μ΄ μ€μν λ°μ΄ν°μλ μΊμ μ¬μ©μ μ μ€νκ² κ³ λ €ν΄μΌ νλ€.
μΊμμ μ€μ€μκ°μ± 보μ₯
μΊμλ μμ(λ°μꡬμ )μ μ₯μ μν μ λ΅μ΄λ€. κ·Έλ¬λ μ€μκ°μ±μ μμ ν¬κΈ°νλ€λ κ²μ΄ μλλΌ, μ¬κ²μ¦(revalidate) κ³Όμ μ ν΅ν΄ μ€μ€μκ°μ±μ 보μ₯νλ€. μ΄ λ μ€μν μμκ° μ¬κ²μ¦ μ£ΌκΈ°μ μ¬κ²μ¦ κΈ°μ€μ΄λ€.
- μ€μ€μκ°: μΊμν΄λμ λ°μ΄ν°κ° λ무 μ€λλ λ°μ΄ν°κ° λμ§ μλλ‘ νΉμ μ£ΌκΈ°μ λ°λΌ μ¬κ²μ¦
- μ¬κ²μ¦: μΊμν λ°μ΄ν°μ μλ³Έ μ£ΌμΈμΈ μΉ μλ²κ° νΉμ μ£ΌκΈ°μ λ°λΌ, μΊμν λ°μ΄ν°κ° μ€λλλμ§ κ²μ¦
- κ²μ¦ λ°©λ²: μ‘°κ±΄λΆ μμ² μ¬μ© = μ¬κ²μ¦ κΈ°μ€μ΄ λλ κ°μ μλ²μ 보λΈλ€.
- HTTP Cache
- CORS μμ² κ°λ₯μ¬λΆ νμΈ
- κ²μ¦ λ°©λ²: μ‘°κ±΄λΆ μμ² μ¬μ© = μ¬κ²μ¦ κΈ°μ€μ΄ λλ κ°μ μλ²μ 보λΈλ€.
1. μ¬κ²μ¦ μ£ΌκΈ°(max-age)
- μΊμλ λ°μ΄ν°λ₯Ό μΌλ§ κ°κ²©μΌλ‘ μ¬κ²μ¦ν μ§ μ€μ νλ€. μλ₯Ό λ€μ΄, 'max-age=3600'μ΄λ©΄ 1μκ°λ§λ€ μ¬κ²μ¦μ μννλ€.
- μ£ΌκΈ°κ° λ무 κΈΈλ©΄ μ€λλ λ°μ΄ν°κ° μ 곡λ μνμ΄ μκ³ , λ무 μ§§μΌλ©΄ λΉλ²ν μ¬κ²μ¦μΌλ‘ μ±λ₯μ΄ μ νλ μμμ.
2. μ¬κ²μ¦ κΈ°μ€: μΊμ ν΄λμ λ°μ΄ν°κ° μ€λλλμ§ μ¬λΆλ₯Ό μλ³Έ μ£ΌμΈμΈ μΉ μλ²κ° νλ¨νκΈ° μν κΈ°μ€κ·Όκ±°
- Last-Modifed(μμ μΌ κΈ°λ° μ¬κ²μ¦)
- ETag(κ³ μ κ° κΈ°λ° μ¬κ²μ¦)
HTTP Cache μ¬κ²μ¦ κΈ°μ€ 1. Last-Modified: μμ μΌ(μκ°) κΈ°λ°
μΊμκ° μ ν¨νμ§ μ¬λΆ(=μλ³Έμ΄ λ°λμλμ§ μ¬λΆ)λ₯Ό μκ°μ κΈ°λ°μΌλ‘ νλ¨νλ€.
→νμΌμ΄ λ§μ§λ§μΌλ‘ μμ λ μκ°μ κΈ°μ€μΌλ‘ μ¬κ²μ¦νλ€.
- μλ²λ 'Last-Modified' ν€λλ₯Ό ν΅ν΄ νμΌμ λ§μ§λ§ μμ μκ°μ μ 곡νκ³ λΈλΌμ°μ λ 'If-Modified-Since'ν€λλ₯Ό μ¬μ©νμ¬ μλ²μ μ¬κ²μ¦ μμ²μ 보λΈλ€. μλ²κ° νμΌμ΄ μμ λμ§ μμμμ νμΈνλ©΄ '304 Not Changed' μνμ½λλ₯Ό λ°ννλ€.
- If-Unmodified-Sinceλ μλ²μ νμΌμ΄ μμ λμ§ μμλμ§ νμΈνλ μμ²μ΄λ€. μλ²κ° νμΌμ΄ μμ λμ§ μμλ€κ³ νλ¨νλ©΄ 304 Not Changedλ₯Ό λ°ννλ©°, μμ λμλ€λ©΄ 412 Precondition Failedλ₯Ό λ°ννλ€.
μ¬κ²μ¦ μ μΊμ μμ μ (μΉλΈλΌμ°μ ): If-Modified-Since
μ§λ¬Έ: λ°λκ±° μμ? (GET, HEAD)
μλ² λ΅λ³:
- γ γ λ°λ: 200 Resource Cache + μ μλ΅(μλ‘μ΄ μΊμ)
- μλ μλ°λ: 304 Not Changed
μ¬κ²μ¦ μ μΊμ μμ μ (μΉλΈλΌμ°μ ): If-UnModified-Since
μ§λ¬Έ: μλ°λ? (POST μλ² μν λ³κ²½ Method)
μλ² λ΅λ³:
- γ γ μλ°λ:304 Not Changed
- γ΄γ΄ λ°λ:412 Precondition Failed(μ‘°κ±΄λΆ μμ²μ λν False λΆμ μλ΅)
β» μ 412 Precondition Failed? μ‘°κ±΄λΆ μμ²μ νμ λ μλ² μνλ₯Ό λ³κ²½μν¬ μ μμΌλ μΌλ¨ λ§λλ€. POSTλ λ°μ΄ν°λ₯Ό λ³κ²½ν μ μκΈ° λλ¬Έμ, 리μμ€μ μΌκ΄μ± μ μ§μ λ°μ΄ν° λ¬΄κ²°μ± λ³΄νΈλ₯Ό μν΄μμ΄λ€. GETμ μ‘°νλ§ νλ κ²μ΄κΈ° λλ¬Έμ μ΄λ¬ν μν©μ΄ λ°μνμ§ μλλ€.
HTTP Cache μ¬κ²μ¦ κΈ°μ€ 2. Etag(Entity Tag):κ³ μ κ°(ν΄μ) κΈ°λ°
μΊμκ° μ ν¨νμ§ μ¬λΆ(=μλ³Έμ΄ λ°λμλμ§ μ¬λΆ)λ₯Ό κ³ μ κ°(ν΄μ, ID)μ κΈ°λ°μΌλ‘ νλ¨νλ€.
- Etagλ νμΌμ κ³ μ ν΄μ κ°μ κΈ°λ°μΌλ‘ ν μ¬κ²μ¦ λ°©μμ΄λ€. μλ²λ νμΌμ κ³ μ ν΄μ κ°μ 'Etag'ν€λλ‘ μ 곡νλ©°, λΈλΌμ°μ λ 'If-None-Match'ν€λλ₯Ό μ¬μ©νμ¬ μλ²μ μ¬κ²μ¦ μμ²μ 보λΈλ€. μλ²κ° ν΄μ κ°μ΄ λ³κ²½λμ§ μμμμ νμΈνλ©΄ '304 Not Changed'λ₯Ό λ°ννμ¬, μΊμλ λ°μ΄ν°λ₯Ό κ³μ μ¬μ©ν μ μκ²νλ€. λ§μ½ ν΄μ κ°μ΄ λ³κ²½λμλ€κ³ νλ¨νλ©΄ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ μ‘νλ€.
- 'If-Match'λ μλ²μ νμΌμ κ³ μ ν΄μκ°μ΄ λμΌνμ§λ₯Ό νμΈνλ μμ²μ΄λ€. μλ²κ° ν΄μ κ°μ΄ λμΌνλ€κ³ νλ¨νλ©΄ '304 Not Changed'λ₯Ό λ°ννκ³ , λ€λ₯Ό κ²½μ° '412 Precondition Faild'λ₯Ό λ°ννλ€.
μ¬κ²μ¦ μ μΊμ μμ μ (μΉ λΈλΌμ°μ ): If-None-Match
μ§λ¬Έ: λ¬λΌ? = λ°λμμ΄?
μλ² λ΅λ³:
- γ γ λ°λ:200 Resource Cache + μ μλ΅(μλ‘μ΄ μΊμ)
- γ΄γ΄ μλ°λμμ΄:304 Not Changed(GET, HEAD)
- + 412 Precondition Failed (POST μλ² μν λ³κ²½ Method)
μ¬κ²μ¦ μ μΊμ μμ μ (μΉ λΈλΌμ°μ ): If-Match
μ§λ¬Έ: κ°μ? = μλ°λμμ΄?
μλ² λ΅λ³:
- γ γ μλ°λ:304 Not Changed
- γ΄γ΄ λ°λ: 412 Precondition Failed (μ‘°κ±΄λΆ μμ²μ λν False λΆμ μλ΅)
Hashλ?
Hashλ κ°μ²΄μ κ³ μ μ±μ λνλ΄λ κ°μ΄λ€. λ κ°μ²΄κ° λμΌνμ§ λΉκ΅νλ €λ©΄ λͺ¨λ νλλ₯Ό λ€ λΉκ΅ν΄μΌ νμ§λ§, ν΄μκ°μ μμ±ν΄μ λΉκ΅νλ©΄ λλ€.
- κ°μ²΄μ λͺ¨λ νλλ₯Ό ν©μ³μ ν΄μκ°μ λ§λ λ€.
- μλ₯Ό λ€μ΄, A κ°μ²΄μ ν΄μκ°μ΄
#Ejioajd3@hd…
μ΄κ³ , B κ°μ²΄μ ν΄μκ°μ΄U(hd9as@
λΌλ©΄, μ΄ ν΄μκ°μ λΉκ΅ν΄μ λ κ°μ²΄κ° λμΌνμ§ νλ¨ν μ μλ€.
κ³ μ μ± κ²μ¦μ μν Hash νμ© μ: HMAC
Hashλ λ°μ΄ν°μ μλ³μ‘° μ¬λΆλ₯Ό νλ¨νλ λ° μ¬μ©λ μ μλ€. HMAC(Hash-based Message Authentication Code)μ μ¬μ©νλ©΄ νμΌμ΄λ (Open)APIλ₯Ό ν΅ν΄ λ°μ κ²°κ³Όκ°μ΄ λ³μ‘°λμλμ§ νμΈν μ μλ€.
- νμΌμ λ€μ΄λ‘λνκ±°λ API κ²°κ³Όλ₯Ό λ°μ λ, μλ²μμ κ³μ°λ Hash κ°μ ν¨κ» λ°λλ€.
- ν΄λΌμ΄μΈνΈμ μλ²κ° 미리 곡μ ν ν€κ°μΌλ‘ Hash κ°μ μμ±νλ€.
- μμ±λ Hash κ°κ³Ό μλ²μμ λ°μ Hash κ°μ λΉκ΅νλ€.
- λ κ°μ΄ κ°λ€λ©΄, μμ‘°λμ§ μμ νμΌμ΄λ API κ²°κ³Όμμ νμΈν μ μλ€.
βΉοΈμ°Έκ³
[ASAC 6κΈ° κ°μμλ£]
'π»DEV-STUDY > HTTP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
1. μΏ ν€(Cookie) & μΈμ (Session) + JWT (0) | 2024.08.23 |
---|---|
νλ‘μ(Proxy) (0) | 2024.08.20 |
HTTP Cache κ°λ λ° Cache-control ν€λ (0) | 2024.08.20 |
λ‘λλ°Έλ°μ± κ°λ λ° λ°°ν¬ λ°©μ (0) | 2024.08.19 |
λ°±μλ μΉ κ°λ°: API = ν΄λΌμ΄μΈνΈκ° νμνλ λ°μ΄ν° λ°ν (0) | 2024.08.19 |