์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ , ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๋ฉฐ, ๋ก๋ฉ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์บ์ฑ(Caching)์ด๋ค.
ํ์ง๋ง ์บ์๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค, ์ค์ ๋ง๋ค ๋ค๋ฅด๊ฒ ๋์ํ๊ณ ,
"์ ์ด๊ฒ ๊ฐฑ์ ์ ๋์ง?", "์ API๊ฐ ์์ ๊ฐ์ ๊ฐ์ ธ์ค์ง?" ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ข
์ข
๋ง์ฃผํ๊ฒ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๊ผญ ์์์ผ ํ ์บ์ฑ ์ ๋ต๋ค์ ์ ๋ฆฌํด๋ดค๋ค.
HTTP ์๋ต ํค๋์์ ์บ์ฑ ๋์์ ์ง์ ํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ
Cache-Control: public, max-age=3600
์ต์ | ์ค๋ช |
---|---|
public | ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์บ์ ํ์ฉ (CDN ํฌํจ) |
private | ์ฌ์ฉ์ ๊ฐ๋ณ ๋ธ๋ผ์ฐ์ ์๋ง ์บ์ ํ์ฉ |
no-cache | ์บ์ฑ์ ๋์ง๋ง ๋งค๋ฒ ์๋ฒ์ ํ์ธ |
no-store | ์์ ์บ์ํ์ง ์์ (๋ณด์ ์ ๋ณด์ ์ฌ์ฉ) |
max-age=์ด๋จ์ | ์ง์ ์๊ฐ ๋์ ์บ์ ์ ์ง (์ด ๋จ์) |
s-maxage | ๊ณต์ ์บ์์๋ง ์ ์ฉ (์: CDN) |
Cache-Control: public, max-age=86400
Cache-Control: no-cache
๋ฆฌ์์ค์ ๊ณ ์ ํ ์๋ณ์(ํด์)๋ฅผ ์ค์ โ ์์ฒญ ์ ์๋ฒ๊ฐ ๋น๊ต
ETag: "abc123"
ํด๋ผ์ด์ธํธ โ ์๋ฒ ์์ฒญ ์:
If-None-Match: "abc123"
Last-Modified: Wed, 24 Apr 2024 10:00:00 GMT
ํด๋ผ์ด์ธํธ ์์ฒญ:
If-Modified-Since: Wed, 24 Apr 2024 10:00:00 GMT
๐ ETag๊ฐ ๋ ์ ํํ ๋น๊ต ๋ฐฉ์
(๋จ, ์๋ฒ CPU ์ฐ์ฐ์ ๋ ๋ง์ด ์ฐ๋ฏ๋ก ์ํฉ์ ๋ฐ๋ผ ์ ํ)
์คํ๋ผ์ธ์์๋ ์๋ํ๋ ์ฑ์ ์ํ ํต์ฌ ๊ธฐ์ (PWA)
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
return fetch(event.request);
})
);
});
์ ๋ต | ์ค๋ช |
---|---|
Cache First | ์บ์๋ ์๋ต ์ฐ์ , ์์ผ๋ฉด ๋คํธ์ํฌ |
Network First | ๋คํธ์ํฌ ์ฐ์ , ์คํจ ์ ์บ์ |
Stale-While-Revalidate | ์บ์ ์๋ต ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐฑ์ |
Cache Only | ํญ์ ์บ์๋ง ์ฌ์ฉ |
Network Only | ํญ์ ๋คํธ์ํฌ๋ง ์ฌ์ฉ |
Cache-Control: max-age
๊ฐ ๋๋ฌด ๊นmain.abc123.js
)๋ฅผ ํ์ผ๋ช
์ ํฌํจCache-Control: no-cache
, ๋๋ ETag
๋น๊ต?v=1.2.3
๋ฑ์ ์ฟผ๋ฆฌ ์คํธ๋ง ์ถ๊ฐ๋ก ์บ์ ๋ฌดํจํ๊ธฐ์ | ์บ์ ๋ฐฉ์ | ๊ฐฑ์ ๋ฐฉ์ |
---|---|---|
Cache-Control | ์๊ฐ ๊ธฐ๋ฐ (max-age ) | ์ผ์ ์๊ฐ ํ ์ ์์ฒญ |
ETag / Last-Modified | ๋ฆฌ์์ค ๋น๊ต ๊ธฐ๋ฐ | ๋ณ๊ฒฝ ์ฌ๋ถ์ ๋ฐ๋ผ 304 or 200 |
Service Worker | ์ง์ ์ฝ๋๋ก ์ ์ด | fetch ์์ฒญ ์ธํฐ์ ํธ ๊ฐ๋ฅ |
SWR, React Query, CDN ์ต์ ํ ๋ฑ์ ํ ๋ ์บ์ ์ ๋ต์ ๋ชจ๋ฅด๋ฉด ๋ฒ๊ทธ๋ฅผ ๋ง๋ ๋ค๋ ๊ฑธ ์ฒด๊ฐํ๋ค.
ํนํ HTTP ์บ์๊ฐ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ ๋ ๋๋ฒ๊น
์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์
๊ธฐ๋ณธ์ ์ธ ์บ์ ์ ๋ต์ ์ดํดํ๊ณ ์์ผ๋ฉด ์ค๋ฌด์์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์ง๊ธ์ ๋ฐฐํฌ ์ JS/CSS์ hash๋ฅผ ๋ถ์ด๊ณ ,
API๋ ETag + Cache-Control: no-cache
์กฐํฉ์ผ๋ก
์ ํํ ๋ณ๊ฒฝ ์ฌ๋ถ๋ง ํ๋จํ๊ฒ ์ค์ ํ๊ณ ์๋ค.
๐งฉ โ์บ์๋ ์๋์ ๋ฌธ์ ์ด์ ์ ํ์ฑ์ ๋ฌธ์ ๋ค.
๊ทธ ๋์ ๋์์ ๋ง์กฑ์ํค๋ ๊ฒ์ด ์ง์ง ์ต์ ํ๋ค.โ