Http μΊμ‹œ πŸš€

πŸ₯‡ Onething (FE Developer)Β·2022λ…„ 3μ›” 2일
post-thumbnail

Httpμ—μ„œ μΊμ‹œκ°€ μ™œ μžˆμ„κΉŒ?

웹이 μ„±μž₯ν•˜λ©΄μ„œ μ›Ή μ„œλ²„λ‘œλΆ€ν„° μ „μ†‘λ˜λŠ” μ •λ³΄μ˜ 크기가 κΈ‰κ²©νžˆ μ»€μ§€κ²Œ λœλ‹€. λ°μ΄ν„°μ˜ 전솑 속도λ₯Ό 높이기 μœ„ν•΄μ„œ κ³ λ―Όν•˜κ³  κ³ λ―Όν•˜λ‹€ λ‚˜μ˜¨ 결과물이 Http μΊμ‹œ κΈ°λŠ₯이닀.

이미 λ‹€μš΄λ‘œλ“œ 받은 μžμ›μ„ λ‹€μ‹œ μ›Ή μ„œλ²„λ‘œλΆ€ν„° λ‹€μš΄λ‘œλ“œλ₯Ό λ°›μ•„μ•Ό ν• κΉŒ?

ν•œλ²ˆ λ‹€μš΄λ‘œλ“œ 받은 νŒŒμΌμ„ 컴퓨터에 μ €μž₯ν–ˆλ‹€κ°€ 같은 μš”μ²­μ„ ν•  λ•Œ μ›Ή μ„œλ²„λ‘œλΆ€ν„° λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ λ°›μ§€ μ•Šκ³  μ €μž₯해놓은 μžμ›μ„ μ‚¬μš©ν•œλ‹€λ©΄ λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•˜μ§€ μ•Šκ³  μžμ›μ„ μ‚¬μš©ν•  수 μžˆμ–΄ μ‚¬μš©μžλŠ” λ„€νŠΈμ›Œν¬ μ§€μ—°μœΌλ‘œ λ°œμƒν•˜λŠ” 속도 μ €ν•˜λ₯Ό κ²ͺμ§€ μ•Šμ•„λ„ λœλ‹€.

*μžμ›: html, javascript, css, jpg, pdf, docs λ“±


κ·Έλ ‡λ‹€λ©΄ μΊμ‹œκ°€ λ§Œμ‚¬ OK인가?

μ›Ή λΈŒλΌμš°μ €κ°€ μΊμ‹œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ„ λ•Œ μ›Ή μ„œλ²„μ—μ„œ μ›Ή λΈŒλΌμš°μ €κ°€ μΊμ‹œν•œ μžμ›μ„ λ³€κ²½ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

μ•„λ§ˆ μ›Ή λΈŒλΌμš°μ €λŠ” μ„œλ²„μ—μ„œ λ³€κ²½λœ 것을 μΈμ§€ν•˜μ§€ λͺ»ν•˜κ³  ꡬ λ²„μ „μ˜ μžμ›μ„ 계속 μ‚¬μš©ν•˜κ³  μžˆμ„ 것이닀.πŸ€¦β€β™‚οΈ 이런 μ†Œλ¦¬ μ—†λŠ” μ•„μš°μ„± 같은 상황을 μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ Http의 μΊμ‹œ κ΄€λ ¨ 헀더와 μΊμ‹œλ₯Ό μ΅œμ‹  μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” λ°©λ²•μ—λŠ” μ–΄λ–€ 것듀이 μžˆμ„μ§€ μ•Œμ•„λ³΄μž!!!


Http Response Header: Last-Modified

μ›Ή μ„œλ²„κ°€ μ›Ή λΈŒλΌμš°μ €μ—κ²Œ μžμ›μ„ 전솑할 λ•Œ ν•΄λ‹Ή μžμ›μ΄ μ–Έμ œ λ§ˆμ§€λ§‰μœΌλ‘œ μˆ˜μ •λ˜μ—ˆλŠ”μ§€μ— λŒ€ν•œ λ‚ μ§œ 정보λ₯Ό Last-Modified에 λ‹΄μ•„μ„œ 보낸닀. μ›Ή λΈŒλΌμš°μ €λŠ” μΊμ‹œλ₯Ό μ €μž₯ν•  λ•Œ Last-Modfied 정보도 같이 μ €μž₯ν•˜κ²Œ λœλ‹€.

Http Request Header: If-Modified-Since

μ›Ή λΈŒλΌμš°μ €κ°€ μ›Ή μ„œλ²„μ—κ²Œ μΊμ‹œν•œ μžμ›μ΄ μœ νš¨ν•œμ§€ λ¬Όμ–΄λ³Ό λ•Œ λ³΄λ‚΄λŠ” κ°’μœΌλ‘œ, μ›Ή μ„œλ²„λ‘œ λΆ€ν„° μžμ›μ„ λ‹€μš΄λ‘œλ“œ 받을 λ•Œ Response header μ •λ³΄λ‘œ 받은 Last-Modified 값을 If-Modified-Since λ‹΄μ•„ 보낸닀. μ›Ή μ„œλ²„λŠ” 전달받은 If-Modified-Since κ°’κ³Ό μ„œλ²„ μžμ›μ˜ Last-Modified와 λΉ„κ΅ν•œλ‹€.

  • λ³€κ²½ 됐닀면, λ³€κ²½λœ μžμ›μ„ μ›Ή λΈŒλΌμš°μ €μ—κ²Œ 전솑 (Status Code: 200)
  • λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€λ©΄, Response header만 전솑 (Status Code: 304 Not Modified), μ›Ή λΈŒλΌμš°μ €λŠ” μΊμ‹œν•œ μžμ›μ„ μž¬μ‚¬μš©ν•˜κ³  max-ageλ₯Ό μž¬μ„€μ •ν•œλ‹€.

Http Response Header: ETag

Response header인 Last-Modified의 κ°’λ§Œ κ°€μ§€κ³  μΊμ‹œ μžμ›μ˜ μœ νš¨μ„±μ„ νŒλ‹¨ν•˜κΈ°μ—λŠ” λΆ€μ •ν™•ν•  수 μžˆλ‹€. μ •ν™•ν•œ μΊμ‹œ μžμ›μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜κΈ° μœ„ν•΄ ETag 값을 ν™œμš©ν•œλ‹€. μ›Ή λΈŒλΌμš°μ €λŠ” μΊμ‹œ μžμ›μ„ μ €μž₯ν•  λ•Œ ETag 값도 같이 μ €μž₯ν•œλ‹€.

*ETag: μžμ›μ„ μ‹λ³„ν•˜λŠ” κ³ μœ ν•œ λ¬Έμžμ—΄ μ •λ„λ‘œ 해석함.

Http Request Header: If-None-Match

μ›Ή λΈŒλΌμš°μ €κ°€ μ›Ή μ„œλ²„μ—κ²Œ μΊμ‹œν•œ μžμ›μ΄ μœ νš¨ν•œμ§€ λ¬Όμ–΄λ³Ό λ•Œ λ³΄λ‚΄λŠ” κ°’μœΌλ‘œ, μ›Ή μ„œλ²„λ‘œ λΆ€ν„° μžμ›μ„ λ‹€μš΄λ‘œλ“œ 받을 λ•Œ Response header μ •λ³΄λ‘œ 받은 ETag 값을 If-None-Match에 λ‹΄μ•„ 보낸닀. μ›Ή μ„œλ²„λŠ” Request 받은 If-None-Match κ°’κ³Ό μ„œλ²„ μžμ›μ˜ ETagκ°’κ³Ό λΉ„κ΅ν•œλ‹€.

  • λ³€κ²½ 됐닀면, λ³€κ²½λœ μžμ›μ„ μ›Ή λΈŒλΌμš°μ €μ—κ²Œ 전솑 (Status Code: 200)
  • λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€λ©΄, Response header만 전솑 (Status Code: 304 Not Modified), μ›Ή λΈŒλΌμš°μ €λŠ” μΊμ‹œν•œ μžμ›μ„ μž¬μ‚¬μš©ν•˜κ³  max-ageλ₯Ό μž¬μ„€μ •ν•œλ‹€.

Http Header: Cache-Control

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μΊμ‹œλ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ Http headerμ—λŠ” Cache-Controlμ΄λΌλŠ” 속성이 μžˆλ‹€. ν•œλ²ˆ μ•Œμ•„λ³΄μž!!!

no-store

μ›Ή μ„œλ²„κ°€ μžμ›μ„ μ›Ή λΈŒλΌμš°μ €μ— 전솑할 λ•Œ Http response header의 Cache-Control을 no-store둜 μ„€μ •ν•˜λ©΄, μ›Ή λΈŒλΌμš°μ €λŠ” 무슨 일이 μžˆμ–΄λ„ ν•΄λ‹Ή μžμ›μ„ μΊμ‹œ ν•˜μ§€ μ•ŠλŠ”λ‹€. 항상 μ΅œμ‹ ν™”λœ μžμ›μ„ μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„ 올 수 μžˆλŠ” μž₯점이 μžˆμ§€λ§Œ, 맀번 λ‹€μš΄λ‘œλ“œ ν•΄μ•Ό ν•˜λŠ” 단점이 μžˆλ‹€.

no-cache

이름이 no-cache라고 ν•΄μ„œ μΊμ‹œλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ” 게 μ•„λ‹ˆλ‹€. μ£Όμ˜ν•˜μž!!!
μ›Ή μ„œλ²„κ°€ μžμ›μ„ μ›Ή λΈŒλΌμš°μ €μ— 전솑할 λ•Œ Cache-Control을 no-cache둜 μ„€μ •ν•˜λ©΄, μ›Ή λΈŒλΌμš°μ €λŠ” ν•΄λ‹Ή μžμ›μ„ μΊμ‹œν•œ ν›„ 같은 μš”μ²­μ„ ν•  λ•Œλ§ˆλ‹€ μ›Ή μ„œλ²„μ—κ²Œ μΊμ‹œκ°€ μœ νš¨ν•œμ§€ 항상 ν™•μΈν•œλ‹€.

μ΄λŠ” max-age: 0으둜 μ„€μ •ν•œ 것과 κ°™μœΌλ―€λ‘œ, max-ageκ°€ λ§Œλ£Œλ˜μ—ˆμ„ λ•Œ λ™μž‘μ€ λ°”λ‘œ μ•„λž˜ max-ageμ—μ„œ ν™•μΈν•˜μž.

max-age

max-ageλŠ” 초 λ‹¨μœ„ μž…λ ₯을 톡해 μΊμ‹œμ˜ 만료 μ‹œκ°„ μ§€μ •ν•  수 μžˆλ‹€. Http response header의 max-age: 3600으둜 μ„€μ •λ˜μ–΄ 있으면 μ›Ή λΈŒλΌμš°μ €λŠ” μ›Ή μ„œλ²„λ‘œλΆ€ν„° μžμ›μ„ λ°›μ•„ μΊμ‹œν•œ 이후 같은 μš”μ²­μ„ ν•˜κ²Œ 되면 1μ‹œκ°„ λ™μ•ˆ 컴퓨터에 μ €μž₯λ˜μ–΄μžˆλŠ” μΊμ‹œ μžμ›μ„ ν™œμš©ν•œλ‹€. 이 방식은 μžμ›μ„ μž¬μ‚¬μš©ν•΄ μ‚¬μš©μžλŠ” 속도가 λΉ λ₯Έ μ„œλΉ„μŠ€λ₯Ό 받을 수 μžˆμ§€λ§Œ, μ›Ή μ„œλ²„ μžμ›μ˜ 변경사항을 μ›Ή λΈŒλΌμš°μ €κ°€ μ•Œμ•„μ±„μ§€ λͺ»ν•œλ‹€λŠ” 단점이 μžˆλ‹€.

λ§Œμ•½ 1μ‹œκ°„μ΄ μ§€λ‚œ ν›„ μ›Ή λΈŒλΌμš°μ €κ°€ 같은 μš”μ²­μ„ ν•˜κ²Œ 되면 μ–΄λ–»κ²Œ λ™μž‘ν• κΉŒ?

λ§Œλ£Œκ°€ 됐닀고 μΊμ‹œν•œ μžμ›μ„ 버리지 μ•ŠλŠ”λ‹€. 만료 μ‹œκ°„μ΄ μ§€λ‚œ μΊμ‹œ μžμ›μ„ λ‹€μ‹œ μ‚¬μš©ν•΄λ„ λ˜λŠ”μ§€ μ›Ή μ„œλ²„μ—κ²Œ λ¬Όμ–΄λ³΄λŠ”λ°, μ΄λ•Œ Request header의 if-Modified-Since, If-None-Match을 ν¬ν•¨ν•œ header μ •λ³΄λ§Œ μ „μ†‘ν•œλ‹€.

μ›Ή μ„œλ²„λŠ” Request header의 if-Modified-Since, If-None-Match의 값을 λΉ„κ΅ν•˜μ—¬ μœ νš¨μ„± 검사λ₯Ό ν•œλ‹€. ν•΄λ‹Ή λΆ€λΆ„μ˜ μœ νš¨μ„± κ²€μ‚¬λŠ” 이미 μ„€λͺ…ν–ˆμœΌλ‹ˆ μƒλž΅ν•˜κ² λ‹€.

max-age 값을 잘 μ§€μ •ν•œλ‹€λ©΄, λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½ κ°μ†Œμ™€ λ”λΆˆμ–΄ λ¦¬μ†ŒμŠ€λ₯Ό 신선도 있게 μ›Ή λΈŒλΌμš°μ €μ—κ²Œ μ œκ³΅ν•  수 μžˆλ‹€.


배운점 & 더 μ•Œμ•„λ³΄κ³  싢은 것듀

업무λ₯Ό ν•˜λ©΄μ„œ μΊμ‹œλ₯Ό 닀룬 적이 μ—†μ—ˆλ˜ 것 κ°™λ‹€. 이런 뢀뢄은 λ°˜μ„±ν•΄μ•Όκ² λ‹€. μΊμ‹œλ₯Ό ν™œμš©ν•˜λ©΄ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ 효과적으둜 쀄일 수 μžˆλ‹€. ν•˜μ§€λ§Œ, μΊμ‹œλ₯Ό μ„¬μ„Έν•˜κ²Œ μ»¨νŠΈλ‘€ν•΄μ•Ό ν•œλ‹€λŠ” 것을 이번 ν¬μŠ€νŒ…μ„ 톡해 λŠλ‚„ 수 μžˆμ—ˆλ‹€.

Application CacheλΌλŠ” 것을 μ΄μš©ν•˜λ©΄ λ„€νŠΈμ›Œν¬κ°€ 끊겨 μžˆμ–΄λ„ μΊμ‹œ 된 데이터λ₯Ό μ΄μš©ν•΄μ„œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ™μž‘ν•˜κ²Œ ν•  수 μžˆλ‹€κ³  ν•œλ‹€. ν•΄λ‹Ή 뢀뢄도 μΆ”ν›„ κΈ°νšŒκ°€ λœλ‹€λ©΄ μ•Œμ•„λ³΄κ³  μ‹Άλ‹€.

Caching Server에 λŒ€ν•΄μ„œλ„ μΆ”κ°€λ‘œ 곡뢀해야겠닀. 쀑간에 Caching Serverλ₯Ό λ‘˜ 경우 μΊμ‹œκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€λ„ μ•Œμ•„λ³΄κ³  μ‹Άλ‹€. AWSμ—μ„œ CDN이 μžˆλŠ”λ°, μ‚¬μš©μžμ™€ μ„œλ²„κ°€ μ§€λ¦¬μ μœΌλ‘œ 거리가 λ©€ 경우 쀑간에 CDN이 μ„œλ²„λ₯Ό μΊμ‹±ν•˜κ³  μ‚¬μš©μžμ™€ ν†΅μ‹ ν•˜λŠ”λ° 이런 것과 λΉ„μŠ·ν•œ 걸까???

profile
Vires acquirit eundo.

0개의 λŒ“κΈ€