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

2021. 1. 17. 19:43ใ†๐ŸŒ Web

 

๋ณธ ํฌ์ŠคํŒ…์€ ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค, ๊น€์˜ํ•œ ๋‹˜์˜ '๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹' ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ• ํ›„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

 

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

-> ์•„๋ž˜์™€ ๊ฐ™์ด star ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด 1.1Mbyte ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋œ๋‹ค (ํ—ค๋” + ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰).

-> ์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ, ๋‘๋ฒˆ์งธ ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด ๋˜‘๊ฐ™์ด 1.1Mbyte ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋œ๋‹ค (๊ฐ™์€ ์š”์ฒญ์ด๋‹ˆ, ๊ฐ™์€ ์šฉ๋Ÿ‰ ์ „์†ก)

 

2. ์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ, 

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

-> ๋А๋ฆฌ๊ณ  ๋น„์‹ธ๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค = ๋А๋ฆฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ (slow ux)

 

3. ์บ์‹œ ์ ์šฉํ•  ๋•Œ,

-> 1.1Mbyte์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค.

-> ๋‘๋ฒˆ์งธ ์š”์ฒญ์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์—์„œ ๊ณง ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

4. Cache-control: Max-age = 60

-> 60์ดˆ ๋™์•ˆ๋งŒ ์œ ํšจํ•œ ์บ์‹œ.

-> 60์ดˆ ์ดํ›„ ๋ถ€ํ„ฐ๋Š”, ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์บ์‹œ์— ์ €์žฅํ•ด์•ผํ•œ๋‹ค (์บ์‹œ ๊ฐฑ์‹ ).

-> server์™€ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์„ ์ธ์ง€ํ•˜์ž (์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์˜ ์—…๋ฐ์ดํŠธ ๊ฒฝ์šฐ)

 

5. ์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ์ผ ๋•Œ, 

  • 1) ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ
  • 2) ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ -> ์‹œ๊ฐ„ ์ดˆ๊ณผ๋œ ์บ์‹œ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ธฐ์กด ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

6. ๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€ < ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ >

-> Header์— last-modified ๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€

-> ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ˆ˜์ •๋œ ์‹œ๊ฐ„ ํ‘œ์‹œ

7. ๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€ < ๋‘ ๋ฒˆ์งธ ์š”์ฒญ >

8. ๊ฒ€์ฆ ํ—ค๋”(last-modified)์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ(if-modified-since)

-> 304 not Modified + ํ—ค๋” ๋ฉ”ํƒ€ ์ •๋ณด๋งŒ ์‘๋‹ต ๋œ๋‹ค. ( ๋ฐ”๋”” x )

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

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

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

 

9. ETag (Entity Tag)

-> ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ์ž„์˜์˜ ๊ณ ์œ ํ•œ ๋ฒ„์ „ ์ด๋ฆ„์„ ๋‹ฌ์•„๋‘”๋‹ค. ex) ETag: 'v1.0', ETag: 'v2.0'

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

  • ex) ETag: 'aaaa' --> ETag: 'bbbb'

10. ETag ๋™์ž‘ ์›๋ฆฌ-๊ฒฐ๊ณผ

-> ETag๋งŒ ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€, ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ„๋‹ค. (key-value ๋น„๊ต ํ˜•์‹)

-> ์บ์‹œ ์ €์žฅ์†Œ์—์„œ ๋ณด๋‚ธ ETag์™€ ์„œ๋ฒ„์˜ ETag๋Š” ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ, hash ๋ฐฉ์‹์ด๊ธฐ์—, value๊ฐ’์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค(๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋์„ ์‹œ). 

-> ์ฆ‰, ETag๋งŒ ์„œ๋ฒ„์— ๋ณด๋‚ด ์ผ์น˜/๋ถˆ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ฆฌํ•˜์—ฌ ์บ์‹œ์ œ์–ด ๋กœ์ง์„ ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

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

  • Cache-control: ์บ์‹œ ์ œ์–ด
  • Pragma: ์บ์‹œ ์ œ์–ด (ํ•˜์œ„ ํ˜ธํ™˜)
  • Expires: ์บ์‹œ ์œ ํšจ ๊ธฐ๊ฐ„ (ํ•˜์œ„ ํ˜ธํ™˜): ์บ์‹œ ๋งŒ๋ฃŒ์ผ์„ ์ •ํ™•ํ•œ ๋‚ ์งœ๋กœ ์ง€์ • -> ์ง€๊ธˆ์€ ๋” ์œ ์—ฐํ•œ cache-control: max-age ๊ถŒ์žฅ

12. Cache-control

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

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

-> no-store: ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐ ์ •๋ณด ์žˆ์œผ๋ฉด ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

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

  • if-match, if-none-match: ETag ๊ฐ’ ์‚ฌ์šฉ
  • if-modified-since, if unmodified-since: last-modified ๊ฐ’ ์‚ฌ์šฉ
  • ETag์™€ last-modified ๋‘˜์€ ์„œ๋กœ ๋ฐ˜๋Œ€๋œ๋‹ค.

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

-> ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ proxy ์บ์‹œ ์„œ๋ฒ„์— ๋ฐฐ์น˜

-> 0.5์ดˆ ๊ฑธ๋ ค ๋ฏธ๊ตญ ์„œ๋ฒ„๊นŒ์ง€ ๊ฐ€์ง€ ์•Š๊ณ , ํ”„๋ก์‹œ ์„œ๋ฒ„์—์„œ 0.1์ดˆ๋งŒ์— ํ•ด๊ฒฐํ•œ๋‹ค.

 

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

-> cache-control: private -> ์‘๋‹ต์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋งŒ์„ ์œ„ํ•œ ๊ฒƒ ( private ์บ์‹œ์— ์ €์žฅํ•ด์•ผํ•œ๋‹ค(๊ธฐ๋ณธ๊ฐ’) )

 

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

-> ํ™•์‹คํ•œ ์บ์‹œ ๋ฌดํšจํ™”: ์ค‘์š”ํ•œ ์ •๋ณด๋‚˜ ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๊ฒฝ์šฐ ํ™•์‹คํžˆ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™” ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

 

16. Cache-control

  • no-cache: ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ origin์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ
  • no-store: ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • must-revalidate: ์บ์‹œ ๋งŒ๋ฃŒ ํ›„ ์ตœ์ดˆ ์กฐํšŒ์‹œ origin ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ -> origin ์„œ๋ฒ„ ์ ‘๊ทผ ์‹คํŒจ์‹œ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•จ (504, Gateway Timeout)

17. no-cache์™€ must-revalidate์˜ ์ฐจ์ด

-> no-cache

-> must-revalidate