HTTP ํํ ํค๋ - ์บ์
by rlaehddnd0422์บ์๋?
์น ํ์ด์ง ์์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์ ์ ์ฅ์์ ๋๋ค. ์ด๋ฌํ ์์๋ค์ ๊ทธ๋ฆผ ํ์ผ์ด๋ ๋ฌธ์ ํ์ผ ๋ฑ์ด ๋ ์ ์๋๋ฐ์.
์บ์๋ ์น ํ์ด์ง๊ฐ ๋น ๋ฅด๊ฒ ๋ ๋๋ง ํ ์ ์๋๋ก ๋์์ค๋๋ค.
์ด ์ ์ ํฌ์คํ ํ ์ฟ ํค์ ๋ค๋ฅธ์ ์ด ์๋ค๋ฉด,
์ฟ ํค๋ ๋ณดํต ์ฌ์ฉ์์ ์ธ์ฆ์ ๋์์ฃผ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ,
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ด๋ ์์ ํ์ผ๋ค์ ์ ์ฅํฉ๋๋ค.
์ฝ๊ฒ ๋งํด ์ฟ ํค๋ ์๋ฒ์ ์ ์ํ ๋ ์๋ฒ์์ ๋ด๋ ค์ฃผ๋ ์ฌ์ฉ์์ ์ ์ ์ธ์ฆ ๊ธฐ๋ก์ ๋จ๊ฒจ ๋ค์๋ฒ์ ๋ ์๋ฒ์ ์ ์ํ ๋ ์ฟ ํค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๊ณ , ์บ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์น ํ์ด์ง์ ์ ์ํ์ ๋, ์๋ฒ์์ ๋งค๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ฃผ๋ ์ผ์ ์ค์ด๊ธฐ ์ํด ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์บ์ ๊ธฐ๋ณธ๋์
์บ์๊ฐ ์์ ๋ Request-Response
1. ์ฒซ ๋ฒ์งธ ์์ฒญ
2. ๋ ๋ฒ์งธ ์์ฒญ
> ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ๊ณ์ ๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ฐ์์ผ ํฉ๋๋ค.
> ๋งค๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์๋๋ก ๋ฐ์์ผ ํ๋ ๋ต๋ตํ๊ฒ ์ฃ ?
์บ์๋ฅผ ์ฌ์ฉํ ๋ Request-Response
1. ์ฒซ ๋ฒ์งธ ์์ฒญ
2. ๋ ๋ฒ์งธ ์์ฒญ
> ์บ์ ๋๋ถ์ ์บ์ ๊ฐ๋ฅ ์๊ฐ๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ์ผ์ ๋ฐ์ ์ ์์ต๋๋ค.
> ๋๋ถ์ ์๋ฒ์ ์ฅ์์๋ ์๋ฒ ํธ๋ํฝ์ ์ค์ด๊ณ ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋น ๋ฅธ ์๋๋ก ๋ก๋ฉํ ์ ์๊ฒ ์ฃ ?
3. ์ธ ๋ฒ์งธ ์์ฒญ - ์๊ฐ ์ด๊ณผ
> ์บ์ ์ ํจ ์๊ฐ ( Cache-Control : max-age = 60s )๊ฐ ์ง๋๋ฉด ๋ค์ ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์บ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
> ์ด๋ ๋ค์ ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฒ์ฆ ํค๋
์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด์ ์๋ฒ์ ๋ค์ ์์ฒญํ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์ํฉ์ด ๋ํ๋ ์ ์์ต๋๋ค.
1. ์๋ฒ๊ฐ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ
2. ์๋ฒ๊ฐ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ๊ฒฝ์ฐ
์๋ฒ๊ฐ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋์ง์ ์ฌ๋ถ๋ฅผ ํตํด ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ง, ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ง ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํฉ๋๋ค.
์ด ๊ฒฐ์ ์ ํ๊ธฐ ์ํ ๊ฒ์ฆ ํค๋๊ฐ ์์ต๋๋ค.
๊ฒ์ฆ ํค๋ - Last-Modified, if-modified-since
๋ฐ๋ก ์์ ๋ ์ง๋ก ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋ฒ์์๋ ์ต์ด๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋, ํค๋์ Last-Modified๋ก ์ต์ข ์์ ๋ ์ง๋ฅผ request ๋ฉ์์ง์ ํฌํจ์์ผ ๋ณด๋ด์ค๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์บ์ ์ ์ฅ์์๋ ์ต์ข ์์ ๋ ์ง๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ฒ ์ฃ .
์บ์์ ์ ํจ๊ธฐ๊ฐ์ด ์ ํจํ ๊ฒฝ์ฐ, ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์บ์์ ์ฅ์์์ ๊บผ๋ด์ ๋ก๋ฉํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ์บ์์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋ ์ฐ์ ์บ์์ ์ฅ์์ ์บ์๋ฅผ ์ดํด๋ณธ ํ ์ฐพ๊ณ ์ ํ๋ ์บ์๊ฐ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์๋ค๋ฉด ํด๋น ์บ์ ๋ฐ์ดํฐ์ ์ ํจ๊ธฐ๊ฐ๋ง if-modified-since๋ก ๊ฐ์ง๊ณ ์์ ์๋ฒ์ ์ ์กํฉ๋๋ค.
๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ์์ ์ด ๋์๋ค๋ฉด message body๋ฅผ ํฌํจํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ณด๋ด๊ฒ ์ฃ ? ํ์ง๋ง ์์ ์ด ์๋์๋ค๋ฉด 304 Not Modified ๋ฅผ ์๋ต ๋ฉ์์ง๋ก ๋ณด๋ด ์บ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋์ง ์์์์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๊ณ ํด๋น ๋ฐ์ดํฐ์ ์บ์ ๋ฐ์ดํฐ์ max-age๋ฅผ ์ค์ ๊ฐ์ผ๋ก ์ฌ๊ฐ๋์์ผ ์ฌ์ฉ์๊ฐ ์บ์๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
> ์ด๋ ๊ฒ ํด์ ์๋ต ๋ฉ์์ง๋ฅผ ์ด์ฉํด ํค๋๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ณ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
> ์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด๋, ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ (์์ )๋์ง ์์ผ๋ฉด 304 Not modified + ํค๋ ๋ฉํ ์ ๋ณด๋ง ์๋ต ๋ฉ์์ง๋ก ๋ณด๋ ๋๋ค.
> ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต ํค๋ ์ ๋ณด๋ก ์บ์๋ฅผ ๊ฐฑ์ ํ๊ณ ํด๋น ์บ์๋ฅผ ์ฌํ์ฉํฉ๋๋ค.
> ๊ฒฐ๊ณผ์ ์ผ๋ก ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ์ง๋ง ์ฉ๋์ด ์ ์ ํค๋์ ๋ณด๋ง ๋ค์ด๋ก๋ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ค์ฉ์ ์ด์ฃ .
๊ฒ์ฆ ํค๋ - ETag, if-none-match
Last-Modified, If-modified-Since ๋จ์
1. 1์ด ๋ฏธ๋ง ๋จ์๋ก ์บ์ ์กฐ์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
2. ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ ์ง๊ฐ ๋ค๋ฅด์ง๋ง, ๋ฐ์ดํฐ ๋ด๋ถ ๋ด์ฉ์ ๋๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ฃผ์ด์ผ ํจ.
์ด ๋ ETag, if-none-match ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.
ETag๋ ์บ์์ฉ ๋ฐ์ดํฐ์ hash๋ฅผ ์ด์ฉํด ์์์ ๊ณ ์ ํ ๋ฒ์ ์ด๋ฆ์ ๋ฌ์๋๋ ๋ฐฉ์์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ETag๋ฅผ ๋ฐ๋๊ธฐ ๋๋ฌธ์, ์ค์ ๋ฐ์ดํฐ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์๋์ง ์ฌ๋ถ๋ก ์บ์๋ฅผ ์ด์ฉํ ์ง ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฆฌ๋ก๋ํ ์ง ๊ฒฐ์ ํ ์ ์์ด์.
์ ์ฒด์ ์ธ ํ๋ก์ฐ๋ ์์ ์ค๋ช ํ Last-Modified, if-modified-since์ ๋์ผํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ์ง ์๋๋ก ํ๊ฒ ์ต๋๋ค.
+ ETag๋ ์๋ฒ์์ ๋ณ๊ฒฝ ๋ฐ ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์ ์บ์ ์ ์ด ๋ก์ง์ ์๋ฒ์์ ์์ ํ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์๋ฒ ์ ์ฅ์์ ์บ์๋ฅผ ์ ์ดํด์ ํธ๋ํฝ์ ๋ฎ์ถ ์ ์์ต๋๋ค.
ex) ์๋ฒ์์๋ ํ์ผ์ด ๋ณ๊ฒฝ๋์ด๋ ETag๋ฅผ ๋์ผํ๊ฒ ์ ์ง์์ผ ํด๋ผ์ด์ธํธ๊ฐ ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ ๋.
์บ์ ์ ์ด ํค๋
Cache-Control
Cache-Contorl : max-age
- ์บ์ ์ ํจ์๊ฐ / ์ด๋จ์
Cache-Contorl : no-cache
- ๋ฐ์ดํฐ๋ ์บ์ํด๋ ๋์ง๋ง, ํญ์ ์(origin) ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ
- ์ ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒจ ์ ๊ทผ ๋ถ๊ฐ ์ ์ค๋ฅ๋ณด๋ค๋ ์ค๋๋ ๋ฐ์ดํฐ๋ผ๋ ๋๋ ค์ค๋๋ค.
Cache-Contorl : no-store
- ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์บ์์ ์ ์ฅํ์ง ์์ (๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ญ์ )
Cache-Control : must-revalidate
- ์บ์ ๋ง๋ฃ ํ ์ต์ด ์กฐํ ์ ์ ์๋ฒ์ ๊ฒ์ฆํด์ผํจ
- ์ ์๋ฒ ์ ๊ทผ ์คํจ ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฆฌํดํฉ๋๋ค. ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ์ง ์์ต๋๋ค.
- must-revalidate๋ ์บ์ ์ ํจ ์๊ฐ์ด๋ผ๋ฉด ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
- ์ ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒจ ์ ๊ทผ ๋ถ๊ฐ ์ ๋ฐ๋์ ์ค๋ฅ๋ฅผ ๋๋ ค์ค๋๋ค.
๋ง์ฝ ์์ ์บ์๋ฅผ ์ด์ฉํ์ง ๋ชปํ๊ฒ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
Cache-Control: no-cache, no-store, must-revalidate ๋ก ์ค์ .
Expires
- max-age ํ์ ํธํ์ผ๋ก ๋ ์ง๋ก ์บ์ ๋ง๋ฃ์ผ ์ง์
- HTTP 1.0๋ถํฐ ์ฌ์ฉ
- ์ง๊ธ์ ๋ ์ ์ฐํ Cache-control : max-age ๋ฅผ ๊ถ์ฅ
- ์ฐ์ ์์๊ฐ Cache-control : max-age๋ณด๋ค ๋ฎ์ ๊ฐ์ด ์ฐ๋ฉด expires๋ ๋ฌด์๋จ.
ํ๋ก์ ์บ์ ์๋ฒ
ํ๋ก์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ํตํด ๋ค๋ฅธ ๋คํธ์ํฌ์ ๊ฐ์ ์ ์ผ๋ก ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ Origin ์๋ฒ์ ์ค๊ณ ์๋ฒ์ ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด ์ํธ ํต์ ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ ํ๋ก์ ์๋ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ ์บ์ ์๋ฒ๋ ์ ์๋ฒ์ ์์ฒญ๋ ๋ด์ฉ๋ค์ ์บ์๋ฅผ ์ด์ฉํด ์ ์ฅํด ๋์ด ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ ํ๋ก์ ์บ์ ์๋ฒ์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
Cache-Control : public
> ํ๋ก์ ์๋ฒ์๋ public ์บ์๋ก ์ ์ฅํฉ๋๋ค.
Cache-Control : private
> ํด๋น ์ฌ์ฉ์๋ง์ ์ํ ์บ์๋ก private ์บ์์ ์ ์ฅํฉ๋๋ค.
Cache-Control: s-maxage
> ํ๋ก์ ์๋ฒ ์บ์์๋ง ์ ์ฉ๋๋ max-age
<์ฐธ๊ณ ์๋ฃ>
https://zorba91.tistory.com/163
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
https://toss.tech/article/smart-web-service-cache
'๐ CS > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP ํํ ํค๋ (0) | 2023.02.17 |
---|---|
HTTP ์ํ์ฝ๋ / 1~5XX (0) | 2023.02.16 |
HTTP ๋ฉ์๋ ํ์ฉ (0) | 2023.02.15 |
HTTP ๋ฉ์๋ - GET, POST, PUT, PATCH, DELETE in Start line (0) | 2023.02.15 |
HTTP ( HyperText Transfer Protocol) (0) | 2023.02.15 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422