[HTTP] HTTP ํค๋ - (2) ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ
๐ ์บ์ ๊ธฐ๋ณธ ๋์
โ ์บ์๊ฐ ์๋ค๋ฉด?
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ๋งค๋ฒ ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํ๋ค
- ์ธํฐ๋ท ๋คํธ์ํฌ๋ ๋งค์ฐ ๋๋ฆฌ๊ณ ๋น์ > ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆผ > ๋๋ฆฐ ์ฌ์ฉ์ ๊ฒฝํ
โ ์บ์ ์ ์ฉ ํ
1๏ธโฃ ์ฒซ๋ฒ์งธ ์์ฒญ

- ์๋ฒ๋ ์๋ต ๋ฉ์ธ์ง ํค๋์ cache-control์์ ์บ์์ ์ ํจํ ์๊ฐ์ ์ง์ ํด์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ธ๋ค.
- ์ด ๋ ์๋ต ๊ฒฐ๊ณผ๋ ๋ธ๋ผ์ฐ์ ์บ์์ ์ ์ฅ๋๋ค.
2๏ธโฃ ๋๋ฒ์งธ ์์ฒญ

- ํด๋ผ์ด์ธํธ์์ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ๋ฉด ๋จผ์ ๋ธ๋ผ์ฐ์ ์บ์์์ ์บ์ ์ ํจ ์๊ฐ์ ๊ฒ์ฆํ๋ค.
- ๋ธ๋ผ์ฐ์ ์บ์์ ์ ํจํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์๋ฒ์ ์์ฒญ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ํ์ ์์ด ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์บ์์์ ๋ฆฌ์์ค๋ฅผ ์กฐํํ๋ค.
- ์บ์ ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ์๋ฒ์ ์ฌ์์ฒญํ๊ณ ์บ์๋ฅผ ๊ฐฑ์ ํ๋ค. (๋คํธ์ํฌ ๋ค์ด๋ก๋ ๋ฐ์)
โ ์บ์ ์ ์ฉ ์ฅ์
- ์บ์ ๊ฐ๋ฅ ์๊ฐ ๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋จ
- ๋น์ผ ๋คํธ์ํฌ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์
- ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋ ๋งค์ฐ ๋น ๋ฆ
- ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ
๐ ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ
- ์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด์ ์๋ฒ์ ์ฌ์์ฒญํ ๊ฒฝ์ฐ ๋๊ฐ์ง ์ํฉ์ด ๋ฐ์ํ ์ ์์
- ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํจ
- ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์
โ ์บ์ ๋ง๋ฃ ํ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์กํ์ง ์๊ณ ์บ์๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค! ํ์ง๋ง ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ ๋ฐฉ๋ฒ ํ์
โ ๊ฒ์ฆ ํค๋ ์ฌ์ฉ
1๏ธโฃ ์๋ฒ์์ ๋ฐ์ดํฐ ์ ์ก ์ ๊ฒ์ฆ ํค๋ ์ถ๊ฐ

- ์๋ฒ์์ ์ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ๊ฒ์ฆ ํค๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ฉ์ธ์ง ๋ฐ๋์ ํจ๊ป ์ต์ข ์ ์ผ๋ก ์์ ๋ ๋ ์ง๋ฅผ ํจ๊ป ๋ณด๋ธ๋ค. (Last-Modified)
- ์น ๋ธ๋ผ์ฐ์ ๋ ๋ธ๋ผ์ฐ์ ์บ์์ ์๋ต ๊ฒฐ๊ณผ์ ํจ๊ป ์ต์ข ์์ ์ผ์ ์ ์ฅํ๋ค.
2๏ธโฃ ์ ํจ ์๊ฐ์ด ๋ง๋ฃ๋ ์บ์์ ์๋ฒ ๋ฐ์ดํฐ์ ์ต์ข ์์ ์ผ ๋น๊ต

- ์บ์์ ์ ํจ ์๊ฐ์ด ๋ง๋ฃ๋๋ฉด ํด๋ผ์ด์ธํธ๋ ์บ์์ ์ต์ข ์์ ์ผ ์ ๋ณด์ ํจ๊ป ์์ฒญ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค. (if-modified-since)
- ์๋ฒ๋ ์ ๋ฌ๋ฐ์ ์ต์ข ์์ ์ผ ์ ๋ณด์ ์๋ฒ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ต์ข ์์ ์ผ์ ๋น๊ตํ๋ค.
3๏ธโฃ ๋ฐ์ดํฐ๊ฐ ์์ ๋์ง ์์ ๊ฒฝ์ฐ ์๋ฒ๋ ์๋ต ๋ฉ์ธ์ง์ ํค๋๋ง ํฌํจํด์ ๋ณด๋ธ๋ค.

- ๋ฐ์ดํฐ๊ฐ ์์ ๋์ง ์์์์ ํ์ธํ ์๋ฒ๋ 304 Not Modified ์ํ์ฝ๋์ ํจ๊ป ์๋ต ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค.
- ์ด๋ HTTP Body๊ฐ ์๊ณ ํค๋ ์ ๋ณด๋ง ์๊ธฐ ๋๋ฌธ์ ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์ฉ๋์ด ์ ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ต ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊ณ ๋ธ๋ผ์ฐ์ ์บ์์ ์ ์ฅ๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ฉฐ ํค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ค. (๋ค์ 60์ด ์ ํจ)
โ ๊ฒ์ฆ ํค๋
- ์บ์ ๋ฐ์ดํฐ์ ์๋ฒ ๋ฐ์ดํฐ๊ฐ ๊ฐ์์ง ๊ฒ์ฆํ๋ ๋ฐ์ดํฐ
- Last-modified, ETag
โ ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
- ๊ฒ์ฆ ํค๋๋ก ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ถ๊ธฐ
- If-Modified-Since, If-Unmodified-Since : Last-Modified ์ฌ์ฉ
- If-Match, If-None-Match : ETag ์ฌ์ฉ
- ์กฐ๊ฑด์ด ๋ง์กฑํ๋ฉด 200 OK, ๋ง์กฑํ์ง ์์ผ๋ฉด 304 Not Modified
โ Last-Modified, If-Modified-Since ๋จ์
- 1์ด ๋ฏธ๋ง ๋จ์๋ก ์บ์ ์กฐ์ ๋ถ๊ฐ
- ๋ ์ง ๊ธฐ๋ฐ์ ์ ํด์ง ๋ก์ง ์ฌ์ฉ
- ๋ ์ง๊ฐ ๋ค๋ฅด์ง๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์ฌ์ฉ ๋ถ๊ฐ
- ์๋ฒ์์ ๋ณ๋์ ์บ์ ๋ก์ง์ ๊ด๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฌ์ฉ ๋ถ๊ฐ e.g. ์คํ์ด์ค๋ ์ฃผ์์ฒ๋ผ ํฌ๊ฒ ์ํฅ ์๋ ๋ณ๊ฒฝ์์ ์บ์๋ฅผ ์ ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ
โ ETag, If-None-Match ํค๋ ์ฌ์ฉ
๐ป ETag (Entity Tag)
- ์บ์์ฉ ๋ฐ์ดํฐ์ ์์์ ๊ณ ์ ํ ๋ฒ์ ์ด๋ฆ์ ๋ฌ์๋
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ฒ๊ฐ ์ด๋ฆ์ ๋ฐ๊ฟ์ ์์ฑ (Hash ๋ค์ ์์ฑ)
- ์ปจํ ์ธ ๊ฐ ๊ฐ์ผ๋ฉด ํด์๊ฐ์ ๋๊ฐ์ด ๋์ด
- ETag๋ง ๋ณด๋ด์ ๊ฐ์ผ๋ฉด ์ ์ง, ๋ค๋ฅด๋ฉด ๋ค์ ๋ฐ๊ธฐ > ๊ฒ์ฆ ํค๋ (If-None-Match)
- ์บ์ ์ ์ด ๋ก์ง์ ์๋ฒ์์ ์์ ํ ๊ด๋ฆฌ
- ํด๋ผ์ด์ธํธ๋ ๋จ์ํ๊ฒ ์ด ๊ฐ์ ์๋ฒ์ ์ ๊ณต(ํด๋ผ์ด์ธํธ๋ ์บ์ ๋งค์ปค๋์ฆ ๋ชจ๋ฆ)
- e.g. ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ฃผ๊ธฐ์ ๋ง์ถ์ด ETag ๋ชจ๋ ๊ฐฑ์
๐ ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋ ์ ๋ฆฌ
โ ์บ์ ์ ์ด ํค๋
Cache-Control : ์บ์ ์ ์ด > ๊ฐ์ฅ ์ค์
Pragma : ์บ์ ์ ์ด (ํ์ ํธํ)
Expires : ์บ์ ์ ํจ ๊ธฐ๊ฐ (ํ์ ํธํ)
โ Cache-Control
๐ป Cache-Control: max-age
์บ์ ์ ํจ ์๊ฐ์ ์ง์ ํจ(์ด ๋จ์)
๐ป Cache-Control: no-cache
๋ฐ์ดํฐ๋ ์บ์ํด๋ ๋์ง๋ง ํญ์ origin ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ
๐ป Cache-Control: no-store
๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์๋จ (๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉ ํ ์ต๋ํ ๋นจ๋ฆฌ ์ญ์ )
๐ป Cache-Control: must-revalidate
์บ์ ๋ง๋ฃํ ์ฌ์กฐํ์ ์ ์๋ฒ์ ๊ฒ์ฆํด์ผ ํจ
์ ์๋ฒ ์ ๊ทผ ์คํจ์ ๋ฐ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผ ํจ -> 504(Gateway Timeout)
์บ์ ์ ํจ์๊ฐ ์ด๋ผ๋ฉด ์บ์๋ฅผ ์ฌ์ฉ
๐ ํ๋ก์ ์บ์

- origin ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํ๋ก์ ์บ์ ์๋ฒ๋ฅผ ๋์ด ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅ
- ํ๋ฒ ๋ค์ด๋ก๋ ๋ฐ์๋์ผ๋ฉด ๋ค์ ๋ก๋ฉ๋ถํฐ๋ ๋น ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง
- ์ค๊ฐ์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๋ ์บ์ -> public ์บ์ (Cache-Control: public)
- ๊ฐ์ธ ๋ก์ปฌ์์ ์ฌ์ฉํ๋ ์บ์ -> private ์บ์ (Cache-Control: private)
๐ ์บ์ ๋ฌดํจํ
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์์๋ก ์บ์๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ์บ์ํด์๋ ์๋๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ๋ฌดํจํ ์บ์ ์ง์์ด๋ฅผ ์ง์ ํ๋ค.
- Cache-Control : no-cache, no-store, must-revalidate
- Pragma : no-cache (HTTP 1.0 ํ์ ํธํ) -> ๊ณผ๊ฑฐ ๋ฒ์ ๊น์ง ์ง์
โ ๋ค ๋ฃ์ด์ฃผ๋ฉด ์บ์๋ฅผ ์ ๋ ์ ์ฅํ์ง ์์ (ํ์คํ ์บ์ ๋ฌดํจํ ์๋ต)
โ no-cache vs must-revalidate
- no-cache : ์์๋ฒ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ ์บ์ ์๋ฒ ์ค์ ์ ๋ฐ๋ผ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์์ (์ค๋ฅ๋ณด๋ค๋ ์ค๋๋ ๋ฐ์ดํฐ)

- must-validate : ์์๋ฒ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ ํญ์ ์ค๋ฅ ๋ฐ์ (504 Gateway Timeout)
