songining
article thumbnail

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ, ์บ์‹œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. 

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์—†์ด ์ข€ ๋” ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

1. cache-control ์ ์šฉ

- response header์— ์บ์‹œ๊ฐ€ ์œ ํšจํ•œ ์‹œ๊ฐ„(์ดˆ)๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์‹œ๊ฐ„๋™์•ˆ ์บ์‹œ๋กœ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ•œ๋‹ค. 

- ์บ์‹œ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋ฉด ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์‘๋‹ต์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค์‹œ ์œ ํšจ์‹œ๊ฐ„๋™์•ˆ ์บ์‹œ๋กœ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. (๊ฐฑ์‹ )

- ๋ธŒ๋ผ์šฐ์ €๋Š” cache-control ์ •๋ณด๋ฅผ ๋ฐ›์œผ๋ฉด ์„ค์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ์™€๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ํด๋ผ์ด์–ธํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ -> ๋””์Šคํฌ ์บ์‹œ ์ˆœ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

EX) cache-control: max-age=60(์ดˆ)

 

2. ์บ์‹œ ์‹œ๊ฐ„์˜ ์ดˆ๊ณผ

์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•œ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์„œ๋ฒ„๋Š” ์•„๋ž˜ 2๊ฐ€์ง€ ์ƒํ™ฉ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.

1) ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ

2) ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ

๋งŒ์•ฝ ์บ์‹œ ๋งŒ๋ฃŒํ›„์—๋„ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ด๋ฅผ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์บ์‹œ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค. 

 

3. ๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€ (Last-Modified)

1) ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ˆ˜์ •๋œ ์‹œ๊ฐ„ ์ถ”๊ฐ€ 

 

 

๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ˆ˜์ •๋œ ์‹œ๊ฐ„์„ ์‘๋‹ตํ—ค๋”์— ํ•จ๊ป˜ ๋ณด๋ƒ„

 

์ตœ๋Œ€ ์บ์‹œ ์œ ํšจ์‹œ๊ฐ„์ด ์ง€๋‚œ ๊ฒฝ์šฐ 

 

๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š”, ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ(If-Modified-Since)์„ ํ•จ๊ป˜ ๋ณด๋ƒˆ์„ ๋•Œ, 

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด 304(Not Modified) ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์„œ๋ฒ„๋Š” body ์—†์ด ์‘๋‹ต์„ ์ค€๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€๊ธด ํ•˜์ง€๋งŒ Body๊ฐ€ ์—†์ด ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ์ ์€ ๋น„์šฉ์œผ๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

4. ๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€ (ETag)

- ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋‚ ์งœ๋Š” ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ๋งŒ์•ฝ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™์€ ๊ฒฝ์šฐ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

- ETag ๋ž€ ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ ์‹ค์ œ๋กœ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. 

์‘๋‹ต ํ—ค๋”์— ETag ๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์ฃผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๊ฐ€ ํ•ด์‹œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

๋งŒ์•ฝ, ๋ธŒ๋ผ์šฐ์ € ์œ ํšจ ์บ์‹œ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜์–ด ์กฐ๊ฑด๋ถ€ ์š”์ฒญ(If-None-Match)๊ณผ ํ•จ๊ป˜ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ด์‹œ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ 304(Not Modified) ์‘๋‹ต์„ ๋ณด๋‚ด์ค€๋‹ค.

 

 

์ฆ‰ ๊ฒ€์ฆํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ์€ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.

- If-Modified-Since: Last-Modified ์‚ฌ์šฉ

- If-None-Match: ETag ์‚ฌ์šฉ

 

์บ์‹œ ์ œ์–ด ํ—ค๋” 

1. Cach-Control: max-age -> ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„, ์ดˆ ๋‹จ์œ„

2. Cach-Control: no-cache -> ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ ์› ์„œ๋ฒ„์—์„œ ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ, ์› ์„œ๋ฒ„ ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅ

3. Cach-Control: no-store -> ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ (๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์‚ญ์ œ)

4. Cache-Control: must-revalidate -> ์บ์‹œ ๋งŒ๋ฃŒ ํ›„ ์ตœ์ดˆ ์กฐํšŒ์‹œ ์› ์„œ๋ฒ„(ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„ X)์— ๊ฒ€์ฆ, ์› ์„œ๋ฒ„ ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

 

ํ”„๋ก์‹œ ์บ์‹œ

- Cache-Control : public -> ์‘๋‹ต์ด public ์บ์‹œ์— ์ €์žฅ๋˜์–ด๋„ ๋จ

- Cache-Control : private -> ์‘๋‹ต์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋งŒ ์œ„ํ•œ ๊ฒƒ์ด๋ผ private ์บ์‹œ์— ์ €์žฅํ•ด์•ผํ•จ

- Cache-Control : s-maxage -> ํ”„๋ก์‹œ ์บ์‹œ์—๋งŒ ์ ์šฉ๋˜๋Š” max-age

- Age : 60 (HTTP ํ—ค๋”) -> ์› ์„œ๋ฒ„ ์‘๋‹ต ํ›„ ํ”„๋ก์‹œ ์บ์‹œ ๋‚ด์— ๋จธ๋ฌธ ์‹œ๊ฐ„

 

 

์ถœ์ฒ˜

๊น€์˜ํ•œ๋‹˜ ๊ฐ•์˜ - ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹