HTTP ์บ์‹œ (HTTP Cache)

Photo by Markus Spiske on Unsplash

Photo by Markus Spiske on Unsplash

์บ์‹œ๋Š” ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฌธ์„œ์˜ ์‚ฌ๋ณธ์„ ์ž๋™์œผ๋กœ ๋ณด๊ด€ํ•˜๋Š” HTTP ์žฅ์น˜์ด๋‹ค. ์›น ์š”์ฒญ์ด ์บ์‹œ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ์บ์‹œ๋œ ์‚ฌ๋ณธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๋ฌธ์„œ๋Š” origin ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์บ์‹œ๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค„์—ฌ ๋„คํŠธ์›Œํ‚น ๋น„์šฉ์„ ์ค„์—ฌ์ค€๋‹ค.
  • ๊ฑฐ๋ฆฌ๋กœ ์ธํ•œ ์ง€์—ฐ์‹œ๊ฐ„์„ ์ค„์—ฌ ์›นํŽ˜์ด์ง€๋ฅผ ๋นจ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ค„์—ฌ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ธ๋‹ค.

์บ์‹œ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„(Cache Processing Steps)

์บ์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ๋™์ž‘ํ•œ๋‹ค.


์บ์‹œ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„: GET์š”์ฒญ ํ”Œ๋กœ์ฐจํŠธ


์š”์ฒญ ๋ฐ›๊ธฐ์™€ ํŒŒ์‹ฑ (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 ์™„๋ฒฝ๊ฐ€์ด๋“œ