Posts ๐Ÿ’ป 02. HTTP ์บ์‹ฑ
Post
Cancel

๐Ÿ’ป 02. HTTP ์บ์‹ฑ

HTTP ์บ์‹ฑ

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

์บ์‹œ์˜ ์ข…๋ฅ˜

shared-local(private)-cache

Private browser caches(์‚ฌ์„ค ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ)

  • ๋‹จ์ผ ์‚ฌ์šฉ์ž

  • ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๊ฐ€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด HTTP๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œ๋œ ๋ชจ๋“  ๋ฌธ์„œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์š”์ฒญ ์—†์ด ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ, ์ €์žฅ, ์†Œ์Šค๋กœ ๋ณด๊ธฐ ๋“ฑ์„ ์œ„ํ•ด ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋ฌธ์„œ๋“ค์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

Shared proxy caches(๊ณต์œ  ํ”„๋ก์‹œ ์บ์‹œ)

  • ์—ฌ๋Ÿฌ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต์„ ์ €์žฅํ•œ๋‹ค.
  • ์˜ˆ) ISP๋‚˜ ํšŒ์‚ฌ์—์„œ ์›นํ”„๋ก์‹œ๋ฅผ ์„ค์น˜ํ•ด ์กฐํšŒ๊ฐ€ ๋งŽ์ด ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์€ ๋ช‡ ๋ฒˆ์ด๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋„๋ก ๋งŒ๋“ ๋‹ค.

๊ทธ์™ธ

  • ๊ฒŒ์ดํŠธ์›จ์ด ์บ์‹œ
  • CDN
  • ๋ฆฌ๋ฒ„์Šค ๋ก์‹œ ์บ์‹œ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

CDN: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์œผ๋ฉด ์ปจํ…์ธ ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ๋•Œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ๊ฐ€๊นŒ์šด ๊ณณ์— ์œ„์น˜ํ•œ ์บ์‹œ ์„œ๋ฒ„์— ์ปจํ…์ธ ๋ฅผ ์ €์žฅ(์บ์‹ฑ)ํ•˜๊ณ  ์ปจํ…์ธ  ์š”์ฒญ ์‹œ์— ์บ์‹œ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ปจํ…์ธ ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ปจํ…์ธ ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์บ์‹ฑ ๋™์ž‘์˜ ๋Œ€์ƒ

  • ์ฃผ๋กœ GET์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์บ์‹ฑํ•œ๋‹ค.
  • ์ผ์ฐจ ์บ์‹œํ‚ค
    • ์š”์ฒญ ๋ฉ”์„œ๋“œ
    • ๋Œ€์ƒ URI
  • ์บ์‹ฑ ์—”ํŠธ๋ฆฌ ํผ
    • ์š”์ฒญ๋œ ๊ฒฐ๊ณผ: HTML ๋ฌธ์„œ, ์ด๋ฏธ์ง€, ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•˜๋Š” GET ์š”์ฒญ์— ๋Œ€ํ•œ 200(OK) ์‘๋‹ต
    • 301 ์‘๋‹ต: ์˜๊ตฌ์ ์ธ ์ด๋™
    • 404: ํŽ˜์ด์ง€ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • 206: ๋ถ€๋ถ„์ ์ธ ์ปจํ…์ธ  ์‘๋‹ต
    • ๊ธฐํƒ€ GET ์™ธ ์‘๋‹ต(์บ์‹œ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ์ ˆํ•œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ •์˜๋˜์—ˆ์„ ๋•Œ)

URI(Uniform Resource Identifier, URI): ํ†ตํ•ฉ ์ž์› ์‹๋ณ„์ž๋กœ, ์ธํ„ฐ๋„ท ์— ์žˆ๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ์ผํ•œ ์ฃผ์†Œ์ด๋‹ค. URI์˜ ํ•˜์œ„๊ฐœ๋…์œผ๋กœ URL, URN์ด ์žˆ๋‹ค.

์บ์‹œ ๊ด€๋ จ ํ—ค๋”

Cach-control ํ—ค๋”์˜ ์˜ต์…˜

http-caching

  • no-store: ์‘๋‹ต์„ ์บ์‹œํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  • no-cache: ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ์„œ๋ฒ„์— ํ™•์ธ์„ ๋ฐ›๋„๋ก ํ•œ๋‹ค. (์ด ์บ์‹œ ์ง„์งœ ์จ๋„ ๋˜๋‹ˆ..?)
  • must-revalidate ๋งŒ๋ฃŒ๋œ ์บ์‹œ๋งŒ ์„œ๋ฒ„์— ํ™•์ธ์„ ๋ฐ›๋„๋ก ํ•œ๋‹ค.
  • private: ๊ณต์œ  ์บ์‹œ์— ์ €์žฅํ•ด๋„ ๋œ๋‹ค.
  • private: ๊ณต์œ  ์บ์‹œ์— ์ €์žฅํ•˜๋ฉด ์•ˆ ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ํŠน์ • ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—๋งŒ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.
  • max-age: ์บ์‹œ ์œ ํšจ์‹œ๊ฐ„. ๋ฆฌ์†Œ์Šค๊ฐ€ ์‹ ์„ ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋  ์ตœ๋Œ€ ์‹œ๊ฐ„(freshness lifetime์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค)์„ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ๊ทธ ์‹œ๊ฐ„์„ ์ง€๋‚˜๋ฉด ๋งŒ๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ฒจ์ง„๋‹ค.

๊ทธ ์™ธ ํ—ค๋”

  • Age: max-age ์‹œ๊ฐ„ ๋‚ด์—์„œ ์–ผ๋งˆ๋‚˜ ๊ฒฝ๊ณผํ–ˆ๋Š”์ง€ ์ดˆ ๋‹จ์œ„๋กœ ์•Œ๋ ค์ค€๋‹ค.
  • Expires: ์‘๋‹ต ์ปจํ…์ธ ๊ฐ€ ์–ธ์ œ ๋งŒ๋ฃŒ๋˜๋Š” ์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ—ค๋”. Cache-Control์˜ max-age๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ํ—ค๋”๋Š” ๋ฌด์‹œ๋œ๋‹ค.
  • Etag: HTTP ์ปจํ…์ธ ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š” ์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ—ค๋”. ๊ฐ™์€ ์ฃผ์†Œ์˜ ๋ฆฌ์†Œ์Šค๋ผ๋„ ์ปจํ…์ธ ๊ฐ€ ๋‹ฌ๋ผ์กŒ์œผ๋ฉด Etag๋„ ๋‹ค๋ฅด๋‹ค. ์ด ๊ฐ’์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ์‘๋‹ต ๋‚ด์šฉ์ด ๋‹ฌ๋ผ์ง„ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ์บ์‹œ๋ฅผ ์ง€์šฐ๊ณ  ์ƒˆ ์ปจํ…์ธ ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • If-None-Match: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ Etag๊ฐ€ ๋‹ฌ๋ผ์กŒ๋Š” ์ง€ ๊ฒ€์‚ฌํ•ด์„œ ๋‹ค๋ฅผ ๊ฒฝ์šฐ์— ์ปจํ…์ธ ๋ฅผ ๋ณด๋‚ด์ฃผ๋ผ๋Š” ๋œป์ด๋‹ค. Etag๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฑด ์ปจํ…์ธ ๊ฐ€ ๋‹ฌ๋ผ์กŒ๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋€ ๋ฐ”๋€ ์ปจํ…์ธ ๋ฅผ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค. Etag๊ฐ€ ๊ฐ™๋‹ค๋ฉด 304 Not Modified(๋ณ€๊ฒฝ์‚ฌํ•ญ ์—†์Œ)๋ฅผ ์‘๋‹ตํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธฐ์กด ์บ์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • Pragma: HTTP/1.1์˜ Cache-Control ํ—ค๋”๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์— HTTP/1.0์—์„œ ๋Œ€์šฉ ํ—ค๋”๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ์œ ์‚ฌํ•˜๋‹ค.
  • Vary: ๋™์ผํ•œ URL์— ๋Œ€ํ•ด ์š”์ฒญ์„ ํ•˜๋”๋ผ๋„ ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž์˜ ํŠน์ง•(User Agent, Accept Encoding, Origin ๋“ฑ)์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์‘๋‹ต์„ ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ํ—ค๋”.
    • User-Agent: ์บ์‹ฑํ•˜๊ณ  ์žˆ๋Š” ์ปจํ…์ธ ์˜ ์ตœ์ดˆ User-Agent ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์บ์‹ฑ๋œ ์ปจํ…์ธ ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋ฐ”์ผ ์œ ์ €์—๊ฒŒ ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์„ ์‹ค์ˆ˜๋กœ ์„œ๋ธŒํ•˜๋Š” ์ผ์„ ํ”ผํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

Freshness(์‹ ์„ ๋„)

์บ์‹œ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ์ปฌ์—(ํ˜น์€ ์›นํ”„๋ก์‹œ์—) ์ €์žฅํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์šด๋กœ๋“œ ํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ์›นํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋œ๋‹ค(์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” ์‹ ์„ ๋„(Freshness)์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ๋„ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด ์ˆ˜์ •์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์„ฑ๋Šฅ์„ ์ฑ™๊ธฐ๋ฉด์„œ ์–ด๋–ป๊ฒŒ ์ ์ • ์ˆ˜์ค€์˜ ์‹ ์„ ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  • cache eviction(์บ์‹œ ์ถ”์ถœ): ์ €์žฅ์†Œ๋Š” ํ•œ์ •๋˜์–ด ์žˆ์œผ๋‹ˆ ์บ์‹œ๋„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐ๋œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋ฉด? ๋ฆฌ์†Œ์Šค ๋งŒ๋ฃŒ ์‹œ์ ์— ๋Œ€ํ•ด ํ†ต์‹ ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋งŒ๋ฃŒ์‹œ์  ์ด์ „๊นŒ์ง€๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์‹ ์„ ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผ๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์‹ ์„ ํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐ”๋กœ ์ถ”์ถœ๋˜๊ฑฐ๋‚˜ ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์บ์‹œ๊ฐ€ ์บ์‹œ๊ฐ€ ์‹ ์„ ํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์™€ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด If-None-Match ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ด ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •์ด ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ์ „์†ก ์—†์ด 304(Not Modified)๋ผ๊ณ  ์‘๋‹ตํ•œ๋‹ค.

http-freshness

  • ์‹ ์„ ๋„ lifetime ๊ณ„์‚ฐํ•˜๊ธฐ

    http-freshness-lifetime

  • ๋งŒ๋ฃŒ์‹œ๊ฐ„ = responseTime + freshnessLifetime - currentAge

Reference

https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=ko

https://www.zerocho.com/category/HTTP/post/5b594dd3c06fa2001b89feb9

https://tech.kakao.com/2017/10/23/wcache-2/

This post is licensed under CC BY 4.0 by the author.

ํ•™์› #24์ผ์ฐจ: java.lang.Object ๋ฉ”์„œ๋“œ

:coffee: [Java] String ํด๋ž˜์Šค

Loading comments from Disqus ...