์›น

Cache-Control

Cache-Control HTTP ํ—ค๋”์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…

  • #http
  • #header
  • #cache

cache-control HTTP ํ—ค๋” ํ•„๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ(์˜ˆ: ๋ธŒ๋ผ์šฐ์ €) ๋ฐ ๊ณต์œ  ์บ์‹œ(์˜ˆ: ํ”„๋ก์‹œ, CDN)์—์„œ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€์ธ ์„ฑ๋ช…

ํ•œ๊ตญ์–ด ์‹ค๋ ฅ์ด ๋ถ€์ ํ•˜์—ฌ ์ด ๊ธ€์ด ๊ตฌ๊ธ€ ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์ฃผ๋กœ ํ™œ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ •ํ™•ํ•œ ๋ฌธ๋ฒ•๊ณผ ์–ดํœ˜๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฌ๋ฉฐ, ์ถ”ํ›„์— ๋‹ค์‹œ ๊ฒ€ํ† ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โ†“              โ†“           โ†“
  [์›น ๋ธŒ๋ผ์šฐ์ €]  [๊ณต์œ ํ•œ ์บ์‹œ] [์ตœ์ฒ ํ•œ ์„œ๋ฒ„]

ํ†ต์‚ฌ๋ก 

์บ์‹œ ์ง€์‹œ๋ฌธ์˜ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ง€์‹œ์–ด๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์ง€๋งŒ ์ผ๋ถ€ ๊ตฌํ˜„์—์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ์—ฌ๋Ÿฌ ์ง€์‹œ๋ฌธ์€ ์‰ผํ‘œ๋ฅผ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: cache-control: private, max-age=180)
  3. ์ง€์‹œ๋ฌธ์˜ ์„ ํƒ์  ์ธ์ˆ˜๋Š” max-age=180๊ณผ ๊ฐ™์ด ๋“ฑํ˜ธ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€์‹œ๋ฌธ

์ง€์‹œ๋ฌธ์€ cache-control ํ—ค๋”์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

max-age

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
     max-age       max-age

์‘๋‹ต์˜ max-age=N์€ ์‘๋‹ต์ด ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ ํ›„(ํด๋ผ์ด์–ธํŠธ์—์„œ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Œ) ์ดˆ ๋™์•ˆ ์‘๋‹ต์ด ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ  ์‘๋‹ต ์บ์‹œ๊ฐ€ ์—ฌ์ „ํžˆ ์‹ ์„ ํ•œ ๋™์•ˆ ํ›„์† ์š”์ฒญ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Age ํ—ค๋”๋Š” ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ›„์† ์š”์ฒญ์„ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Cache-Control: max-age=604800
Age: 888

s-maxage

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
                   s-maxage

s-maxage๋Š” ๊ณต์œ  ์บ์‹œ์—์„œ ์œ ํšจ์„ฑ/์ตœ์‹ ์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ ์บ์‹œ์—์„œ๋Š” ๋ฌด์‹œ๋˜๋ฉฐ ๊ณต์œ  ์บ์‹œ์— ์ง€์ •๋œ ๊ฒฝ์šฐ max-age ๋ฐ Expires ํ—ค๋”๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

Cache-Control: s-maxage=604800

no-store

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โœ—             โœ—

no-store ์ง€์‹œ์–ด๊ฐ€ ํฌํ•จ๋œ ์‘๋‹ต์€ ๋ธŒ๋ผ์šฐ์ €์™€ ๊ณต์œ  ์บ์‹œ๋ฅผ ํฌํ•จํ•œ ์–ด๋А ๊ณณ์—๋„ ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋™์ผํ•œ ์†์„ฑ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์„œ๋ฒ„์— ๋„๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ฆ ํ† ํฐ๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

no-cache

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โ†“              โ†“
     ์žฌ๊ฒ€์ฆ          ์žฌ๊ฒ€์ฆ

์ด ์ง€์‹œ์–ด๋Š” ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œ์—์„œ ๊ฒ€์ƒ‰ํ•œ ํ›„ ์ฆ‰์‹œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋จผ์ € ์„œ๋ฒ„์—์„œ ์œ ํšจ์„ฑ์„ ๋‹ค์‹œ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค์˜ E-Tag๋ฅผ ์„œ๋ฒ„์˜ E-Tag์™€ ๋น„๊ตํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

must-revalidate

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
     โ†“                โ†“
   ์žฌ๊ฒ€์ฆ            ์žฌ๊ฒ€์ฆ

must-revalidate๋Š” ์‘๋‹ต์ด ์บ์‹œ์— ์ €์žฅ๋˜์–ด ํ›„์† ์š”์ฒญ์— ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‘๋‹ต์ด ์˜ค๋ž˜๋˜๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์›๋ณธ ์„œ๋ฒ„์—์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ max-age์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Cache-Control: max-age=604800, must-revalidate

proxy-revalidate

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
                      โ†“
                    ์žฌ๊ฒ€์ฆ

must-revalidate์™€ ๋™์ผํ•œ ๋™์ž‘์ด์ง€๋งŒ ๊ณต์œ  ์บ์‹œ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

private

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โœ“             โœ—

private ์‘๋‹ต ์ง€์‹œ๋ฌธ์€ ์‘๋‹ต์ด ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ ์บ์‹œ์—๋งŒ ์ €์žฅ๋  ์ˆ˜ ์žˆ๊ณ  ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ๋˜๋Š” ์บ์‹œ์—๋Š” ์ €์žฅ๋  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Cache-Control: private

public

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โœ“             โœ“

public ์‘๋‹ต ์ง€์‹œ๋ฌธ์€ ์‘๋‹ต์ด ๋กœ์ปฌ ์บ์‹œ์™€ ๊ณต์œ  ์บ์‹œ ๋ชจ๋‘์— ์ €์žฅ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Cache-Control: public

no-transform

   ํด๋ผ์ด์–ธํŠธ <------ CDN <------ ์„œ๋ฒ„
       โœ—             โœ—
  ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜    ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜

์ด ์ง€์‹œ๋ฌธ์€ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ •๊ณผ ๊ฐ™์€ ์ค‘๊ฐœ์ž์— ์˜ํ•œ ๋ณ€๊ฒฝ์ด๋‚˜ ๋ณ€ํ˜• ์—†์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณต๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Shayan, T. Cache-Control: Cheat Sheet.https://shayy.org/posts/cache-control/
MDN Web Docs. Cache-Control. Retrieved 2024, June 22 from https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
Cloudflare. What is cache-control? | Cache explained. Retrieved 2024, June 22 from https://www.cloudflare.com/learning/cdn/glossary/what-is-cache-control/
Jxck. Cache-Control: must-understand ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒ†ใ‚ฃใƒ–ใจใฏไฝ•ใ‹.https://blog.jxck.io/entries/2021-02-12/cache-control-must-understand.html