WEB

λΈŒλΌμš°μ € 캐싱 μ „λž΅

솑이 🫧 2024. 1. 21. 21:29

μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„λ‘œ 데이터λ₯Ό μš”μ²­ν•  λ•Œ, μΊμ‹œκ°€ 없을 경우 데이터가 λ³€κ²½λ˜μ§€ μ•Šμ•˜λ”λΌλ„ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 데이터λ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ•„μ•Ό ν•œλ‹€. 

μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λ©΄ λΆˆν•„μš”ν•œ λ„€νŠΈμ›Œν¬ 톡신 없이 μ’€ 더 λΉ λ₯Έ μ‚¬μš©μž κ²½ν—˜μ„ ν•  수 μžˆλ‹€. 

 

λΈŒλΌμš°μ € μΊμ‹œλ₯Ό μ μš©ν•˜λŠ” 방법

1. cache-control 적용

- response header에 μΊμ‹œκ°€ μœ νš¨ν•œ μ‹œκ°„(초)λ₯Ό ν•¨κ»˜ λ°˜ν™˜ν•΄ λΈŒλΌμš°μ €κ°€ ν•΄λ‹Ή μ‹œκ°„λ™μ•ˆ μΊμ‹œλ‘œ 응닡 κ²°κ³Όλ₯Ό μ €μž₯ν•˜λ„λ‘ ν•œλ‹€. 

- μΊμ‹œ μ‹œκ°„μ΄ 초과되면 λ‹€μ‹œ λ„€νŠΈμ›Œν¬λ‘œ μš”μ²­μ„ 보내 응닡을 κ°€μ Έμ˜€κ³  λ‹€μ‹œ μœ νš¨μ‹œκ°„λ™μ•ˆ μΊμ‹œλ‘œ μ €μž₯ν•˜κ²Œ λœλ‹€. (κ°±μ‹ )

- λΈŒλΌμš°μ €λŠ” cache-control 정보λ₯Ό λ°›μœΌλ©΄ μ„€μ •λœ μ‹œκ°„λ™μ•ˆ μƒˆλ‘œμš΄ μš”μ²­μ΄ 와도 λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜μ§€ μ•ŠλŠ”λ‹€.

- ν΄λΌμ΄μ–ΈνŠΈμ˜ λ©”λͺ¨λ¦¬ μΊμ‹œ -> λ””μŠ€ν¬ μΊμ‹œ 순으둜 ν™•μΈν•˜μ—¬ 데이터λ₯Ό μ°ΎλŠ”λ‹€.

EX) cache-control: max-age=60(초)

 

2. μΊμ‹œ μ‹œκ°„μ˜ 초과

μΊμ‹œ 유효 μ‹œκ°„μ΄ μ΄ˆκ³Όν•œ 경우 μ•„λž˜μ™€ 같은 μ„œλ²„λŠ” μ•„λž˜ 2κ°€μ§€ 상황 쀑 ν•˜λ‚˜λ₯Ό κ°€μ§ˆ 것이닀.

1) μ„œλ²„μ—μ„œ κΈ°μ‘΄ 데이터λ₯Ό λ³€κ²½

2) μ„œλ²„μ—μ„œ κΈ°μ‘΄ 데이터λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ

λ§Œμ•½ μΊμ‹œ λ§Œλ£Œν›„μ—λ„ μ„œλ²„μ—μ„œ 데이터가 λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ λΈŒλΌμš°μ €μ˜ μΊμ‹œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€. 

이λ₯Ό μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μΊμ‹œ 데이터와 μ„œλ²„μ˜ 데이터가 κ°™λ‹€λŠ” 사싀을 확인할 수 μžˆλŠ” 방법이 ν•„μš”ν•˜λ‹€. 

 

3. 검증 헀더 μΆ”κ°€ (Last-Modified)

1) 데이터가 λ§ˆμ§€λ§‰μ— μˆ˜μ •λœ μ‹œκ°„ μΆ”κ°€ 

 

 

데이터가 λ§ˆμ§€λ§‰μ— μˆ˜μ •λœ μ‹œκ°„μ„ 응닡헀더에 ν•¨κ»˜ 보냄

 

μ΅œλŒ€ μΊμ‹œ μœ νš¨μ‹œκ°„μ΄ μ§€λ‚œ 경우 

 

λΈŒλΌμš°μ € μΊμ‹œκ°€ κ°€μ§€κ³ μžˆλŠ”, 데이터 μ΅œμ’… μˆ˜μ •μΌμ΄ν›„λ‘œ λ³€κ²½λ˜μ—ˆλŠ”μ§€ 쑰건뢀 μš”μ²­(If-Modified-Since)을 ν•¨κ»˜ λ³΄λƒˆμ„ λ•Œ, 

λ§Œμ•½ 데이터가 아직 λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ 304(Not Modified) 응닡과 ν•¨κ»˜ μ„œλ²„λŠ” body 없이 응닡을 μ€€λ‹€.

결과적으둜 λ„€νŠΈμ›Œν¬λ₯Ό 타긴 ν•˜μ§€λ§Œ Bodyκ°€ 없이 였기 λ•Œλ¬Έμ— 훨씬 적은 λΉ„μš©μœΌλ‘œ 톡신이 κ°€λŠ₯ν•˜λ‹€.

 

 

 

4. 검증 헀더 μΆ”κ°€ (ETag)

- 데이터λ₯Ό μˆ˜μ •ν•΄μ„œ λ‚ μ§œλŠ” λ³€κ²½λ˜μ—ˆμ§€λ§Œ λ§Œμ•½ 같은 데이터λ₯Ό μˆ˜μ •ν•΄μ„œ κ²°κ³Όκ°€ λ˜‘κ°™μ€ 경우 μΊμ‹œλ₯Ό μœ μ§€ν•  수 μžˆλŠ” 방법이 μžˆλ‹€.

- ETag λž€ μΊμ‹œμš© 데이터에 λŒ€ν•΄ κ³ μœ ν•œ ν•΄μ‹œκ°’μ„ μƒμ„±ν•˜μ—¬ μ‹€μ œλ‘œ 값이 κ°™μœΌλ©΄ 같은 ν•΄μ‹œκ°’μ„ κ°€μ§„λ‹€. 

응닡 헀더에 ETag λ₯Ό λ‹΄μ•„μ„œ 보내주면 λΈŒλΌμš°μ € μΊμ‹œκ°€ ν•΄μ‹œκ°’μ„ μ €μž₯ν•œλ‹€.

λ§Œμ•½, λΈŒλΌμš°μ € 유효 μΊμ‹œ μ‹œκ°„μ΄ λ§Œλ£Œλ˜μ–΄ 쑰건뢀 μš”μ²­(If-None-Match)κ³Ό ν•¨κ»˜ μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚΄κ²Œ 되면 

λ§ˆμ°¬κ°€μ§€λ‘œ ν•΄μ‹œκ°’μ„ λΉ„κ΅ν•΄μ„œ λ°μ΄ν„°μ˜ 변경이 μ—†λŠ” 경우 304(Not Modified) 응닡을 보내쀀닀.

 

 

즉 검증헀더와 쑰건뢀 μš”μ²­μ€ ν•¨κ»˜ 쓰인닀.

- If-Modified-Since: Last-Modified μ‚¬μš©

- If-None-Match: ETag μ‚¬μš©

 

μΊμ‹œ μ œμ–΄ 헀더 

1. Cach-Control: max-age -> μΊμ‹œ 유효 μ‹œκ°„, 초 λ‹¨μœ„

2. Cach-Control: no-cache -> λ°μ΄ν„°λŠ” μΊμ‹œν•΄λ„ λ˜μ§€λ§Œ, 항상 원 μ„œλ²„μ—μ„œ κ²€μ¦ν•˜κ³  μ‚¬μš©, 원 μ„œλ²„ μ ‘κ·Ό λΆˆκ°€ν•œ 경우 μΊμ‹œ 데이터 λ°˜ν™˜ κ°€λŠ₯

3. Cach-Control: no-store -> 데이터 μ €μž₯ν•˜λ©΄ μ•ˆλ¨ (λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©ν•˜κ³  μ΅œλŒ€ν•œ 빨리 μ‚­μ œ)

4. Cache-Control: must-revalidate -> μΊμ‹œ 만료 ν›„ 졜초 μ‘°νšŒμ‹œ 원 μ„œλ²„(ν”„λ‘μ‹œ μΊμ‹œ μ„œλ²„ X)에 검증, 원 μ„œλ²„ μ ‘κ·Ό λΆˆκ°€ν•œ 경우 였λ₯˜ λ°œμƒ

 

 

ν”„λ‘μ‹œ μΊμ‹œ

- Cache-Control : public -> 응닡이 public μΊμ‹œμ— μ €μž₯λ˜μ–΄λ„ 됨

- Cache-Control : private -> 응닡이 ν•΄λ‹Ή μ‚¬μš©μžλ§Œ μœ„ν•œ 것이라 private μΊμ‹œμ— μ €μž₯해야함

- Cache-Control : s-maxage -> ν”„λ‘μ‹œ μΊμ‹œμ—λ§Œ μ μš©λ˜λŠ” max-age

- Age : 60 (HTTP 헀더) -> 원 μ„œλ²„ 응닡 ν›„ ν”„λ‘μ‹œ μΊμ‹œ 내에 λ¨Έλ¬Έ μ‹œκ°„

 

 

좜처

κΉ€μ˜ν•œλ‹˜ κ°•μ˜ - λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식