HTTP ์บ์ฑ์ด๋?
HTTP ์บ์ฑ์ ๊ฐ์ ์์ฒญ์ ๋ํ ์๋ต์ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.์บ์ฑ ์์ด
๋ฌธ์ : ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋งค๋ฒ DB์์ ์กฐํ (๋๋ฆผ, ์๋ฒ ๋ถํ)์บ์ฑ ์ฌ์ฉ
์ฅ์ : ์๋ฒ ์์ฒญ ์์ด ์ฆ์ ์๋ต (๋น ๋ฆ, ์๋ฒ ๋ถํ ๊ฐ์)Cache-Control ํค๋
๊ธฐ๋ณธ ๊ตฌ์กฐ
public: ๋ชจ๋ ์บ์(๋ธ๋ผ์ฐ์ , CDN)์์ ์ ์ฅ ๊ฐ๋ฅmax-age=3600: 3600์ด(1์๊ฐ) ๋์ ์ ํจ
์ฃผ์ ๋๋ ํฐ๋ธ
- ์ ์ฅ ์์น
- ์บ์ ๊ธ์ง
- ๋ง๋ฃ ์๊ฐ
- ์ฌ๊ฒ์ฆ
public vs private
- public: ๋ชจ๋ ์บ์์์ ์ ์ฅ ๊ฐ๋ฅ (๋ธ๋ผ์ฐ์ , CDN, ํ๋ก์)
- ์ฉ๋: ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋์ผํ ์๋ต (์ํ ๋ชฉ๋ก, ๊ณต์ง์ฌํญ)
- private: ๋ธ๋ผ์ฐ์ ์์๋ง ์ ์ฅ ๊ฐ๋ฅ (CDN/ํ๋ก์๋ ๋ถ๊ฐ)
- ์ฉ๋: ์ฌ์ฉ์๋ณ๋ก ๋ค๋ฅธ ์๋ต (๋ง์ดํ์ด์ง, ์ฅ๋ฐ๊ตฌ๋)
Stale-While-Revalidate
๋ง๋ฃ๋ ์บ์(Stale)๋ฅผ ์ฆ์ ๋ฐํํ๋ฉด์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐฑ์ ํ๋ ์ ๋ต์ ๋๋ค.์๋ ๋ฐฉ์
์ฅ์ :- ์ฌ์ฉ์๋ ํญ์ ๋น ๋ฅธ ์๋ต (Stale์ด๋ผ๋ ์ฆ์ ๋ฐํ)
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐฑ์ ์ผ๋ก ๋ค์ ์ฌ์ฉ์๋ ์ ์ ํ ๋ฐ์ดํฐ
stale-while-revalidate๋ฅผ ์ง์ํฉ๋๋ค.
Stale-If-Error
์ค๋ฅ ๋ฐ์ ์ Stale ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.- ์ ์ ์ํฉ: 60์ด๋ง๋ค ๊ฐฑ์
- ์๋ฒ ์ค๋ฅ ๋ฐ์: ์ต๋ 86400์ด(1์ผ) ๋์ Stale ์บ์ ์ฌ์ฉ
- ์๋ฒ ๋ณต๊ตฌ: ๋ค์ ์ ์ ๊ฐฑ์
Vary ํค๋
๊ฐ์ URL์ด๋ผ๋ ์์ฒญ ํค๋์ ๋ฐ๋ผ ๋ค๋ฅธ ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.Accept-Language ํค๋ ๊ฐ์ ๋ฐ๋ผ ์บ์ ๋ถ๋ฆฌ
์์:
Accept-Language: ๋ค๊ตญ์ด ์ง์Accept-Encoding: ์์ถ ๋ฐฉ์ (gzip, br)Authorization: ์ธ์ฆ ์ฌ๋ถ
Sonamu vs BentoCache
Sonamu์๋ ๋ ๊ฐ์ง ์บ์ฑ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค:- Cache-Control (HTTP)
- BentoCache (์๋ฒ)
๋ธ๋ผ์ฐ์ /CDN ์บ์ฑ์์น: ๋ธ๋ผ์ฐ์ , CDN, ํ๋ก์
์ ์ด: HTTP ํค๋๋ก ์ ์ด
๋์: ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ ์ต์ข
์๋ต
ํน์ง:
- ๋คํธ์ํฌ ํธ๋ํฝ ๊ฐ์
- ํด๋ผ์ด์ธํธ ์ ์ด (๋ธ๋ผ์ฐ์ ๊ฐ ์บ์ ๊ด๋ฆฌ)
- ๋ฌดํจํ ์ด๋ ค์
์กฐํฉ ์ฌ์ฉ
๋ ๊ฐ์ง๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ต๋ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค:- ์ฒซ ์์ฒญ: DB ์กฐํ (๋๋ฆผ) โ ์๋ฒ ์บ์ + HTTP ์บ์
- 60์ด ์ด๋ด: ๋ธ๋ผ์ฐ์ ์บ์์์ ๋ฐํ (๋งค์ฐ ๋น ๋ฆ, ์๋ฒ ์์ฒญ ์์)
- 60์ด~10๋ถ: ์๋ฒ ์์ฒญํ์ง๋ง ์๋ฒ ์บ์ ์ฌ์ฉ (๋น ๋ฆ, DB ์กฐํ ์์)
- 10๋ถ ์ดํ: DB ์กฐํ (๋๋ฆผ) โ ๋ค์ ์บ์ฑ
์บ์ฑ ๋ ์ด์ด
๊ฐ ๋ ์ด์ด์ ์ญํ :- ๋ธ๋ผ์ฐ์ ์บ์: ์ฌ์ฉ์๋ณ ์บ์, ๊ฐ์ฅ ๋น ๋ฆ
- CDN ์บ์: ์ง์ญ๋ณ ์บ์, ๋คํธ์ํฌ ์ง์ฐ ๊ฐ์
- ์๋ฒ ์บ์: DB ๋ถํ ๊ฐ์, ์ฆ์ ๋ฌดํจํ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: ์๋ณธ ๋ฐ์ดํฐ