๊ธ๋ก๋ฒ ์น ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด CSS ์บ์ ๋ฌดํจํ ๊ท์น์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ๋ ํฌ๊ด์ ์ธ ๊ฐ์ด๋.
CSS ๋ฌดํจํ ๊ท์น: ์น ์ฑ๋ฅ์ ์ํ ์บ์ ๋ฌดํจํ ๋ง์คํฐํ๊ธฐ
์น ๊ฐ๋ฐ์ ์ญ๋์ ์ธ ์ธ๊ณ์์ ์ํํ๊ณ ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ์์ด ์ค์ํ์ง๋ง ์ข ์ข ๊ฐ๊ณผ๋๋ ์ธก๋ฉด์ ํจ๊ณผ์ ์ธ ์บ์ ๋ฌดํจํ, ํนํ ์บ์ค์ผ์ด๋ฉ ์คํ์ผ ์ํธ(CSS)์ ๋ํ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํน์ ํ์ผ์ ๋ก์ปฌ์ ์ ์ฅํฉ๋๋ค. ์ด๋ฅผ ์บ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ์์ฐ์ ๋ค์ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ด ํ์ ๋ฐฉ๋ฌธ ์๋๋ฅผ ๋์ ๋๋ค. ๊ทธ๋ฌ๋ CSS๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์ค๋๋ ๋ฒ์ ์ด ์ฌ์ฉ์์ ์บ์์ ์ ์ง๋์ด ์๊ฐ์ ๋ถ์ผ์น ๋๋ ๊นจ์ง ๋ ์ด์์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด๋ CSS ๋ฌดํจํ ๊ท์น, ๋๋ ๋ ๊ด๋ฒ์ํ๊ฒ๋ CSS์ ๋ํ ์บ์ ๋ฌดํจํ ์ ๋ต์ ๊ฐ๋ ์ด ์ค์ํ ์ด์ ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ์บ์ฑ ๋ฐ CSS ์ดํด
๋ธ๋ผ์ฐ์ ์บ์ฑ์ ์น ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ CSS ํ์ผ๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด ๋จผ์ ๋ก์ปฌ ์บ์๋ฅผ ํ์ธํฉ๋๋ค. ์ ํจํ๊ณ ๋ง๋ฃ๋์ง ์์ ํ์ผ ์ฌ๋ณธ์ด ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋คํธ์ํฌ ์์ฒญ์ ์ฐํํ์ฌ ์ง์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ก๋ ์๊ฐ๊ณผ ์๋ฒ ๋ถํ๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
์บ์ฑ์ ํจ๊ณผ๋ ์๋ฒ์์ ์ ์ก๋ HTTP ํค๋์ ์ํด ์ ์ด๋ฉ๋๋ค. ์ฃผ์ ํค๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Cache-Control: ์ด ์ง์๋ฌธ์ ์บ์ฑ์ ๋ํ ๋๋ถ๋ถ์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
max-age
,public
,private
๋ฐno-cache
์ ๊ฐ์ ์ง์๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ์บ์ํ ์ ์๋ ๋ฐฉ๋ฒ๊ณผ ๊ธฐ๊ฐ์ ๊ฒฐ์ ํฉ๋๋ค. - Expires: ์๋ต์ด ์ค๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ๋ ์ง์ ์๊ฐ์ ์ง์ ํ๋ ์ด์ HTTP ํค๋์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก
Cache-Control
์ดExpires
๋ฅผ ๋์ฒดํฉ๋๋ค. - ETag(Entity Tag): ๋ฆฌ์์ค์ ํน์ ๋ฒ์ ์ ํ ๋น๋ ๊ณ ์ ์๋ณ์์
๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด ํ๊ทธ๋ฅผ
If-None-Match
ํค๋๋ก ์๋ฒ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์๋ฒ๋304 Not Modified
์ํ๋ก ์๋ตํ์ฌ ๋์ญํญ์ ์ ์ฝํฉ๋๋ค. - Last-Modified: ETag์ ์ ์ฌํ์ง๋ง ํ์์คํฌํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด ์ ๋ณด๋ฅผ
If-Modified-Since
ํค๋๋ก ๋ณด๋ ๋๋ค.
CSS ํ์ผ์ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์ ์ธ ์บ์ฑ์ด ์ ์ ์ฌ์ดํธ์ ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์์ธ ์ ๋ฐ์ดํธ๊ฐ ๋น๋ฒํ ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋ฐฉํด๊ฐ ๋ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์บ์์์ ์ด์ CSS ํ์ผ์ ๋ก๋ํ์ฌ ์ต์ ๋์์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด๋ ์ด์ ํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
๋ฌธ์ ์ : CSS ์ ๋ฐ์ดํธ๊ฐ ์ธ์๋์ง ์๋ ๊ฒฝ์ฐ
CSS ์บ์ ๋ฌดํจํ์ ํต์ฌ ๊ณผ์ ๋ ์คํ์ผ์ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉ์๊ฐ ์ต์ ๋ฒ์ ์ ์์ ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ ์ ํ ๋ฌดํจํ๊ฐ ์์ผ๋ฉด ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ค๋๋ ๋ ์ด์์ ๋๋ ์คํ์ผ์ ๋ด ๋๋ค.
- ์ผ๊ด์ฑ ์๋ CSS๋ก ์ธํด ๊ธฐ๋ฅ์ด ๊นจ์ง๋ ๊ฒ์ ๋ง๋ฉ๋๋ค.
- ์ฌ์ดํธ์ ์ ๋ฌธ์ ์ธ ์ธ๊ด์ ์์์ํค๋ ์๊ฐ์ ๊ฒฐํจ์ ๊ฒฝํํฉ๋๋ค.
์ด๋ ์ฌ์ฉ์๊ฐ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๋ธ๋ผ์ฐ์ ๊ตฌ์ฑ์ ํตํด ์ฌ์ดํธ์ ์ก์ธ์คํ ์ ์๋ ๊ธ๋ก๋ฒ ๋์์๊ฒ ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ๊ฐ๋ ฅํ ์บ์ ๋ฌดํจํ ์ ๋ต์ ์์น๋ ์ด์ ๋ธ๋ผ์ฐ์ง ๊ธฐ๋ก์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ ์คํ์ผ์ ์ต์ ๋ฒ์ ์ ๋ณผ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
CSS ์บ์ ๋ฌดํจํ ๊ตฌํ: ์ ๋ต ๋ฐ ๊ธฐ์
CSS ์บ์ ๋ฌดํจํ์ ๋ชฉํ๋ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์๊ณ ์บ์๋ ๋ฒ์ ์ด ๋ ์ด์ ์ ํจํ์ง ์๋ค๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ์ ์๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์บ์ ๋ฒ์คํ ์ด๋ผ๊ณ ํฉ๋๋ค.
1. ๋ฒ์ ๊ด๋ฆฌ(์ฟผ๋ฆฌ ๋ฌธ์์ด ์ ๊ทผ ๋ฐฉ์)
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ CSS ํ์ผ์ URL์ ๋ฒ์ ๋ฒํธ ๋๋ ํ์์คํฌํ๋ฅผ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
<link rel="stylesheet" href="/css/style.css?v=1.2.3">
style.css
๋ฅผ ์
๋ฐ์ดํธํ๋ฉด ๋ฒ์ ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
<link rel="stylesheet" href="/css/style.css?v=1.2.4">
์๋ ๋ฐฉ์: ๋ธ๋ผ์ฐ์ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์๋ URL์ ๋ณ๊ฐ์ ๋ฆฌ์์ค๋ก ์ทจ๊ธํฉ๋๋ค. ๋ฐ๋ผ์ style.css?v=1.2.3
๊ณผ style.css?v=1.2.4
๋ ๋ณ๋๋ก ์บ์๋ฉ๋๋ค. ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ณ๊ฒฝ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.
์ฅ์ :
- ๊ตฌํ์ด ๊ฐ๋จํฉ๋๋ค.
- ๋๋ฆฌ ์ง์๋ฉ๋๋ค.
๋จ์ :
- ์ผ๋ถ ํ๋ก์ ์๋ฒ ๋๋ CDN์ด ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ๊ฑฐํ์ฌ ์ด ๋ฐฉ๋ฒ์ ๋นํจ๊ณผ์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
- ์ผ๋ถ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ด ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์๋ URL์ ํจ๊ณผ์ ์ผ๋ก ์บ์ํ์ง ๋ชปํ๋ฏ๋ก ์ ๋๋ก ๊ตฌ์ฑ๋์ง ์์ผ๋ฉด ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
2. ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ(์บ์ ๋ฒ์คํ ๋ ํ์ผ ์ด๋ฆ)
๋ ๊ฐ๋ ฅํ ์ ๊ทผ ๋ฐฉ์์๋ ๋ฒ์ ์๋ณ์๋ฅผ ํ์ผ ์ด๋ฆ์ ์ง์ ํตํฉํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ ์ข ์ข ๋น๋ ํ๋ก์ธ์ค๋ฅผ ํตํด ์ํ๋ฉ๋๋ค.
์:
์๋ณธ ํ์ผ:
style.css
๋น๋ ํ๋ก์ธ์ค ํ(์: Webpack, Rollup ๋๋ Gulp ์ฌ์ฉ):
<link rel="stylesheet" href="/css/style.a1b2c3d4.css">
์๋ ๋ฐฉ์: style.css
์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ๋น๋ ๋๊ตฌ๋ ์ด๋ฆ์ ๊ณ ์ ํ ํด์(ํ์ผ์ ๋ด์ฉ์์ ํ์)๊ฐ ์๋ ์ ํ์ผ์ ์์ฑํฉ๋๋ค. HTML ์ฐธ์กฐ๋ ์ด ์ ํ์ผ ์ด๋ฆ์ ๊ฐ๋ฆฌํค๋๋ก ์๋์ผ๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ URL ์์ฒด๊ฐ ๋ณ๊ฒฝ๋์ด ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ์บ์ฑ ๊ณ์ธต์ ๋ํด ๋ช
ํํ๊ฒ ์ ๋ฆฌ์์ค๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํจ๊ณผ์ ์
๋๋ค.
์ฅ์ :
- ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ์ ๊ฐ๋ ฅํ ์บ์ ๋ฒ์คํ ์ ํธ์ด๋ฏ๋ก ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
- ํ๋ก์ ์๋ฒ๊ฐ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ๊ฑฐํ๋ ๋ฐ ์ทจ์ฝํ์ง ์์ต๋๋ค.
- CDN๊ณผ ์ํํ๊ฒ ์๋ํฉ๋๋ค.
- ํ์ผ ์ด๋ฆ์ด ๋ด์ฉ์ ์ฐ๊ฒฐ๋์ด
Cache-Control
ํค๋์ ์ฅ๊ธฐ ์บ์ฑ ์ด์ ์ ํ์ฉํฉ๋๋ค.
๋จ์ :
- ๋น๋ ๋๊ตฌ ๋๋ ์์ฐ ๊ด๋ฆฌ ์์คํ ์ด ํ์ํฉ๋๋ค.
- ์ด๊ธฐ ์ค์ ์ด ๋ ๋ณต์กํ ์ ์์ต๋๋ค.
3. HTTP ํค๋ ๋ฐ Cache-Control ์ง์๋ฌธ
URL์ ๋ณ๊ฒฝํ๋ ์๋ฏธ์์ ์ง์ ์ ์ธ "๋ฌดํจํ ๊ท์น"์ ์๋์ง๋ง, ๋ธ๋ผ์ฐ์ ์ ์ค๊ฐ์๊ฐ CSS๋ฅผ ์บ์ํ๋ ๋ฐฉ์์ ๊ด๋ฆฌํ๋ ค๋ฉด HTTP ํค๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Cache-Control: no-cache
์ฌ์ฉ:
CSS ํ์ผ์ Cache-Control: no-cache
๋ฅผ ์ค์ ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์บ์๋ ๋ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ ์ ์๋ฒ๋ก ๋ฆฌ์์ค๋ฅผ ๋ค์ ๊ฒ์ฆํด์ผ ํจ์ ์๋ฆฝ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ETag
๋๋ Last-Modified
ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์กฐ๊ฑด๋ถ ์์ฒญ(์: If-None-Match
๋๋ If-Modified-Since
)์ ๋ณด๋
๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์๋ฒ๋ 304 Not Modified
๋ก ์๋ตํ์ฌ ๋์ญํญ์ ์ ์ฝํฉ๋๋ค. ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์๋ฒ๋ ์ ๋ฒ์ ์ ๋ณด๋
๋๋ค.
์์ ์๋ฒ ๊ตฌ์ฑ(Nginx):
location ~* \.css$ {
add_header Cache-Control "public, max-age=31536000, no-cache";
expires 1y;
}
์ด Nginx ์์์ max-age=31536000
(1๋
)์ ์ฅ๊ธฐ ์บ์ฑ์ ์ ์ํ์ง๋ง no-cache
๋ ๋ค์ ๊ฒ์ฆ์ ๊ฐ์ ํฉ๋๋ค. ์ด ์กฐํฉ์ ์บ์ฑ์ ํ์ฉํ๋ ๋์์ ์ฌ๊ฒ์ฆ ์ ์
๋ฐ์ดํธ๊ฐ ํ์น๋๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ฅ์ :
- ๋งค๋ฒ ์ ์ฒด ๋ค์ด๋ก๋๋ฅผ ๊ฐ์ ํ์ง ์๊ณ ์ ์ ๋๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ํ์ผ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๋์ญํญ ์ฌ์ฉ๋์ ์ค์ ๋๋ค.
๋จ์ :
- ์ฃผ์ ๊น์ ์๋ฒ ์ธก ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
no-cache
๋ ์ฌ์ ํ ์ฌ๊ฒ์ฆ์ ์ํด ๋คํธ์ํฌ ์๋ณต์ ํฌํจํ๋ฏ๋ก ์ค์ ๋ก ๋ณ๊ฒฝํ ์ ์๋ ํ์ผ ์ด๋ฆ์ ๋นํด ๋๊ธฐ ์๊ฐ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
4. ๋์ CSS ์์ฑ
CSS๊ฐ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ๋๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋งค์ฐ ๋์ ์ธ ์น์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋์ ์ผ๋ก CSS๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ต์ ์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ ์ํฅ์ ์๋ฐํ๋ฉฐ ์บ์ฑ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ฃผ์ ๊น์ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค.
CSS๊ฐ ๋์ ์ผ๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ ์ด ๋์ CSS๋ฅผ ์ ๊ณตํ๋ URL์ ์บ์ ๋ฒ์คํ
๋ฉ์ปค๋์ฆ(ํ์ผ ์ด๋ฆ ๋๋ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋ฒ์ ๊ด๋ฆฌ์ ๊ฐ์)์ด ์ ์ฉ๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ ์ธก ์คํฌ๋ฆฝํธ generate_css.php
๊ฐ CSS๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐํฉ๋๋ค.
<link rel="stylesheet" href="/generate_css.php?v=some_dynamic_version">
์ฅ์ :
- ๊ณ ๋๋ก ๊ฐ์ธํ๋๊ฑฐ๋ ๋์ ์คํ์ผ ์ง์ ์ ํ์ฉํฉ๋๋ค.
๋จ์ :
- ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ์บ์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ณต์กํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๋์์ ์ํ ์ฌ๋ฐ๋ฅธ ์ ๋ต ์ ํ
์ต์ ์ ์ ๋ต์ ์ข ์ข ๊ธฐ์ ์ ์กฐํฉ์ ํฌํจํ๋ฉฐ ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ๊ณผ ์ธํ๋ผ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
- ๋๋ถ๋ถ์ ์ต์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ: ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. Webpack, Vite ๋ฐ Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ด ์์
์ ์ํํ์ฌ ๋น๋ ํ๋ก์ธ์ค ์ค์ ๋ฒ์ ๊ด๋ฆฌ๋ ํ์ผ ์ด๋ฆ์ ์๋์ผ๋ก ์์ฑํ๊ณ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์
Cache-Control: max-age
์ง์๋ฌธ๊ณผ ์ ์ฐ๊ฒฐ๋์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฅ๊ธฐ๊ฐ ๋์ ์ ๊ทน์ ์ผ๋ก ์์ฐ์ ์บ์ฑํ ์ ์๋๋ก ํ๋ฉฐ ๋ด์ฉ ๋ณ๊ฒฝ ์ ์ ํ์ผ ์ด๋ฆ์ด ์์ฑ๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ: ์ด ์ ๋ต์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ CDN์ ์์ง ์บ์์ ์ด๋ฅด๊ธฐ๊น์ง ์ด๋์์๋ ์ค๋๋ ์์ฐ์ด ์ ๊ณต๋ ๊ฐ๋ฅ์ฑ์ ์ต์ํํ๋ฏ๋ก ๊ธ๋ก๋ฒ ๋์์๊ฒ ํนํ ํจ๊ณผ์ ์ ๋๋ค.
- ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋จํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ: ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์คํ ๊ฐ๋ฅํ ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ฌ์ ์ธ ํ๋ก์ ๋ฌธ์ ๋ฅผ ์ผ๋์ ๋์ญ์์ค. ์ฟผ๋ฆฌ ๋ฌธ์์ด์ CDN ๋๋ ์บ์ฑ ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๋๋ก ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ: ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํนํ ๊ธ๋ก๋ฒ CDN์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ ์ง์ญ์ผ๋ก ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค. ์ผ๋ถ ๊ตฌํ ๋๋ ๋ ์ ๊ตํ CDN์ ์ฌ์ ํ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ์ ์ฒด ๋ค์ด๋ก๋ ์์ด ์ฆ์ ์
๋ฐ์ดํธ๋ฅผ ๋ณด์ฅํ๋ ค๋ฉด:
Cache-Control: no-cache
๋ฅผETag
๋ฐLast-Modified
ํค๋์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ๋ ์ฌ์ํ ๋ณ๊ฒฝ์ ๋ํด ๊ณ ์ ํ ํ์ผ ์ด๋ฆ์ด ํ์ํ์ง ์์ ๋น๋ฒํ๊ฒ ์ ๋ฐ์ดํธ๋๋ ์คํ์ผ ์ํธ์ ๋ํ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ์๋ฒ ์ธก์์ ๋ ์์ฃผ ์์ฑ๋๊ฑฐ๋ ์์ ๋ ์ ์๋ ์คํ์ผ ์ํธ์ ํนํ ์ ์ฉํฉ๋๋ค.๊ธ๋ก๋ฒ ๊ณ ๋ ค ์ฌํญ: ์ด๋ ๊ฐ๋ ฅํ ์๋ฒ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ์๋ฒ๊ฐ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์ ์ ํ
304 Not Modified
์๋ต์ ์ ์กํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์์ ๋ฐ์ดํฐ ์ ์ก ๋ฐ ๋๊ธฐ ์๊ฐ์ ์ต์ํํ๋์ง ํ์ธํฉ๋๋ค.
๊ธ๋ก๋ฒ CSS ์บ์ ๋ฌดํจํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ํํ ์ ๋ต์ ๊ด๊ณ์์ด ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํด ๊ธ๋ก๋ฒ ๋์์ ๋ํ ํจ๊ณผ์ ์ธ CSS ์บ์ ๋ฌดํจํ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ๋น๋ ๋๊ตฌ๋ก ์๋ํ: ์ต์ ํ๋ฐํธ์๋ ๋น๋ ๋๊ตฌ(Webpack, Vite, Parcel, Rollup)๋ฅผ ํ์ฉํฉ๋๋ค. ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ, ์์ฐ ์ปดํ์ผ ๋ฐ HTML ์ฝ์ ์ ์๋ํํ์ฌ ์๋ ์ค๋ฅ๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ํจ์จ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ๋ฒ์ ๊ด๋ฆฌ๋ ์์ฐ์ ๋ํ ์ฅ๊ธฐ ์บ์ฑ: ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
Cache-Control: public, max-age=31536000
์ ์ฌ์ฉํ์ฌ ์๋ฒ๊ฐ ์ด๋ฌํ ํ์ผ์ ๋งค์ฐ ์ค๋ซ๋์(์: 1๋ ์ด์) ์บ์ํ๋๋ก ๊ตฌ์ฑํฉ๋๋ค. ํ์ผ ์ด๋ฆ์ด ๋ด์ฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ธด `max-age`๋ ์์ ํ๊ณ ์ฑ๋ฅ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. - `no-cache` ๋๋ `must-revalidate`์ ์ ๋ต์ ์ฌ์ฉ: ์ฆ์ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ์ฅ ์ค์ํ ์ค์ํ CSS ๋๋ ๋์ ์ผ๋ก ์์ฑ๋ ์คํ์ผ ์ํธ์ ๊ฒฝ์ฐ `no-cache`(ETag ์ฌ์ฉ) ๋๋ `must-revalidate`๋ฅผ `Cache-Control` ํค๋์์ ๊ณ ๋ คํฉ๋๋ค. `must-revalidate`๋ `no-cache`์ ์ ์ฌํ์ง๋ง ์บ์๊ฐ ๋ง๋ฃ๋ ์บ์ ํญ๋ชฉ์ ์๋ณธ ์๋ฒ๋ก ์ฌ๊ฒ์ฆํด์ผ ํจ์ ํนํ ์บ์์ ์๋ ค์ค๋๋ค.
- ๋ช ํํ ์๋ฒ ๊ตฌ์ฑ: ์น ์๋ฒ(Nginx, Apache ๋ฑ) ๋ฐ CDN ๊ตฌ์ฑ์ด ์บ์ฑ ์ ๋ต๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฐ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
- ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น์์ ํ ์คํธ: ์บ์ ๋์์ ๋๋๋ก ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ค์ํ ๋ธ๋ผ์ฐ์ , ์ฅ์น์์ ์น์ฌ์ดํธ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ๊ณ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ฌดํจํ ์ ๋ต์ด ์์๋๋ก ๊ธ๋ก๋ฒํ๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: Google PageSpeed Insights, GTmetrix ๋๋ WebPageTest์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ์บ์ฑ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์์ฐ์ด ์ผ๋ง๋ ํจ๊ณผ์ ์ผ๋ก ์บ์๋๊ณ ์ ๊ณต๋๋์ง์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN): CDN์ ๊ธ๋ก๋ฒ ๋์์๊ฒ ํ์์ ์ ๋๋ค. CDN์ด ์บ์ ๋ฒ์คํ ์ ๋ต์ ์ค์ํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ๋๋ถ๋ถ์ ์ต์ CDN์ ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ์ ์ํํ๊ฒ ์๋ํฉ๋๋ค. ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋ฒ์ ๊ด๋ฆฌ์ ๊ฒฝ์ฐ CDN์ด ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ์๋ URL์ ๋ณ๋์ ์์ฐ์ผ๋ก ์บ์ํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ์ ์ง์ ๋กค์์: ์ค์ํ CSS ๋ณ๊ฒฝ์ ๊ฒฝ์ฐ ์ ์ง์ ๋กค์์ ๋๋ ์นด๋๋ฆฌ์ ๋ฆด๋ฆฌ์ค ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ฅผ ํตํด ๋จผ์ ์์์ ์ฌ์ฉ์์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐฐํฌํ๊ณ ๋ฌธ์ ๋ฅผ ๋ชจ๋ํฐ๋งํ ๋ค์ ์ ์ฒด ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ง์ ์ผ๋ก ๋กค์์ํ์ฌ ์ ์ฌ์ ์ธ ์บ์ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํฅ์ ์ต์ํํ ์ ์์ต๋๋ค.
ํผํด์ผ ํ ์ผ๋ฐ์ ์ธ ํจ์
CSS ์บ์ ๋ฌดํจํ๋ฅผ ๊ตฌํํ ๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ค์๊ฐ ๋ ธ๋ ฅ์ ํผ์ํ ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ ์๋ ๋ฒ์ ๊ด๋ฆฌ: ๋ฒ์ ๊ด๋ฆฌ ์ฒด๊ณ๊ฐ ๋ชจ๋ CSS ํ์ผ์ ์ผ๊ด๋๊ฒ ์ ์ฉ๋์ง ์์ผ๋ฉด ์ผ๋ถ ์คํ์ผ์ด ์ ๋ฐ์ดํธ๋๋ ๋์ ๋ค๋ฅธ ์คํ์ผ์ ์บ์๋ ์ํ๋ก ์ ์ง๋์ด ์๊ฐ์ ๋ถ์ผ์น๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- `no-store` ๋๋ `no-cache`์ ๋ํ ๊ณผ๋ํ ์์กด: ํน์ ์๋๋ฆฌ์ค์์ ์ ์ฉํ์ง๋ง, ๋ชจ๋ CSS๋ฅผ `no-store`(์บ์ฑ์ ์์ ํ ๋ฐฉ์ง) ๋๋ `no-cache`(๋ชจ๋ ์์ฒญ ์ ์ฌ๊ฒ์ฆ ๊ฐ์ )๋ก ์ค์ ํ๋ฉด ์บ์ฑ์ ์ด์ ์ ๋ฌดํจํํ์ฌ ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ ์ ์์ต๋๋ค.
- ํ๋ก์ ์บ์ ๋ฌด์: ์บ์ฑ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ก ์ ํ๋์ง ์๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ์ค๊ฐ ํ๋ก์ ์๋ฒ ๋ฐ CDN๋ ๋ฆฌ์์ค๋ฅผ ์บ์ํฉ๋๋ค. ๋ฌดํจํ ์ ๋ต์ ์ด๋ฌํ ๊ณ์ธต ์ ์ฒด์์ ํจ๊ณผ์ ์ด์ด์ผ ํฉ๋๋ค. ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ธฐ์ ๊ฐ์ฅ ํ๋ ฅ์ ์ ๋๋ค.
- ์ค์ ์ฌ์ฉ์๋ก ํ ์คํธํ์ง ์์: ์ ์ด๋ ํ๊ฒฝ์์ ์๋ํ๋ ๊ฒ์ด ์ ์ธ๊ณ์ ์ฌ์ฉ์์๊ฒ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์์ต๋๋ค. ์ค์ ํ ์คํธ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋ณต์กํ ๋ช ๋ช ๊ท์น: ํด์๋ ์บ์ ๋ฒ์คํ ์ ์ข์ง๋ง ๋น๋ ํ๋ก์ธ์ค๊ฐ HTML ๋ฐ ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ CSS ํ์ผ(์: CSS-in-JS ์๋ฃจ์ )์ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ๋์ง ํ์ธํฉ๋๋ค.
๊ฐ๋ฐ์ ๊ฒฝํ์ ์ญํ
์ ๊ตฌํ๋ ์บ์ ๋ฌดํจํ ์ ๋ต์ ๊ธ์ ์ ์ธ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฌ๊ฒ ๊ธฐ์ฌํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ CSS๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋ฐ์๋๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์ ๋(๋๋ ์์ธก ๊ฐ๋ฅํ ์บ์ ์๋ก ๊ณ ์นจ ํ) ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์ํฌํ๋ก๊ฐ ๊ฐ์ํ๋ฉ๋๋ค. ๋ฒ์ ๊ด๋ฆฌ๋ ํ์ผ ์ด๋ฆ์ ์ ๊ณตํ๊ณ HTML ์ฐธ์กฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ฒ๋ผ ์บ์ ๋ฒ์คํ ์ ์๋ํํ๋ ๋น๋ ๋๊ตฌ๋ ์ด๋ฌํ ์ธก๋ฉด์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ด ์๋ํ๋ ๊ฐ๋ฐ์๊ฐ ์บ์ ๊ด๋ จ ๋ฌธ์ ๋๋ฒ๊น ์ ์์ํ๋ ์๊ฐ์ ์ค์ด๊ณ ๊ธฐ๋ฅ ๊ตฌ์ถ ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ฐ์ ์ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ๊ฐ๋ฐํ์ ๊ฒฝ์ฐ ์ด ์ผ๊ด์ฑ๊ณผ ์ ๋ขฐ์ฑ์ด ๋์ฑ ์ค์ํฉ๋๋ค.
๊ฒฐ๋ก
ํจ๊ณผ์ ์ธ CSS ์บ์ ๋ฌดํจํ๋ ๋จ์ํ ๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ฌํญ์ด ์๋๋ผ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ์ ๋ฌธ์ ์ธ ์น ๊ฒฝํ์ ์ ๊ณตํ๋ ์ด์์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์บ์ฑ์ด ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๊ณ ํ์ผ ์ด๋ฆ ๋ฒ์ ๊ด๋ฆฌ ๋๋ ์ ์คํ๊ฒ ๊ตฌ์ฑ๋ HTTP ํค๋์ ๊ฐ์ ๊ฐ๋ ฅํ ์ ๋ต์ ๊ตฌํํจ์ผ๋ก์จ ๋์์ธ ์ ๋ฐ์ดํธ๊ฐ ์ฆ์, ์ผ๊ด์ฑ ์๊ฒ ์ ๊ณต๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋คํธ์ํฌ ์กฐ๊ฑด, ์ง๋ฆฌ์ ๋ถํฌ ๋ฐ ๋ค์ํ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์์ฉํ๋ ๊ธ๋ก๋ฒ ๋์์ ๊ฒฝ์ฐ, ์ ๊ณ ๋ ค๋ ์บ์ ๋ฌดํจํ ์ ๋ต์ ํ์์ ์ ๋๋ค. ์ ์ ํ ๊ธฐ์ ์ ์ ํํ๊ณ ๊ตฌํํ๋ ๋ฐ ์๊ฐ์ ํฌ์ํ๋ฉด ์ฌ์ฉ์ ๋ง์กฑ๋ ํฅ์, ๋์ญํญ ์๋น ๊ฐ์, ๋ณด๋ค ๊ฐ๋ ฅํ๊ณ ์ ์ง ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ธก๋ฉด์์ ๋ฐฐ๋น๊ธ์ ์ป์ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์๋ํํ๊ณ , ์ฒ ์ ํ ํ ์คํธํ๊ณ , ์น ๊ธฐ์ ๊ณผ ์ฌ์ฉ์ ๊ธฐ๋์ ์งํํ๋ ํ๊ฒฝ์ ์ ๋ต์ ์ ์ฉํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค.