[HTTP] 7.HTTP ํ—ค๋”2 - ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ

 

1. ์บ์‹œ ๊ธฐ๋ณธ ๋™์ž‘

[์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ]

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ

๋‘๋ฒˆ์งธ ์š”์ฒญ -> ์„œ๋ฒ„์—์„œ ๋˜‘๊ฐ™์ด ์š”์ฒญ ๋ฐ›์•„์„œ ์‘๋‹ต ๋‚ด๋ ค์คŒ

 

๋‹จ์ )

- ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ๊ณ„์† ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋ฐ›์•„์•ผํ•จ

- ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ณ  ๋น„์Œˆ

- ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ฆผ

- ๋Š๋ฆฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜

 

[์บ์‹œ ์ ์šฉ]

- ์บ์‹œ ์œ ํšจํ•œ ์‹œ๊ฐ„ (cache-control: max-age)๋™์•ˆ star.jpg๊ฐ€ ์›น๋ธŒ๋ผ์šฐ์ € + ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์— ์‘๋‹ต๊ฒฐ๊ณผ๋ฅผ ์ €์žฅ

- ๋‘ ๋ฒˆ์งธ ์š”์ฒญ๋•Œ ์บ์‹œ์—์„œ ๋จผ์ € ํ™•์ธํ•˜๊ณ  ๊ฐ€์ ธ์˜ด 

 

์žฅ์ )

- ์บ์‹œ ๋•๋ถ„์— ์บ์‹œ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋™์•ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ

- ๋น„์‹ผ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

- ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„

- ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜

 

์„ธ๋ฒˆ์งธ ์š”์ฒญ - ์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ

- ๋˜‘๊ฐ™์ด ์บ์‹œ ๋ฐ์ดํ„ฐ ๋‚ด๋ ค์ฃผ๊ณ  ์บ์‹œ ๋ฎ์–ด ์”Œ์šฐ๋ฉด์„œ ์บ์‹œ ์ดˆ๊ธฐํ™”

- ์ด ๊ณผ์ •์—์„œ ๋„คํŠธ์›Œํฌ๋Š” ๊ทธ๋Œ€๋กœ ์”€

 

์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ

- ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋ฉด ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•˜๊ณ  ์บ์‹œ๋ฅผ ๊ฐฑ์‹ 

- ์ด๋•Œ ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒ

 

* ์บ์‹œ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„๋ฐ์ดํ„ฐ๊ฐ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์—ˆ์–ด๋„ ๋˜‘๊ฐ™์„ ๋•Œ ๋ฐ์ดํ„ฐ ๋‹ค์‹œ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?


2. ๊ฒ€์ฆ ํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ1

์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•ด์„œ ์„œ๋ฒ„์— ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์ด ๋‚˜ํƒ€๋‚จ

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

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

 

์ƒํ™ฉ) ์บ์‹œ ๋งŒ๋ฃŒํ›„์—๋„ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ

- ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋Œ€์‹ ์— ์ €์žฅํ•ด ๋‘์—ˆ๋˜ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

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

 

[๊ฒ€์ฆํ—ค๋” ์ถ”๊ฐ€]

์ฒซ๋ฒˆ์งธ ์š”์ฒญ

- ์‘๋‹ต ํ—ค๋”์— Last-Modified : 2020-11-10 10:00:00

- ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅ / ์บ์‹œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ 2020-11-10 10:00:00

 

๋‘๋ฒˆ์งธ ์š”์ฒญ - ์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ

- ์บ์‹œ ์ตœ์ข… ์ˆ˜์ •์ผ (Last Modified)

- ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ if-modified-since ํ—ค๋” ์ถ”๊ฐ€ํ•ด์„œ ๋ณด๋ƒ„

- ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ์„ ๋น„๊ต (๊ฒ€์ฆ ๊ฐ€๋Šฅ)

(1) ์ˆ˜์ •์ด ์•ˆ๋œ ๊ฒฝ์šฐ -> 304 Not Modified / HTTP body๊ฐ€ ์—†์Œ

(2) ์ˆ˜์ •์ด ๋œ ๊ฒฝ์šฐ   -> ๋‹ค์‹œ ์‘๋‹ต ๋ณด๋‚ด๊ณ  ์บ์‹œ ์ €์žฅ

 

์ •๋ฆฌ)

- ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•ด๋„, ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š์œผ๋ฉด

- 304 Not Modified + ํ—ค๋” ๋ฉ”ํƒ€ ์ •๋ณด๋งŒ ์‘๋‹ต (Body X)

- ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ์‘๋‹ต ํ—ค๋” ์ •๋ณด๋กœ ์บ์‹œ์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๊ฐฑ์‹ 

- ํด๋ผ์ด์–ธํŠธ๋Š” ์บ์‹œ์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์žฌํ™œ์šฉ

- ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์šฉ๋Ÿ‰์ด ์ ์€ ํ—ค๋” ์ •๋ณด๋งŒ ๋‹ค์šด๋กœ๋“œ

- ๋งค์šฐ ์‹ค์šฉ์ ์ธ ํ•ด๊ฒฐ์ฑ…


3. ๊ฒ€์ฆ ํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ2

๋‹จ์ )

- 1์ดˆ ๋ฏธ๋งŒ(0.x์ดˆ) ๋‹จ์œ„๋กœ ์บ์‹œ ์กฐ์ •์ด ๋ถˆ๊ฐ€๋Šฅ

- ๋‚ ์งœ ๊ธฐ๋ฐ˜์˜ ๋กœ์ง ์‚ฌ์šฉ

- ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋‚ ์งœ๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ, ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™์€ ๊ฒฝ์šฐ

- ์„œ๋ฒ„์—์„œ ๋ณ„๋„์˜ ์บ์‹œ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

   ex) ์ŠคํŽ˜์ด์Šค๋‚˜ ์ฃผ์„์ฒ˜๋Ÿผ ํฌ๊ฒŒ ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์—์„œ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•˜๊ณ ์‹ถ์€ ๊ฒฝ์šฐ

 

ETag, if-None-Match

- ETag(Entity Tag)
- ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ์ž„์˜์˜ ๊ณ ์œ ํ•œ ๋ฒ„์ „ ์ด๋ฆ„์„ ๋‹ฌ์•„๋‘ 

   ex) ETag: "v1.0", ETag: "a1b2c3"

- ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ด ์ด๋ฆ„์„ ๋ฐ”๊ฟ” ๋ณ€๊ฒฝ (Hash๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑ)

   ex) ETag: "aaa" -> ETag: "bbb"

- ์ง„์งœ ๋‹จ์ˆœํ•˜๊ฒŒ ETag๋งŒ ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€, ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ›๊ธฐ

 

[๊ฒ€์ฆํ—ค๋”์ถ”๊ฐ€]

ETag๋กœ ๋น„๊ต

 

์ •๋ฆฌ)

- ETag๋งŒ ์„œ๋ฒ„์— ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€ / ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ›๊ธฐ

- ์บ์‹œ ์ œ์–ด ๋กœ์ง์„ ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ๊ด€๋ฆฌ (ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹จ์ˆœํžˆ ์ด ๊ฐ’์„ ์„œ๋ฒ„์— ์ œ๊ณต, ํด๋ผ์ด์–ธํŠธ๋Š” ์บ์‹œ ๋งค์ปค๋‹ˆ์ฆ˜์„ ๋ชจ๋ฆ„) 

   ex) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ฃผ๊ธฐ์— ๋งž์ถฐ ETag ๊ฐฑ์‹ 

         ์„œ๋ฒ„๋Š” ๋ฐฐํƒ€ ์˜คํ”ˆ ๊ธฐ๊ฐ„์ธ 3์ผ ๋™์•ˆ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ETag ๋™์ผํ•˜๊ฒŒ ์œ ์ง€


4. ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”

(1) Cache-Control : ์บ์‹œ ์ง€์‹œ์–ด (directives)

 

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

- Cache-Control : no-cache : ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ ํ•ญ์ƒ ์›(origin)์„œ๋ฒ„(์บ์‹œ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์ฐ์„œ๋ฒ„)์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ

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

 

(2) Pragma

- Pragma : no-cache

- HTTP 1.0 ํ•˜์œ„ํ˜ธํ™˜

(์ž˜ ์•ˆ์”€)

 

(3) Expires

- ์บ์‹œ ๋งŒ๋ฃŒ์ผ์„ ์ •ํ™•ํ•œ ๋‚ ์งœ ์ง€์ • ๊ฐ€๋Šฅ -> ๋ณ„๋กœ์ž„, ์ดˆ๋‹จ์œ„๊ฐ€ ๋” ์œ ์—ฐํ•จ

- ์ง€๊ธˆ์€ ๋” ์œ ์—ฐํ•œ Cache-Control:max-age ๊ถŒ์žฅ (๋‘˜์ด ๊ฐ™์ด ์“ฐ๋ฉด Expires ๋ฌด์‹œ)

 

๊ฒ€์ฆ ํ—ค๋”

- ETag: "v 1.0", ETag: "abc"

- Last-Modified: Thu, 04 Jun 2020 07:19:24 GMT

 

์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”

- If-Match, If-None-Match : ETag๊ฐ’ ์‚ฌ์šฉ

- If-Modified-Since, If-Unmodified_Since : Last-Modified๊ฐ’ ์‚ฌ์šฉ


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

์› ์„œ๋ฒ„ ์ง์ ‘ ์ ‘๊ทผ (origin server)

ํ”„๋ก์‹œ ์บ์‹œ ๋„์ž…

* ์‚ฌ๋žŒ์ด ๋งŽ์ด ๋ณด๋Š” ์˜์ƒ์ด ๋‹ค์šด์ด ๋น ๋ฅธ ์ด์œ 

* ์›น๋ธŒ๋ผ์šฐ์ € (private์บ์‹œ) , ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„(public ์บ์‹œ)

 

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

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

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

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


6.  ์บ์‹œ ๋ฌดํšจํ™”

ํ™•์‹คํ•œ ์บ์‹œ ๋ฌดํšจํ™” ์‘๋‹ต

Cache-Control : no-cache, no-store, must-revalidate

Pragma: no-cache (HTTP 1.0 ํ•˜์œ„ํ˜ธํ™˜)

 

์บ์‹œ ์ง€์‹œ์–ด(directives) ํ™•์‹คํ•œ ์บ์‹œ ๋ฌดํšจํ™”

Cache-Control: no-cache
- ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ ์› ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ(์ด๋ฆ„์— ์ฃผ์˜!)

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

Cache-Control: must-revalidate
- ์บ์‹œ ๋งŒ๋ฃŒํ›„ ์ตœ์ดˆ ์กฐํšŒ์‹œ ์› ์„œ๋ฒ„์— ๊ฒ€์ฆํ•ด์•ผํ•จ
- ์› ์„œ๋ฒ„ ์ ‘๊ทผ ์‹คํŒจ์‹œ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•จ
- 504(Gateway Timeout)
must-revalidate
๋Š” ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด๋ผ๋ฉด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•จ
Pragma: no-cache
- HTTP 1.0 ํ•˜์œ„ ํ˜ธํ™˜

 

[no-cache VS must-revalidate]

1) no-cache

 

* no-cache๋กœ ๋ณด๋ƒˆ๋Š”๋ฐ ์ˆœ๊ฐ„์ ์œผ๋กœ ์›์„œ๋ฒ„์™€์˜ ๋„คํŠธ์›Œํฌ ๋‹จ์ ˆ๋œ๋‹ค๋ฉด?

-> ์˜›๋‚  ๋ฐ์ดํ„ฐ๋ผ๋„ ๋ณด์—ฌ์ฃผ์ž๋Š” ์„ค์ •์ด ์žˆ์Œ (์‘๋‹ต ๊ฐ€๋Šฅ) 200 OK (or Error)

 

2) revalidate

- ์› ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•จ!

- ์‘๋‹ต) 504 Gateway Timeout

 

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ