[HTTP] 8. HTTP ํค๋2 - ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ
์๋ ํ์ธ์!
๋ฒ์จ HTTP ๋ง์ง๋ง ์น์ ์ด์์ฅ!!
์ ๋ฒ ์น์ ์ ์ด์ด HTTP ํค๋๋ฅผ ํ ๊ฑด๋ฐ ์๋ฒ์ ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ์ ๊ดํด์ ์ ๋๋ค.
๊ณ ๊ณ !!

1. ์บ์ ๊ธฐ๋ณธ ๋์
์บ์๋ ๊ณผ์ฐ ์ด๋ป๊ฒ ๋์ํ ๊น์?
1-1. ์บ์๊ฐ ์์ ๋
- ์ฒซ ๋ฒ์งธ ์์ฒญ
์ฐ์ ์บ์๊ฐ ์์ ๋์ ์ฒซ ๋ฒ์งธ ์์ฒญ ์ํฉ์ ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ star.jpg๋ฅผ ์์ฒญํ๊ณ , ์๋ฒ์์ ์ฐ์ star.jpg๊ฐ ์์ผ๋ฉด ์จ ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ด์ค๋๋ค.
์ฆ, ์๋ฒ๊ฐ ํค๋์ ๋ฐ๋ ํฉ์ณ์ 1.1M ์ฉ๋์ star.jpg๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ์๋ตํฉ๋๋ค.
- ๋ ๋ฒ์งธ ์์ฒญ
๊ทธ๋ฌ๋ค๊ฐ ์บ์๊ฐ ์์ ๋ ๋๊ฐ์ ์์ฒญ์ ํ ๋ฒ ๋ ํ์ต๋๋ค.
์๋ฒ์์๋ ๋ ๋๊ฐ์ด ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋์ ์๋ฒ๋ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ ํค๋์ ๋ฐ๋ ๋ถ๋ถ ํฉ์ณ์ 1.1M ์ฉ๋์ ์ด๋ฏธ์ง ์๋ต์ ๋ค์ ๋ด๋ฆฝ๋๋ค.
- ์บ์๊ฐ ์์ ๋์ ๋จ์
1. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ๊ณ์ ๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ผ ํฉ๋๋ค.
2. ์ธํฐ๋ท ๋คํธ์ํฌ๋ ๋งค์ฐ ๋๋ฆฌ๊ณ ๋น์๋๋ค. (ํ๋๋์คํฌ ๋ฑ๋ฑ์ ๋นํด..?)
3. ์ฌ์ฉ์ ์ ์ฅ์์ ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋๊ฐ ๋๋ ค ๋ถํธํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์บ์๋ฅผ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
1-2. ์บ์ ์ ์ฉ
- ์ฒซ ๋ฒ์งธ ์์ฒญ
์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ star.jpg ์กฐํ๋ฅผ ์์ฒญํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์๋ฒ์์ ์บ์์ ๊ด๋ จ๋ ๊ฒ์ ์ธํ ํด์ผํฉ๋๋ค.
๊ทธ๋ ๊ฒ ์๋ฒ์์ ์บ์๋ฅผ ์ ์ฉํ๊ณ ๋๋ฉด cache-control์ด๋ http ํค๋์ ๋ญ๊ฐ๋ฅผ ๋ฃ์ด์ค ์ ์์ต๋๋ค.
=> cache-control: max-age๋ ์บ์๊ฐ ์ ํจํ ์๊ฐ(์ด)์ผ๋ก max ์๊ฐ์ด 60์ด๋ ๋ป์ด๊ณ , ์๋ต์ ๋ณด๋ด๊ณ ์ 60์ด ๋์์ ์บ์๊ฐ ์ ํจํ๋ค๋ ๊ฒ์ ๋ปํฉ๋๋ค.
(์ ํจ์๊ฐ 60์ด๋ ์์๋ก ์ง์ ํ ๊ฒ์ด๊ณ , ์ค์ ์ ํจ์๊ฐ์ ๋ณดํต ํจ์ฌ ๋ ๊น๋๋ค.)
์ต์ด๋ก ์์ฒญํ ๋๋ star.jpg๊ฐ ์ผ๋จ ์ ์ก์ด ๋ฉ๋๋ค.
๊ทธ๋ฌ๊ณ ์น ๋ธ๋ผ์ฐ์ ์ ๋ด๋ถ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ์ ์ฅ์์ธ ์บ์๊ฐ ์์ต๋๋ค.
์ด ์ ์ฅ์์ 60์ด ์ ํจํ๋ค๊ณ ์ ์ด๋์ ๋ค์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํฉ๋๋ค.
- ๋ ๋ฒ์งธ ์์ฒญ
์์ ๊ณผ์ ํ์ ๋ ๋ฒ์งธ ์์ฒญ์ ํฉ๋๋ค.
์บ์๋ฅผ ๋ณด๋๊น 60์ด ์ ํจํ๋ค๊ณ ๋์ด์๊ณ , ์์ง ์ ๋ 60์ด ์์ ์๋ค์?
๊ทธ๋ฌ๋ฉด ๊ทธ๋ฅ ์ด ์บ์์์ ์กฐํํด์ star.jpg๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋คํธ์ํฌ๋ฅผ ์์ ํ ํ์๊ฐ ์๊ฒ ์ฃ .
- ์บ์ ์ ์ฉํ์ ๋์ ์ฅ์
1. ์บ์ ๋๋ถ์ ์บ์ ๊ฐ๋ฅ ์๊ฐ ๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ฉ๋๋ค.
2. 1๋ฒ ์ฅ์ ๋๋ถ์ ๋น์ผ ๋คํธ์ํฌ์ ์ฌ์ฉ๋์ ์ค์ผ ์ ์์ต๋๋ค.
3. ์ฌ์ฉ์ ์ ์ฅ์์ ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋๊ฐ ๋งค์ฐ ๋นจ๋ผ ์์ด ์์~ํฉ๋๋ค.
=>์ด๋ ์น ์ฌ์ดํธ ๋ค์ด๊ฐ์ ๋๊ฐ๋ค๊ฐ ๋ค์ ๋ค์ด์ค๋ฉด ๊ทธ ์ฌ์ดํธ๊ฐ ๊ธ๋ฐฉ ์ผ์ง๋ ์ด์ ์์!
- ์ธ ๋ฒ์งธ ์์ฒญ - ์บ์ ์๊ฐ ์ด๊ณผ
star.jpg๋ฅผ 3๋ฒ์งธ ์์ฒญํฉ๋๋ค.
๊ทผ๋ฐ, ์ด๋ฒ์๋ ์บ์ ์ ํจ์๊ฐ 60์ด๊ฐ ์ด๊ณผ๋์์ต๋๋ค.
์ด๋ฌ๋ฉด ๋น์ฐํ ์ฒ์๋ถํฐ ๋ค์ ์์ฒญํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ฒ ๋ค์ ์์ฒญํ๋๋ ์๋ฒ์์ ๋ ๋๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ด๋ ค์ค๋๋ค. (์บ์๋ ๋ ๋๊ฐ์ด 60์ด ๋์ ์ ํจ)
๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์บ์์ ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ง์ฐ๊ณ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด ์์๋๋ค.
์บ์๊ฐ ์ด๊ธฐํ ๋๋ฉด์ ๋ค์ ์ ํจ์๊ฐ์ด 60์ด๊ฐ ๋์์ต๋๋ค.
์ฆ, ์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํ๋ฉด, ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์กฐํํ๊ณ ์บ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
์ด ๋ ๋ค์ ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ทผ๋ฐ ์์งํ ์ด๋ฏธ์ง๊ฐ ์์ ์น ๋ค ๋ณ๊ฒฝ๋ ๊ฒ๋ ์๋๋ฐ ๋๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฒด ๋ค ๋ค์ ๋ค์ด ๋ฐ๋ ๊ฒ์ ์๊ฐ๋ ์ ์ฑ๋ ๋๋ฌด๋๋ฌด ์๊น์ง ์๋์??
๊ทธ๋์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ฐ์๋ฅผ ํ์ธํด๋ณด์ค๊น์?
๊ณ ๊ณ ~
2. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ1
2-1. ์บ์ ์๊ฐ ์ด๊ณผ
์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด์ ์๋ฒ์ ๋ค์ ์์ฒญํ๋ฉด ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ํฉ๊ณผ ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ์ํฉ ์ด๋ ๊ฒ ๋ ๊ฐ์ง ์ํฉ์ด ๋ํ๋ฉ๋๋ค.
์ ์์ ๊ฒฝ์ฐ์๋ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ๋ค์ด๋ฐ์์ผ ํ์ง๋ง, ํ์์ ๊ฒฝ์ฐ์๋ ํฐ ์ฉ๋์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ค ๋ค์ด๋ฐ์์ผ ํ ๊น์?
์์งํ ๋, ์๊ฐ ๋ฑ๋ฑ ๋ค ๋ญ๋น์ผ๊ฑฐ์์.
์ด ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ์ ๋๋ค.
2-2. ๊ฒ์ฆ ํค๋ ์ถ๊ฐ - Last-Modified ํ์ฉ ๋ฐฉ๋ฒ
- ์ฒซ ๋ฒ์งธ ์์ฒญ
๊ธฐ์กด์ ์ ์ฅ๋ ์บ์ ์์ด ์ฒ์๋ถํฐ ํด๋ณด๊ฒ ์ต๋๋ค.
์น ๋ธ๋ผ์ฐ์ ์์ star.jpg๋ฅผ ์์ฒญํฉ๋๋ค.
์์ฒญ์ ๋ฐ๊ณ ๋์ ์๋ฒ์์ ์ ํจ์๊ฐ ๋ฟ๋ง ์๋๋ผ Last-Modified๋ผ๋ ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ๊ณ , 60์ด ๋์ ์ ํจํ๋ค๋ ๊ฒ๋ ์บ์์ ์ ์ด๋๊ณ , ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ๋ ๊ธฐ๋กํด๋์ต๋๋ค.
- ๋ ๋ฒ์งธ ์์ฒญ - ์บ์ ์๊ฐ ์ด๊ณผ
๋ ๋ฒ์งธ ์์ฒญ์ ํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ์ ์ ํจ์๊ฐ์ด 60์ด๊ฐ ์ง๋ฌ์ด์.
์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋, if-modified-since๋ผ๋ http ์์ฒญ ํค๋๋ฅผ ๋ถ์ด๊ณ ์ฌ๊ธฐ์ ๋ ์ง๋ฅผ ๋ถํ๋๋ค.
(์ด ๋ ์ง๊ฐ ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ ์ ๋๋ค.)
๊ทธ๋ผ ์๋ฒ์์ ์์ฒญ์ ๋ฐ์ต๋๋ค.
์๋ฒ๋ ์์ ์๊ฒ ์๋ star.jpg ์ต์ข ์์ ์ผ์ด ์น ๋ธ๋ผ์ฐ์ ์์ ์์ฒญํ star.jpg์ ์ต์ข ์์ ์ผ๊ณผ ๊ฐ์์ง ๊ฒ์ฆ์ ํ๊ฒ ๋ฉ๋๋ค.
์๋ฒ๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ ์ง๋ฅผ ๋ณด๊ณ ํ๋จ ๊ฐ๋ฅํฉ๋๋ค.
์ค? ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ์ด ๊ฐ๋ค์? ์ด๋ฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ์์ง ์์ ๋์ง ์์ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์๋ฒ์์ ์น ๋ธ๋ผ์ฐ์ ํํ star.jpg๋ ์์ง ์จ๋ ๋๋ค๊ณ ์๋ตํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ทธ๋ฅ ์ง๊ธ ๋ฐ๋ก ์๋ตํ๋ ๊ฒ์ด ์๋๊ณ ๋ค์ ๊ณผ์ ์ด ์ข ๋ ์์ต๋๋ค.
์๋ฒ๊ฐ ๊ฒ์ฆํด๋ณด๊ณ ์๋ก ์์ ์ด ๋ ๊ฒ์ด ์์ผ๋ฉด 304 Not Modified์ ํจ๊ป cache-control, ์ต์ข ์์ ์ผ ๋ฑ์ ์น ๋ธ๋ผ์ฐ์ ํํ ๋ณด๋ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ http body๋ ์ ์กํ์ง ์์ต๋๋ค.
์๋ํ๋ฉด ์์ ๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ฉ๋์ด ํฌ๊ณ ๋ฌด๊ฑฐ์ด body ๋ถ๋ถ์ ๊ตณ์ด ๋ณด๋ด์ง ์์ต๋๋ค.
(ํค๋: 0.1M, ๋ฐ๋: 1.0M, ์ด 1.1M์ธ๋ฐ ํค๋๋ง ๋ณด๋ด๋๊น 0.1M ์ ์ก)
๊ทธ๋์ ์๋ฒ๋ body ๋ถ๋ถ ๋นผ๊ณ ์์ ๋ผ์ธ๊ณผ ํค๋ ๋ถ๋ถ๋ง ์ ์กํฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋คํธ์ํฌ ๋ถํ๊ฐ ํ ์ค๊ฒ ์ฃ .
์น ๋ธ๋ผ์ฐ์ ๋ 304๋ฅผ ๋ณด๊ณ "์! ์ต๊ทผ์ ์์ ๋๊ฒ ์์ด์ ๊ณ์ ์จ๋ ๋๋๊ตฌ๋!"๋ผ๊ณ ํ์ธํฉ๋๋ค.
๊ทธ๋ ๊ฒ ์๋ต ๊ฒฐ๊ณผ ์ฌ์ฌ์ฉํ๊ณ ํค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. (์บ์๋ ๋ค์ ์ธํ )
์ด๋ ๊ฒ ๋๋ฉด ๋ค์ ์ ํจ์๊ฐ 60์ด๊ฐ ์ ํจํ๊ฒ ๋ฉ๋๋ค.
์ต์ข ์ ์ผ๋ก ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํฉ๋๋ค.
- ์ ๋ฆฌ
๊ฒฐ๋ก ์ ์ผ๋ก ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ์ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค. (Last-Modified + if-modified-since)
๊ทธ๋ฆฌ๊ณ , ์บ์ ์ ํจ์๊ฐ์ด ์ด๊ณผํด๋ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋์ง ์์ผ๋ฉด...
304 Not Modified + ํค๋ ๋ฉํ ์ ๋ณด๋ง ์๋ตํฉ๋๋ค.(Body X)
๋ํ, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต ํค๋ ์ ๋ณด๋ก ์บ์์ ๋ฉํ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์บ์์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌํ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ๊ธด ํ์ง๋ง ์ฉ๋์ด ์ ์ ํค๋ ์ ๋ณด๋ง ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๋๋ถ๋ถ์ ์น ๋ธ๋ผ์ฐ์ ๋ ์ด ๋งค์ปค๋์ฆ์ ์คํํฉ๋๋ค!!
3. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ2
3-1. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ์ด๋..?
- ๊ฒ์ฆ ํค๋
- ์บ์ ๋ฐ์ดํฐ์ ์๋ฒ ๋ฐ์ดํฐ๊ฐ ๊ฐ์์ง ๊ฒ์ฆํ๋ ๋ฐ์ดํฐ์ ๋๋ค.
- Last-Modified, ETag
- ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
- ๊ฒ์ฆ ํค๋๋ก ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๋ถ๊ธฐ๋ฅผ ์๋ฒ์ ์์ฒญํฉ๋๋ค.
- if-Modified-Since: Last-Modified ์ฌ์ฉ
- if-None-Match: ETag ์ฌ์ฉ
- ์กฐ๊ฑด์ด ๋ง์กฑํ๋ฉด 200 OK
- ์กฐ๊ฑด์ด ๋ง์กฑํ์ง ์์ผ๋ฉด 304 Not Modified
3-2. ์์
Q. if-Modified-Since: ์ดํ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋์์ผ๋ฉด?
- A. ๋ฐ์ดํฐ ๋ฏธ๋ณ๊ฒฝ ์์ (์์์ ์ค๋ช
ํ ์ผ์ด์ค)
- ์บ์: 2025๋ 3์ 16์ผ 10:00:00 vs ์๋ฒ: 2025๋ 3์ 16์ผ 10:00:00
- 304 Not Modified, ํค๋ ๋ฐ์ดํฐ๋ง ์ ์ก (Body ํฌํจX)
=> ์ง๋ฌธ์ด ์์ ๋์๋?์ธ๋ฐ ์์ ์ด ์ ๋์๊ธฐ ๋๋ฌธ์ 200 OK ์ฑ๊ณต์ด ์๋๋ผ 304์ ๋๋ค. - ์ ์ก ์ฉ๋ 0.1M (ํค๋ 0.1M)
- A. ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์
- ์บ์: 2025๋ 3์ 16์ผ 10:00:00 vs ์๋ฒ: 2025๋ 3์ 16์ผ 11:00:00 (1์๊ฐ ์ฐจ์ด - ์์ ๋จ)
- 200 OK, ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก (Body ํฌํจ)
=> ์ง๋ฌธ์ด ์์ ๋์๋?์ธ๋ฐ ์์ ์ด ๋์๊ธฐ ๋๋ฌธ์ 200 OK ์ฑ๊ณต์ ๋๋ค. - ์ ์ก ์ฉ๋ 1.1M (ํค๋ 0.1M, ๋ฐ๋ 1.0M)
3-3. Last-Modified, If-Modified-Since ๋จ์
- ์์์ ์ค๋ช ํ ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ์ ๋๋ค.
- 1์ด ๋ฏธ๋ง(0.x์ด) ๋จ์๋ก ์บ์ ์กฐ์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๋ ์ง ๊ธฐ๋ฐ์ ๋ก์ง์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ ์ง๊ฐ ๋ค๋ฅด์ง๋ง, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ์ ๊ฒฝ์ฐ
=> ๋ ์ง๋ง ๊ฐฑ์ ๋๊ณ , ์๋ณธ๊ณผ ๋๊ฐ์๋ฐ ์ ์ฒด๊ฐ ๋ค ๋ค์ด๋ก๋ ๋ฉ๋๋คใ ใ - ์๋ฒ์์ ๋ณ๋์ ์บ์ ๋ก์ง์ ๊ด๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ => ETag ์ฌ์ฉ
- ex) ์คํ์ด์ค๋ ์ฃผ์์ฒ๋ผ ํฌ๊ฒ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์์ ์บ์๋ฅผ ์ ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ
3-4. ETag, If-None-Match
- ETag = Entity Tag ์ค์๋ง
- ์บ์์ฉ ๋ฐ์ดํฐ์ ์์์ ๊ณ ์ ํ ๋ฒ์ ์ด๋ฆ์ ๋ฌ์๋ก๋๋ค. (๋ ์งX)
- ex) ETag: "v1.0", ETag: "a2sdlkjflkwepj3"
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด ์ด๋ฆ์ ๋ฐ๊พธ์ด์ ๋ณ๊ฒฝํฉ๋๋ค. (Hash๋ฅผ ๋ค์ ์์ฑ)
- ex) ETag: "aaaaa" -> ETag: "bbbbb"
- ์ง์ง ๋จ์ํ๊ฒ ETag๋ง ๋ณด๋ด์ ๊ฐ์ผ๋ฉด ์ ์งํ๊ณ , ๋ค๋ฅด๋ฉด ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์ต๋๋ค!!
3-5. ๊ฒ์ฆ ํค๋ ์ถ๊ฐ - ETag ํ์ฉ ๋ฐฉ๋ฒ
- ์ฒซ ๋ฒ์งธ ์์ฒญ
ํด๋ผ์ด์ธํธ๊ฐ star.jpg๋ฅผ ์กฐํํด๋ฌ๋ผ๊ณ ์์ฒญ์ ํ๋ฉด ์๋ฒ๋ ์์ฒญ์ ๋ฐ์์ ETag๋ฅผ ๋ด๋ ค์ค๋๋ค.
์ด๋ฒ์๋ ์บ์์ 60์ด ์ ํจ์ ETag๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ ๋ฒ์งธ ์์ฒญ - ์บ์ ์๊ฐ ์ด๊ณผ
๊ทธ๋ ๊ฒ ๋ ๋ฒ์งธ ์์ฒญ์ ํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์บ์ ์๊ฐ์ด ์ด๊ณผ๋์๋ค์?
์๋ฒ์ ๊ฐ๊ณ ์๋ ETag๊ฐ ์์ผ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๊ฐ If-None-Match(๋งค์น๊ฐ ์ ๋๋ฉด)๋ฅผ ๋ณด๋ ๋๋ค.
์ด? ๋งค์น๊ฐ ๋์ด๋ฒ๋ ธ๋ค์?
์ด๊ฒ์ ๋ฐ์ดํฐ๊ฐ ์์ง ์์ ๋์ง ์์๋ค๋ ๊ฒ์ ๋ปํฉ๋๋ค.
์ด๋ ๊ฒ ์์ ์ด ๋์ง ์์ ์คํจ๋ฉด 304 Not Modified๋ฅผ ๋ณด๋ ๋๋ค.
๊ทธ๋์ HTTP ํค๋ ์ฉ๋ 0.1M๋ง ์ ์กํฉ๋๋ค. (Body ์ ์กX)
์๋ต์ ๋ฐ์ผ๋ฉด ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๊ณ , ํค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
(์ ํจ์๊ฐ 60์ด๊ฐ ์ ํจํด์ง)
๋ง์ง๋ง์ผ๋ก, ์บ์์์ ์กฐํํฉ๋๋ค.
3-6. ETag, If-None-Match ์ ๋ฆฌ
- ์ง์ง ๋จ์ํ๊ฒ ETag๋ง ์๋ฒ์ ๋ณด๋ด์ ๊ฐ์ผ๋ฉด ์ ์งํ๊ณ , ๋ค๋ฅด๋ฉด ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์ต๋๋ค.
- ์บ์ ์ ์ด ๋ก์ง์ ์๋ฒ์์ ์์ ํ ๊ด๋ฆฌํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๋จ์ํ ์ด ๊ฐ์ ์๋ฒ์ ์ ๊ณตํฉ๋๋ค. (ํด๋ผ์ด์ธํธ๋ ์บ์ ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ฆ ๋๋ค.)
- ex) ์๋ฒ๋ ๋ฐฐํฐ ์คํ ๊ธฐ๊ฐ์ธ 3์ผ ๋์ ํ์ผ์ด ๋ณ๊ฒฝ๋์ด๋ ETag๋ฅผ ๋์ผํ๊ฒ ์ ์งํฉ๋๋ค.
ex) ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ฃผ๊ธฐ์ ๋ง์ถ์ด ETag๋ฅผ ๋ชจ๋ ๊ฐฑ์ ํฉ๋๋ค. (์๊ฑด ๊ฐ๋ฅ์ฑ ์์)
4. ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
4-1. ์บ์ ์ ์ด ํค๋
- Cache-Control: ์บ์ ์ ์ด
=> ์ง๊ธ์ ์๊ฑฐ ํ๋๋ก ๋ค ๋ฉ๋๋ค. - Pragma: ์บ์ ์ ์ด(ํ์ ํธํ)
- Expires: ์บ์ ์ ํจ ๊ธฐ๊ฐ(ํ์ ํธํ)
4-1(1). Cache-Control (์บ์ ์ง์์ด - directives)
- Cache-Control: max-age
- ์บ์ ์ ํจ ์๊ฐ, ์ด ๋จ์, ๋ณดํต ์๊ฐ ๊ธธ๊ฒ ์ก์ต๋๋ค.
- Cache-Control: no-cache
- ๋ฐ์ดํฐ๋ ์บ์ํด๋ ๋์ง๋ง, ํญ์ ์ฌ์ฉ ์ ์ ์(origin) ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉํฉ๋๋ค. (์กฐ๊ฑด๋ถ ์์ฒญ)
ํญ์ ์ฌ์ฉ ์ ์ ์ ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉํด์ผ ํ๋ ์ด์
์ฐ๋ฆฌ ๋์ ์ ๋ณด์ด๋ ์ค๊ฐ ์บ์ ์๋ฒ์์๋ ๋ญ ํ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- Cache-Control: no-store
- ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์ ๋ฉ๋๋ค.
=> ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ญ์ ํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์ ๋ฉ๋๋ค.
4-1(2). Pragma (์บ์ ์ ์ด - ํ์ ํธํ)
- Pragma: no-cache
- HTTP 1.0 ํ์ ํธํ
- ์ง๊ธ์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. (์ผ๋ถ ์ํฉ ์ ์ธ)
4-1(3). Expires (์บ์ ๋ง๋ฃ์ผ ์ง์ - ํ์ ํธํ)
- expires: Mon, 01 Han 1990 00:00:00 GMT
- ์บ์ ๋ง๋ฃ์ผ์ ์ ํํ ๋ ์ง๋ก ์ง์ ํฉ๋๋ค.
- HTTP 1.0๋ถํฐ ์ฌ์ฉํฉ๋๋ค.
- ์ง๊ธ์ ๋ ์ ์ฐํ Cache-Control: max-age ๊ถ์ฅํฉ๋๋ค.
- Cache-Control: max-age์ ํจ๊ป ์ฌ์ฉํ๋ฉด Expires๋ ๋ฌด์ํฉ๋๋ค.
4-2. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
- ๊ฒ์ฆ ํค๋ (Validator)
- ETag: "v1.0", ETag: "dsfawefdsa1"
- 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. ํ๋ก์ ์บ์
5-1. ์ ์๋ฒ ์ง์ ์ ๊ทผ
origin ์๋ฒ
ํ๊ตญ์ ์๋ ํด๋ผ์ด์ธํธ๋ค์ด ๋ฏธ๊ตญ์ ์๋ ์ ์๋ฒ๋ฅผ ์ด๋ฏธ์ง ๊ฐ์ ๋ญ๊ฐ๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๋ฉ์ด์ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
์๊ฐ์ 0.5์ด๋ก ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ฝ 0.5์ด๋ฉด ์ฌ๋๋ค์ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ๋ฐ๋ ๋ฐ 1๋ช ๋น 0.5์ด์ฉ ๊ณ์ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
(์ ์ฌ๋์ด ๋๋์ผ ๋ค์ด ๋ฐ์์ง๋ ํ์)
5-2. ํ๋ก์ ์บ์ ๋์
- ์ฒซ ๋ฒ์งธ ์์ฒญ
๋ฏธ๊ตญ์ ์ ์๋ฒ ์ ์ฅ์์๋ ์ฌ์ฉ์๋ค์ด ์๋ต ๋ฐ๋ ๊ฒ์ด ๋~๋ฌด ๋๋ฆฝ๋๋ค.
๊ทธ๋์ ํ๊ตญ ์ด๋๊ฐ์ ํ๋ก์ ์บ์ ์๋ฒ๋ผ๋ ์ค๊ฐ ์๋ฒ๋ฅผ ๋์ต๋๋ค.
์์ฒญ์ด ์ค๋ฉด ํ๋ก์ ์บ์ ์๋ฒ๋ฅผ ๊ฑฐ์ณ์ ๊ฐ๋๋ก..!!
์ต์ด๋ก ํ๋ก์ ์บ์ ์๋ฒ๋ฅผ ํตํด ์์ฒญ, ์๋ต์ ํ๋ฉด ๊ธฐ๋ก ์กฐ์ฐจ ์๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์๋๊ฐ ๋๋ฆฝ๋๋ค.
ํ์ง๋ง, ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๊ฐ ํ ๋ฒ ๋ค์ด๋ก๋๋ฅผ ๋ฐ์ ๋์ผ๋ฉด ๋ ๋ฒ์งธ ์ฌ์ฉ์๋ถํฐ๋ ์๋๊ฐ ๊ต์ฅํ ๋นจ๋ผ์ง๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ public ์บ์๋ฅผ ์ฌ์ฉํ์ง๋ง, ํ๋ก์ ์บ์ ์๋ฒ๋ ๊ณต์ฉ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ public ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋์ ํ๋ก์ ์บ์ ์๋ฒ๋ก ๋ก๊ทธ์ธ ์ ๋ณด ๊ฐ์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ณด๋ด๋ฉด ํฐ์ผ์ด ๋๊ฒ ์ฃ ..?
5-3. Cache-Control (์บ์ ์ง์์ด - ๊ธฐํ)
- Cache-Control: public
- ์๋ต์ด publc ์บ์์ ์ ์ฅ๋์ด๋ ๋ฉ๋๋ค.
- ์ค๊ฐ ํ๋ก์ ์บ์ ์๋ฒ์ ์ ์ฅ๋ฉ๋๋ค. (๊ณต์ฉ ์ด๋ฏธ์ง ํ์ผ ๋ฑ)
- Cache-Control: private
- ์๋ต์ด ํด๋น ์ฌ์ฉ์๋ง์ ์ํ ๊ฒ์ ๋๋ค.
- private ์บ์์ ์ ์ฅํด์ผ ํ๊ณ , ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
- ์ค๊ฐ ํ๋ก์ ์บ์ ์๋ฒ์ ์ ์ฅ๋๋ฉด ์ ๋ฉ๋๋ค.
ex) ๋ก๊ทธ์ธ ์ ๋ณด ๊ฐ์ ๊ฒ ๊ณต์ฉ์ผ๋ก ๋ค ๋ณด๋ฉด ํฐ์ผ ๋๊ฒ ์ฃ ..?
- Cache-Control: s-maxage
- ํ๋ก์ ์บ์์๋ง ์ ์ฉ๋๋ max-age์ ๋๋ค.
- ํฌ๊ฒ ์ค์ํ์ง ์๊ณ ์ด๋ฐ ๊ฒ์ด ์๋ค ์ ๋๋ง ์์๋๊ธฐ!!
- Age: 60 (HTTP ํค๋)
- origin(์ค๋ฆฌ์ง) ์๋ฒ์์ ์๋ต ํ ํ๋ก์ ์บ์ ๋ด์ ๋จธ๋ฌธ ์๊ฐ(์ด)
- ํฌ๊ฒ ์ค์ํ์ง ์๊ณ ์ด๋ฐ ๊ฒ์ด ์๋ค ์ ๋๋ง ์์๋๊ธฐ!!
6. ์บ์ ๋ฌดํจํ
6-1. Cache-Control
6-1(1). ํ์คํ ์บ์ ๋ฌดํจํ ์๋ตํ ์ ์๋ ๊ฒ
์บ์ ์ ์ด๋ค๊ณ ๋ฌดํจํ๋๋ ๊ฒ์ด ์๋๋๋ค.
- Cache-Control: no-cache, no-store, must-revalidate
- ์ด ํ์ด์ง๋ ์บ์๊ฐ ๋๋ฉด ์ ๋ผ! ํ๋ฉด ์ด๊ฑฐ ๋ค ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
- Pragma: no-cache
- HTTP 1.0 ํ์ ํธํ
- ๊ณผ๊ฑฐ ํ์ด์ง์์ ์์ฒญ์ด ์ฌ ์๋ ์์ผ๋๊น ์ด ํ์ด์ง๋ ์บ์๊ฐ ๋๋ฉด ์ ๋ผ! ํ๋ฉด ์ด๊ฑฐ๋ ๋ฃ์ด์ค์ผ ํฉ๋๋ค.
6-1(2). ์บ์ ์ง์์ด - ํ์คํ ์บ์ ๋ฌดํจํ
- Cache-Control: no-cache
- ๋ฐ์ดํฐ๋ ์บ์ํด๋ ๋์ง๋ง, ํญ์ ์ ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (์ด๋ฆ ์ฃผ์!)
- Cache-Control: no-store
- ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์ ๋ฉ๋๋ค.
=> ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ญ์ ํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์ ๋ฉ๋๋ค.
- Cache-Control: must-revalidate
- ์บ์ ๋ง๋ฃ ํ ์ต์ด ์กฐํ ์ ์ ์๋ฒ์ ๊ฒ์ฆํด์ผ ํฉ๋๋ค. (๋ฐ์ ๊ทธ๋ฆผ์์ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.)
- ์ ์๋ฒ ์ ๊ทผ ์คํจ ์ ๋ฐ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ์ผ ํฉ๋๋ค.
- 504(Gateway Timeout)
- must-revalidate๋ ์บ์ ์ ํจ ์๊ฐ์ด๋ผ๋ฉด ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Pragma: no-cache
- HTTP 1.0 ํ์ ํธํ
6-2. no-cache vs must-revalidate
6-2(1). no-cache ๊ธฐ๋ณธ ๋์
์น ๋ธ๋ผ์ฐ์ ๊ฐ ETag์ ํจ๊ป no-cache๋ฅผ ํ๋ก์ ์บ์ ์๋ฒ์ ๋ณด๋ ๋๋ค.
๊ทธ๋ฌ๋ฉด ํ๋ก์ ์บ์ ์๋ฒ๋ "์ด? ๋ด๊ฐ ์ฒ๋ฆฌํ๋ฉด ์ ๋ ๊ฒ ๊ฐ์๋ฐ"ํ๊ณ ํ๋จํ์ฌ ์ ์๋ฒ๋ก ๋ณด๋ ๋๋ค.
๊ทธ ํ์ ์ ์๋ฒ๋ ๊ฒ์ฆํด๋ณด๊ณ ์๋ตํฉ๋๋ค.
๊ทผ๋ฐ ํ๋ก์ ์บ์ ์๋ฒ๊ฐ no-cache๋ผ๋ ๊ฒ์ ์ ์๋ฒ์ ๋ณด๋ด์ผ ํ๋๋ฐ ์๊ฐ์ ์ธ ๋คํธ์ํฌ ๋จ์ ๋ก ์ ์๋ฒ์ ์ ๊ทผ์ด ์ ๋๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
ํ๋ก์ ์บ์ ์๋ฒ์๋ ์ค๋ฅ๋ฅผ ๋์ฐ๊ธฐ ๋ณด๋ค ์๋ ๋ฐ์ดํฐ๋ผ๋ ๋ณด์ฌ์ค์ผ ๋๋ค๋ ์ค์ ์ด ์์ต๋๋ค.
๊ทธ๋์ 200 OK๋ก ์๋ตํ ์๋ ์์ต๋๋ค.
๊ทผ๋ฐ ์ด๊ฒ ๊ณต์ฉ ์ด๋ฏธ์ง ํ์ผ ๊ฐ์ ๊ฒ์ด๋ฉด ๊ด์ฐฎ์๋ฐ ๋ง์ฝ ๋ก๊ทธ์ธ ์ ๋ณด ๊ฐ์ ๊ฐ์ธ์ ์ธ ์ ๋ณด๋ผ๋ฉด ๋ณด์ฌ์ง๋ฉด ์ ๋๊ฒ ์ฃ ..?
๊ทธ๋์ ์ด๊ฑธ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด must-revalidate ์ ๋๋ค.
6-2(2). must-revalidate
์์์ฒ๋ผ ๋๊ฐ์ ์ํฉ์ must-revalidate์ด๋ฉด ํ๋ก์ ์บ์ ์๋ฒ๊ฐ ๋ฌด์กฐ๊ฑด 504 ์ค๋ฅ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ด๋ฒ๋ฆฝ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ๋ณด์ด๊ฒ ์ฃ .
๋ฐ๋ผ์, ํ์คํ ์บ์ ๋ฌดํจํ๋ฅผ ํ๋ ค๋ฉด must-revalidate๊น์ง ๋ฃ์ด์ค์ผ ํฉ๋๋ค!!
์ด๋ก์จ HTTP ๋ชจ๋ ๊ฐ์ ์ ๋ฆฌ๊ฐ ๋์ด ๋ฌ์ต๋๋ค~!
๋ค์์ Spring ๊ธฐ๋ณธ ๊ฐ์ ์ ๋ฆฌ ๋ค๊ณ ์ฌ๊ฒ์ฅ
๊ทธ๋๊น์ง ์๋ฝ~~
