HTTP ์บ์ฑ
์ด์ ์ ๊ฐ์ ธ์จ ๋ฆฌ์์ค๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ์๋ตํ๋ ๊ธฐ์ ์ด๋ค. ๋น์ฉ ์ ๊ฐ, ์ฑ๋ฅ ํฅ์์ ์ด์ ์ด ์๋ค.
์บ์์ ์ข ๋ฅ
Private browser caches(์ฌ์ค ๋ธ๋ผ์ฐ์ ์บ์)
๋จ์ผ ์ฌ์ฉ์
๋ธ๋ผ์ฐ์ ์บ์๊ฐ ์ฌ์ฉ์์ ์ํด HTTP๋ฅผ ํตํด ๋ค์ด๋ก๋๋ ๋ชจ๋ ๋ฌธ์๋ค์ ๊ฐ์ง๊ณ ์๋ค.
์๋ฒ์ ๋ํ ์ถ๊ฐ์ ์ธ ์์ฒญ ์์ด ๋ค๋ก ๊ฐ๊ธฐ, ์์ผ๋ก ๊ฐ๊ธฐ, ์ ์ฅ, ์์ค๋ก ๋ณด๊ธฐ ๋ฑ์ ์ํด ๋ฐฉ๋ฌธํ๋ ๋ฌธ์๋ค์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ค.
Shared proxy caches(๊ณต์ ํ๋ก์ ์บ์)
- ์ฌ๋ฌ๋ช ์ ์ฌ์ฉ์๊ฐ ์ฌ์ฌ์ฉํ๋ ์๋ต์ ์ ์ฅํ๋ค.
- ์) ISP๋ ํ์ฌ์์ ์นํ๋ก์๋ฅผ ์ค์นํด ์กฐํ๊ฐ ๋ง์ด ๋๋ ๋ฆฌ์์ค๋ค์ ๋ช ๋ฒ์ด๊ณ ์ฌ์ฌ์ฉํ ์์๋๋ก ๋ง๋ ๋ค.
๊ทธ์ธ
- ๊ฒ์ดํธ์จ์ด ์บ์
- CDN
- ๋ฆฌ๋ฒ์ค ๋ก์ ์บ์
- ๋ก๋ ๋ฐธ๋ฐ์
CDN: ํด๋ผ์ด์ธํธ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ผ๋ฉด ์ปจํ ์ธ ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ํด๋ผ์ด์ธํธ์ ๊ฐ๊น์ด ๊ณณ์ ์์นํ ์บ์ ์๋ฒ์ ์ปจํ ์ธ ๋ฅผ ์ ์ฅ(์บ์ฑ)ํ๊ณ ์ปจํ ์ธ ์์ฒญ ์์ ์บ์ ์๋ฒ๊ฐ ์๋ตํ์ฌ ๋น ๋ฅด๊ฒ ์ปจํ ์ธ ๋ฅผ ๋ฐ์ ์ ์๋ค. ์ฆ, ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ ธ ์๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ปจํ ์ธ ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ ๊ณตํ ์ ์๋ ๊ธฐ์ ์ด๋ค.
์บ์ฑ ๋์์ ๋์
- ์ฃผ๋ก
GET
์ ๋ํ ์๋ต์ ์บ์ฑํ๋ค. - ์ผ์ฐจ ์บ์ํค
- ์์ฒญ ๋ฉ์๋
- ๋์ URI
- ์บ์ฑ ์ํธ๋ฆฌ ํผ
- ์์ฒญ๋ ๊ฒฐ๊ณผ: HTML ๋ฌธ์, ์ด๋ฏธ์ง, ํ์ผ๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํฌํจํ๋ GET ์์ฒญ์ ๋ํ 200(OK) ์๋ต
- 301 ์๋ต: ์๊ตฌ์ ์ธ ์ด๋
- 404: ํ์ด์ง ์ฐพ์ ์ ์์
- 206: ๋ถ๋ถ์ ์ธ ์ปจํ ์ธ ์๋ต
- ๊ธฐํ GET ์ธ ์๋ต(์บ์ ํค๋ก ์ฌ์ฉํ๊ธฐ์ ์ ์ ํ ๋ฌด์ธ๊ฐ๊ฐ ์ ์๋์์ ๋)
URI(Uniform Resource Identifier, URI): ํตํฉ ์์ ์๋ณ์๋ก, ์ธํฐ๋ท ์ ์๋ ์์์ ๋ํ๋ด๋ ์ ์ผํ ์ฃผ์์ด๋ค. URI์ ํ์๊ฐ๋ ์ผ๋ก URL, URN์ด ์๋ค.
์บ์ ๊ด๋ จ ํค๋
Cach-control ํค๋์ ์ต์
no-store
: ์๋ต์ ์บ์ํ ์ ์์ผ๋ฉฐ ๋งค ์์ฒญ๋ง๋ค ์ ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค.no-cache
: ์บ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ฒ์ ํ์ธ์ ๋ฐ๋๋ก ํ๋ค. (์ด ์บ์ ์ง์ง ์จ๋ ๋๋..?)must-revalidate
๋ง๋ฃ๋ ์บ์๋ง ์๋ฒ์ ํ์ธ์ ๋ฐ๋๋ก ํ๋ค.private
: ๊ณต์ ์บ์์ ์ ์ฅํด๋ ๋๋ค.private
: ๊ณต์ ์บ์์ ์ ์ฅํ๋ฉด ์ ๋๊ณ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ํน์ ์ฌ์ฉ์ ํ๊ฒฝ์๋ง ์ ์ฅํด์ผ ํ๋ค.max-age
: ์บ์ ์ ํจ์๊ฐ. ๋ฆฌ์์ค๊ฐ ์ ์ ํ๋ค๊ณ ๊ฐ์ฃผ๋ ์ต๋ ์๊ฐ(freshness lifetime์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค)์ ์ง์ ํ๋ ๋ช ๋ น์ด์ด๋ค. ๊ทธ ์๊ฐ์ ์ง๋๋ฉด ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ์ฌ๊ฒจ์ง๋ค.
๊ทธ ์ธ ํค๋
Age
:max-age
์๊ฐ ๋ด์์ ์ผ๋ง๋ ๊ฒฝ๊ณผํ๋์ง ์ด ๋จ์๋ก ์๋ ค์ค๋ค.Expires
: ์๋ต ์ปจํ ์ธ ๊ฐ ์ธ์ ๋ง๋ฃ๋๋ ์ง ์๋ ค์ฃผ๋ ํค๋. Cache-Control์ max-age๊ฐ ์๋ ๊ฒฝ์ฐ ์ด ํค๋๋ ๋ฌด์๋๋ค.Etag
: HTTP ์ปจํ ์ธ ๊ฐ ๋ฐ๋์๋ ์ง ๊ฒ์ฌํ ์ ์๋ ํค๋. ๊ฐ์ ์ฃผ์์ ๋ฆฌ์์ค๋ผ๋ ์ปจํ ์ธ ๊ฐ ๋ฌ๋ผ์ก์ผ๋ฉด Etag๋ ๋ค๋ฅด๋ค. ์ด ๊ฐ์ ํตํด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์๋ต ๋ด์ฉ์ด ๋ฌ๋ผ์ง ๊ฒ์ ์๊ฒ ๋์ด ์บ์๋ฅผ ์ง์ฐ๊ณ ์ ์ปจํ ์ธ ๋ฅผ ๋ฐ์ ์ ์๊ฒ ๋๋ค.If-None-Match
: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ Etag๊ฐ ๋ฌ๋ผ์ก๋ ์ง ๊ฒ์ฌํด์ ๋ค๋ฅผ ๊ฒฝ์ฐ์ ์ปจํ ์ธ ๋ฅผ ๋ณด๋ด์ฃผ๋ผ๋ ๋ป์ด๋ค. Etag๊ฐ ๋ค๋ฅด๋ค๋ ๊ฑด ์ปจํ ์ธ ๊ฐ ๋ฌ๋ผ์ก๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ ๋ฐ๋ ์ปจํ ์ธ ๋ฅผ ๋ณด๋ด์ฃผ๊ฒ ๋๋ค. Etag๊ฐ ๊ฐ๋ค๋ฉด 304 Not Modified(๋ณ๊ฒฝ์ฌํญ ์์)๋ฅผ ์๋ตํ๊ณ ํด๋ผ์ด์ธํธ๋ ๊ธฐ์กด ์บ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.Pragma
: HTTP/1.1์ Cache-Control ํค๋๊ฐ ์๊ธฐ๊ธฐ ์ ์ HTTP/1.0์์ ๋์ฉ ํค๋๋ก ์ฌ์ฉ๋์๋ค. ๊ธฐ๋ฅ์ ์ ์ฌํ๋ค.Vary
: ๋์ผํ URL์ ๋ํด ์์ฒญ์ ํ๋๋ผ๋ ์์ฒญํ ์ฌ์ฉ์์ ํน์ง(User Agent, Accept Encoding, Origin ๋ฑ)์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์๋ต์ ํ๊ธฐ ์ํด ์กด์ฌํ๋ ํค๋.- User-Agent: ์บ์ฑํ๊ณ ์๋ ์ปจํ ์ธ ์ ์ต์ด User-Agent ์ ๋ณด๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ์บ์ฑ๋ ์ปจํ ์ธ ๋ฅผ ์ ๋ฌํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ฐ์ผ ์ ์ ์๊ฒ ๋ฐ์คํฌํฑ ๋ฒ์ ์ ์ค์๋ก ์๋ธํ๋ ์ผ์ ํผํ๋๋ก ํด์ค๋ค.
Freshness(์ ์ ๋)
์บ์๋ ๋ฆฌ์์ค๋ฅผ ๋ก์ปฌ์(ํน์ ์นํ๋ก์์) ์ ์ฅํด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋๋ง๋ค ๋ค์ด๋ก๋ ํ์ง ์๊ณ ์บ์์ ์๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์นํ์ด์ง๊ฐ ๋ก๋๋๋ค(์ฑ๋ฅ์ด ํฅ์๋๋ค). ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ์ ์ ๋(Freshness)์ ๋ฌธ์ ๊ฐ ์๋ค. ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์์ ํ๋๋ฐ๋ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด ์์ ์ด ๋ฐ์๋์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฑ๋ฅ์ ์ฑ๊ธฐ๋ฉด์ ์ด๋ป๊ฒ ์ ์ ์์ค์ ์ ์ ๋๋ฅผ ์ ์งํ ์ ์์๊น?
- cache eviction(์บ์ ์ถ์ถ): ์ ์ฅ์๋ ํ์ ๋์ด ์์ผ๋ ์บ์๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฑฐ๋๋ค.
- ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ค๋ฉด? ๋ฆฌ์์ค ๋ง๋ฃ ์์ ์ ๋ํด ํต์ ํด์ผ ํ๋ค. ์ด ๋ง๋ฃ์์ ์ด์ ๊น์ง๋ ๋ฆฌ์์ค๊ฐ ์ ์ ํ๋ค๊ณ ๊ฐ์ฃผ๋๋ค.
- ๊ทธ๋ฌ๋ ์ ์ ํ์ง ์์ ๋ฆฌ์์ค๊ฐ ๋ฐ๋ก ์ถ์ถ๋๊ฑฐ๋ ๋ฌด์๋๋ ๊ฒ์ ์๋๋ค. ์บ์๊ฐ ์บ์๊ฐ ์ ์ ํ์ง ์์ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ ๋ฐ์ผ๋ฉด ํด๋น ๋ฆฌ์์ค๊ฐ ์๋ฒ์ ๋ฆฌ์์ค์ ์ฐจ์ด๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด
If-None-Match
์์ฒญ์ ์๋ฒ์ ๋ณด๋ธ๋ค. - ์๋ฒ๋ ์ด ์์ฒญ์ ๋ฐ๊ณ ์๋ฒ์ ๋ฆฌ์์ค๊ฐ ์์ ์ด ๋์๋์ง ํ์ธํ๊ณ ์์ ๋์ง ์์์ผ๋ฉด ํด๋น ๋ฆฌ์์ค ์ ์ก ์์ด
304
(Not Modified)๋ผ๊ณ ์๋ตํ๋ค.
์ ์ ๋ lifetime ๊ณ์ฐํ๊ธฐ
๋ง๋ฃ์๊ฐ = responseTime + freshnessLifetime - currentAge
Reference
https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=ko
https://www.zerocho.com/category/HTTP/post/5b594dd3c06fa2001b89feb9
https://tech.kakao.com/2017/10/23/wcache-2/