HTTP ์บ์ (HTTP Cache)
Photo by Markus Spiske on Unsplash
์บ์๋ ์์ฃผ ์ฐ์ด๋ ๋ฌธ์์ ์ฌ๋ณธ์ ์๋์ผ๋ก ๋ณด๊ดํ๋ HTTP ์ฅ์น์ด๋ค. ์น ์์ฒญ์ด ์บ์์ ๋์ฐฉํ์ ๋, ์บ์๋ ์ฌ๋ณธ์ด ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๋ฌธ์๋ origin ์๋ฒ๊ฐ ์๋ ์บ์๋ก๋ถํฐ ์ ๊ณต๋๋ค. ์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ๊ฐ์ ธ์จ๋ค.
- ๋ถํ์ํ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฌ ๋คํธ์ํน ๋น์ฉ์ ์ค์ฌ์ค๋ค.
- ๊ฑฐ๋ฆฌ๋ก ์ธํ ์ง์ฐ์๊ฐ์ ์ค์ฌ ์นํ์ด์ง๋ฅผ ๋นจ๋ฆฌ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ๋๋ค.
- ์๋ฒ์ ๋ํ ์์ฒญ์ ์ค์ฌ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ธ๋ค.
์บ์ ์ฒ๋ฆฌ ๋จ๊ณ(Cache Processing Steps)
์บ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ๋์ํ๋ค.
์์ฒญ ๋ฐ๊ธฐ์ ํ์ฑ (Receiving & Parsing)
๋คํธ์ํฌ๋ก ๋ถํฐ ๋์ฐฉํ ์์ฒญ ๋ฉ์์ง๋ฅผ ์ฝ๋๋ค. ๋ฉ์์ง๋ฅผ ํ์ฑํ์ฌ URL๊ณผ ํค๋๋ค์ ์ถ์ถํ๋ค.
์บ์ ๊ฒ์(Lookup)
์์ฒญ์ ๋์ํ๋ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ด ์๋์ง ๊ฒ์ฌํ๊ณ , ์ฌ๋ณธ์ด ์๋ค๋ฉด ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค.(๊ทธ๋ฆฌ๊ณ ๋ณต์ฌ๋ณธ์ ๋ก์ปฌ์ ์ ์ฅํ๋ค.) ์ฌ๋ณธ์ด ์๋ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์งํํ๋ค.
์บ์๋ ๊ฐ์ฒด๋ ์ผ๋ง๋ ์ค๋ซ๋์ ์บ์์ ๋จธ๋ฌด๋ฅด๊ณ ์์๋์ง, ์ผ๋ง๋ ์์ฃผ ์ฌ์ฉ๋์๋์ง ๋ฑ์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค.
์ ์ ๋ ๊ฒ์ฌ(Freshness check)
์บ์๋ ์ฌ๋ณธ์ด ์ถฉ๋ถํ ์ ์ ํ์ง๋ฅผ ๊ฒ์ฌํ๋ค.
์บ์๋ ์ฌ๋ณธ์ด ์ ์ ๋์ ํ๊ณ๋ฅผ ๋์ ์ ๋๋ก ์ค๋ ๋์๋ค๋ฉด, ์ ์ ํ์ง ์์๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ, ๊ทธ ์ฌ๋ณธ์ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ๊ธฐ ์ ์ ๋ณ๊ฒฝ์ฌํญ ์ฌ๋ถ๋ฅผ ์๋ฒ์ ํ์ธํด์ผ ํ๋ค.
์๋ต ์์ฑ(Response creation)
์๋ก์ด ํด๋์ ์บ์๋ ๋ณธ๋ฌธ์ผ๋ก ์๋ต๋ฉ์์ง๋ฅผ ๋ง๋ ๋ค. ์บ์๋ ํด๋ผ์ด์ธํธ์ ๋ง๊ฒ ํค๋๋ฅผ ์์ ํด์ผ ํ๋ ์ฑ
์์ด ์๋ค. ์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ๊ฐ HTTP/1.1์๋ต์ ๊ธฐ๋ํ๋ ์ํฉ์์ ์๋ฒ๊ฐ HTTP/1.0 ์๋ต์ ๋ฐํํ๋ค๋ฉด, ์บ์๋ ์ด ํค๋๋ฅผ ์ ์ ํ๊ฒ ๋ฒ์ญํด์ผ ํ๋ค. ์บ์๋ ๋ํ ์ ์ ๋ ์ ๋ณด(Cache-Control
, Age
, Expires
๋ฑ)๋ฅผ ์ฝ์
ํ๋ฉฐ, ์์ฒญ์ด ํ๋ฝ์ ์บ์๋ฅผ ๊ฑฐ์ณ๊ฐ์์ ์๋ ค์ฃผ๊ธฐ ์ํด ์ข
์ข
Via
ํค๋๋ฅผ ํฌํจ์ํจ๋ค. ์บ์๊ฐ Dateํค๋๋ฅผ ์กฐ์ ํด์๋ ์๋๋ค. Dateํค๋๋ ๊ทธ ๊ฐ์ฒด๊ฐ ์ ์๋ฒ์์ ์ต์ด๋ก ์๊ฒจ๋ ์ผ์๋ฅผ ํํํ๋ ๊ฒ์ด๋ค.
๋ฐ์ก(Sending)
์บ์๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ต์ ํด๋ผ์ด์ธํธ์ ๋๋ ค์ค๋ค.
๋ก๊น (Logging) - optional
๋ก๊ทธํ์ผ์ ํธ๋์ญ์ ์ ๋ํด ์์ ํ ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค.
์บ์ ์ ์ค(cache hit)๊ณผ ์คํจ(cache miss)
์บ์์ ์์ฒญ์ด ๋์ฐฉํ์ ๋, ๊ทธ์ ๋์ํ๋ ์ฌ๋ณธ์ด ์๋ค๋ฉด ์ด๋ฅผ ์ด์ฉํด ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. ์ด๋ฅผ ์บ์ ์ ์ค(cache hit)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ง์ฝ ๋์ํ๋ ์ฌ๋ณธ์ด ์๋ค๋ฉด origin ์๋ฒ๋ก ์์ฒญ์ด ์ ๋ฌ๋๋ฉฐ, ์ด๊ฒ์ ์บ์ ์คํจ(cache miss)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์บ์๊ฐ ์ ์ค๋๋ฉด ์ง๊ตฌ ๋ฐ๋ํธ์ ์กด์ฌํ๋ origin์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค.
๋ง์ฝ ํน์ ์ฌ์ดํธ๋ฅผ ์์ฃผ ๋ฐฉ๋ฌธํ๋ค๋ฉด ๊ทธ ์ฌ์ดํธ์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์บ์ฑํ๋ฉด ์ด๋จ๊น? ๊ทธ ๋ฌธ์๋ค์ ์ต์ ํ๋ ์ ๋ณด์ผ๊น?
์ฌํ์ธ(Revalidations)
์บ์๋ ๋ง๊ทธ๋๋ก ์ฌ์ดํธ์ ๋ฌธ์(๋ฐ ์ฝํ ์ธ )๋ฅผ ๋ณต์ฌํ์ฌ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค. ๊ทธ๋์ ์บ์๊ฐ ์ ์ค๋์๋ค๊ณ ํ ์ง๋ผ๋ origin ์๋ฒ์ ์ฝํ ์ธ ๋ ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์บ์์ ๋ด๊ธด ์ฌ๋ณธ์ด ์ฌ์ ํ ์ต์ ์ธ์ง ์๋ฒ๋ฅผ ํตํด ํ์ธํด์ผํ๋ค. ์บ์๋ฅผ ์ฌํ์ธํ๋ ์์ ์ ๋๋ถ๋ถ ํด๋ผ์ด์ธํธ๊ฐ ์บ์์ ์ฌ๋ณธ์ ์์ฒญํ์๊ณ , ๊ทธ ์ฌ๋ณธ์ ๋ํ ํ์ธ ํ์ํ ์ ๋๋ก ์ค๋๋ ๊ฒฝ์ฐ์ ์ค์ํ๋ค. ํจ๊ณผ์ ์ธ ํ์ธ์ ์ํด HTTP๋ ์๋ฒ๋ก๋ถํฐ ์ ์ฒด ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ณ ๋ ์ฝํ ์ธ ๊ฐ ์ฌ์ ํ ์ ์ ํ์ง ํ์ธํ๊ธฐ ์ํด ์์ ์ฌ๊ฒ์ฌ ์์ฒญ์ ๋ณด๋ธ๋ค. ๋ค์์ ์์ฒญ์ด ์๋ฒ์ ๋์ฐฉํ๋ฉด ์ผ์ด๋ ์ ์๋ ์ธ๊ฐ์ง ์ํฉ์ด๋ค. (์ ์ ๋ ๊ฒ์ฌ์ ๋ํ ๊ท์น์ ๋ณ๋์ ๋ฌธ์๋ก ์ ๋ฆฌํ ์์ )
์ฌํ์ธ ์ ์ค (Revalidate hit)
๋ง์ฝ ์๋ฒ์ ๋ฌธ์๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ HTTP 304 Not Modified
์๋ต์ ๋ณด๋ธ๋ค. ๊ทธ ์ฌ๋ณธ์ด ์ฌ์ ํ ์ ํจํจ์ ์๊ฒ๋ ์บ์๋ ์ฆ๊ฐ ์ฌ๋ณธ์ด ์ ์ ํ๋ค๊ณ ํ์ํ ๋ค ๊ทธ ์ฌ๋ณธ์ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ๋ค.
HTTP์์ ์บ์๋ ๊ฐ์ฒด๋ฅผ ์ฌํ์ธํ๊ธฐ ์ํด ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋๊ฒ์
If-Modified-Since
ํค๋์ด๋ค. ์๋ฒ์๊ฒ ๋ณด๋ด๋ GET์์ฒญ์ ์ด ํค๋๋ฅผ ์ถ๊ฐํ๋ฉด ์บ์๋ ์๊ฐ ์ดํ์ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ์ฌ๋ณธ์ ๋ณด๋ด๋ฌ๋ผ๋ ์๋ฏธ๊ฐ ๋๋ค.
์ด๋ origin ์๋ฒ๊ฐ์ ํ์ธ ๊ณผ์ ์ผ๋ก ์ธํด ์์ ์บ์ ์ ์ค๋ณด๋จ ๋๋ฆฌ์ง๋ง, ์๋ฒ๋ก๋ถํฐ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์บ์ ์คํจ๋ณด๋ค๋ ๋น ๋ฅด๋ค.
์ฌํ์ธ ์คํจ (Revalidate miss)
๋ง์ฝ ์๋ฒ ๊ฐ์ฒด๊ฐ ์บ์๋ ์ฌ๋ณธ๊ณผ ๋ค๋ฅด๋ค๋ฉด, ์๋ฒ๋ ์ฝํ
์ธ ์ ์ฒด์ ํจ๊ป ํ๋ฒํ 200 OK
์๋ต์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค.
๊ฐ์ฒด ์ญ์ (Object deleted)
๋ง์ฝ ์์ฒญํ ์ฝํ
์ธ ๊ฐ ์๋ฒ์์ ์ญ์ ๋์๋ค๋ฉด, ์๋ฒ๋ 404 Not Found
์๋ต์ ๋๋ ค๋ณด๋ด๋ฉฐ, ์บ์๋ ์ ์ฅ๋ ์ฌ๋ณธ์ ์ญ์ ํ๋ค.
์ฐธ๊ณ
- HTTP ์๋ฒฝ๊ฐ์ด๋