CSS preload link ์์ฑ์ ๋ง์คํฐํ์ฌ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅด๊ณ ๋ถ๋๋ฌ์ด ๊ฒฝํ์ ์ ๊ณตํ์ธ์.
์น์ฌ์ดํธ ์๋ ์ ๊ธ ํด์ : CSS Preload ์ฌ์ธต ๋ถ์
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ์ธ์์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ค์ ์น์ฌ์ดํธ๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ๋๋ฆฌ๊ฒ ๋ก๋๋๋ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์ ๋ถ๋ง, ์ดํ๋ฅ ์ฆ๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋น์ฆ๋์ค์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ์ ์ค ํ๋๊ฐ ๋ฐ๋ก CSS Preload์ ๋๋ค. ์ด ๊ธ์์๋ CSS Preload๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ดํดํ๊ณ ๊ตฌํํ๊ธฐ ์ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
CSS Preload๋ ๋ฌด์์ธ๊ฐ?
CSS Preload๋ ์น ์ฑ๋ฅ ์ต์ ํ ๊ธฐ์ ๋ก, ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋งํฌ์ ์์ ๋ฐ๊ฒฌํ๊ธฐ ์ ์ด๋ผ๋ CSS ์คํ์ผ์ํธ์ ๊ฐ์ ํน์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ค์ด๋ก๋ํ๋๋ก ์ง์ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ค์ํ ๋ฆฌ์์ค๋ฅผ ๋ ์ผ์ฐ ๊ฐ์ ธ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์ด ๋ ๋๋ง ์ฐจ๋จ ์๊ฐ์ ์ค์ด๊ณ ์น์ฌ์ดํธ์ ์ฒด๊ฐ ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํจ๊ณผ์ ์ผ๋ก, ๋ธ๋ผ์ฐ์ ์๊ฒ "์ด๋ด, ๋๋ ์ด CSS ํ์ผ์ด ๊ณง ํ์ํ ํ ๋ ์ง๊ธ ๋ค์ด๋ก๋ ์์ํด!"๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
Preload๊ฐ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ํ์ฑํ๊ณ , CSS ๋งํฌ(<link rel="stylesheet">
)๋ฅผ ๋ฐ๊ฒฌํ ๋ค์, CSS ํ์ผ ๋ค์ด๋ก๋๋ฅผ ์์ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ํนํ ์ด๊ธฐ ๋ทฐํฌํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์์ ์ธ CSS ํ์ผ์ ๊ฒฝ์ฐ ์ง์ฐ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
CSS Preload๋ rel="preload"
์์ฑ์ ๊ฐ์ง <link>
์์๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ ํ์ํ ๋ฆฌ์์ค๊ฐ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊ฒ์ธ์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ธ์ ์ผ๋ก ์๋ฆฌ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ CSS Preload๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
CSS Preload๋ฅผ ๊ตฌํํด์ผ ํ๋ ๋ช ๊ฐ์ง ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๋ค:
- ์ฒด๊ฐ ์ฑ๋ฅ ํฅ์: ํต์ฌ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํจ์ผ๋ก์จ ๋ธ๋ผ์ฐ์ ๋ ์ด๊ธฐ ํ์ด์ง ์ฝํ ์ธ ๋ฅผ ๋ ๋นจ๋ฆฌ ๋ ๋๋งํ์ฌ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ Google์ Core Web Vitals์ ํต์ฌ ์งํ์ธ ์ต์ด ์ฝํ ์ธ ํ ํ์ธํธ(FCP) ๋ฐ ์ต๋ ์ฝํ ์ธ ํ ํ์ธํธ(LCP)์ ํนํ ์ค์ํฉ๋๋ค.
- ๋ ๋๋ง ์ฐจ๋จ ์๊ฐ ๊ฐ์: ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค๋ ๋ค์ด๋ก๋ ๋ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๊ฒ์ ๋ง์ต๋๋ค. ํต์ฌ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ฉด ์ด ์ฐจ๋จ ์๊ฐ์ด ์ต์ํ๋ฉ๋๋ค.
- ๋ฆฌ์์ค ๋ก๋ฉ ์ฐ์ ์์ ์ง์ : ๋ฆฌ์์ค๊ฐ ๋ก๋๋๋ ์์๋ฅผ ์ ์ดํ์ฌ ๋ ์ค์ํ ํ์ผ๋ณด๋ค ํต์ฌ CSS ํ์ผ์ด ๋จผ์ ๋ค์ด๋ก๋๋๋๋ก ํ ์ ์์ต๋๋ค.
- ์คํ์ผ ์๋ ์ฝํ ์ธ ์ ๊น๋นก์(FOUC) ๋ฐฉ์ง: CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ฉด ํ์ด์ง๊ฐ ์ฒ์์ ์คํ์ผ ์์ด ๋ก๋๋ ํ ๊ฐ์๊ธฐ ์๋ํ ๋์์ธ์ผ๋ก ๋ฐ๋๋ FOUC ํ์์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ ํฅ์: ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ์ข์ ์น์ฌ์ดํธ๋ ์ฌ์ฉ์์ ๋ง์กฑ๋๋ฅผ ๋์ด๊ณ ์ฐธ์ฌ๋๋ฅผ ์ฆ๊ฐ์ํค๋ฉฐ ์ ํ์จ์ ๊ฐ์ ํฉ๋๋ค.
CSS Preload ๊ตฌํ ๋ฐฉ๋ฒ
CSS Preload ๊ตฌํ์ ๊ฐ๋จํฉ๋๋ค. HTML ๋ฌธ์์ <head>
์ ๋ค์ ์์ฑ์ ๊ฐ์ง <link>
์์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค:
rel="preload"
: ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํด์ผ ํจ์ ์ง์ ํฉ๋๋ค.href="[CSS ํ์ผ์ URL]"
: ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ค๋ CSS ํ์ผ์ URL์ ๋๋ค.as="style"
: ๋ฆฌ์์ค๊ฐ ์คํ์ผ์ํธ์์ ๋ํ๋ ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค์ ์ฐ์ ์์๋ฅผ ์ ์ ํ๊ฒ ์ง์ ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.onload="this.onload=null;this.rel='stylesheet'"
: ์ด ์์ฑ์ ์ค์ํ ์ถ๊ฐ ์ฌํญ์ ๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ก๋๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ CSS๋ฅผ ์ ์ฉํฉ๋๋ค.onload=null
๋ก ์ค์ ํ๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ๋ก๋ ํrel
์์ฑ์ดstylesheet
์ผ๋ก ์ ํ๋ฉ๋๋ค.onerror="this.onerror=null;this.rel='stylesheet'"
(์ ํ ์ฌํญ): ์ด๋ Preload ๊ณผ์ ์ค ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. Preload๊ฐ ์คํจํ๋๋ผ๋ CSS๋ฅผ ์ ์ฉํฉ๋๋ค(์๋ง๋ ๋์ฒด ๋ฉ์ปค๋์ฆ์ ํตํด ๊ฒ์๋จ).
๋ค์์ ์์์ ๋๋ค:
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'" onerror="this.onerror=null;this.rel='stylesheet'">
์ค์ ๊ณ ๋ ค์ฌํญ:
- ๋ฐฐ์น: ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ ์ ์๋๋ก
<link rel="preload">
ํ๊ทธ๋ฅผ HTML ๋ฌธ์์<head>
์ ๋ฐฐ์นํ์ธ์. as
์์ฑ: ํญ์as
์์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ง์ ํ์ธ์(์: CSS์ ๊ฒฝ์ฐas="style"
, JavaScript์ ๊ฒฝ์ฐas="script"
, ํฐํธ์ ๊ฒฝ์ฐas="font"
). ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค์ ์ฐ์ ์์๋ฅผ ์ ํ๊ณ ์ฌ๋ฐ๋ฅธ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ ์ ์ ์ฉํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.as
์์ฑ์ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์์ฒญ ์ฐ์ ์์ ์ง์ ๋ฅ๋ ฅ์ด ์ฌ๊ฐํ๊ฒ ์ ํ๋ฉ๋๋ค.- ๋ฏธ๋์ด ์์ฑ:
media
์์ฑ์ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ด ์ฟผ๋ฆฌ(์:media="screen and (max-width: 768px)"
)์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก CSS ํ์ผ์ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค. - HTTP/2 ์๋ฒ ํธ์: HTTP/2๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๋ ๋์ ์ฑ๋ฅ์ ์ํด Preload ๋์ ์๋ฒ ํธ์ ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณด์ธ์. ์๋ฒ ํธ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๊ธฐ๋ ์ ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ ์ ๋ณด๋ผ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ๋ฌ๋ Preload๋ ์ฐ์ ์์ ์ง์ ๋ฐ ์บ์ฑ์ ๋ํ ๋ ๋ง์ ์ ์ด๊ถ์ ์ ๊ณตํฉ๋๋ค.
CSS Preload๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
CSS Preload์ ์ด์ ์ ๊ทน๋ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- ํต์ฌ CSS ์๋ณ: ์น์ฌ์ดํธ์ ์ด๊ธฐ ๋ทฐํฌํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์์ ์ธ CSS ํ์ผ์ด ๋ฌด์์ธ์ง ํ์ ํ์ธ์. ์ด ํ์ผ๋ค์ด ๋ฐ๋ก Preload ์ฐ์ ์์๋ฅผ ๋์ด์ผ ํ ํ์ผ๋ค์ ๋๋ค. Chrome DevTools์ Coverage์ ๊ฐ์ ๋๊ตฌ๋ ์ฌ์ฉํ์ง ์๋ CSS๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ฃผ์ด ํต์ฌ ๊ฒฝ๋ก์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค.
- ํ์ํ ๊ฒ๋ง ๋ฏธ๋ฆฌ ๋ก๋ํ๊ธฐ: ๋๋ฌด ๋ง์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ฉด ๋์ญํญ ๋ญ๋น์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๊ธฐ ๋ ๋๋ง์ ํ์ํ ํต์ฌ CSS์ ์ง์คํ์ธ์.
as
์์ฑ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๊ธฐ: ์์ ์ธ๊ธํ๋ฏ์ด,as
์์ฑ์ ๋ธ๋ผ์ฐ์ ์ฐ์ ์์ ์ง์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํญ์ ์ฌ๋ฐ๋ฅธ ๊ฐ(CSS์ ๊ฒฝ์ฐstyle
)์ ์ง์ ํ์ธ์.- ์ฒ ์ ํ ํ ์คํธ: CSS Preload๋ฅผ ๊ตฌํํ ํ์๋ Google PageSpeed Insights, WebPageTest ๋๋ Lighthouse์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํ ์คํธํ์ธ์. FCP, LCP, ์ํธ์์ฉ๊น์ง์ ์๊ฐ(TTI)๊ณผ ๊ฐ์ ํต์ฌ ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ Preload๊ฐ ์ค์ ๋ก ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์๋์ง ํ์ธํ์ธ์.
- ์ ๊ธฐ์ ์ธ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ์น ์ฑ๋ฅ์ ์ง์์ ์ธ ๊ณผ์ ์ ๋๋ค. ์น์ฌ์ดํธ ์ฑ๋ฅ์ ๊ณ์ ๋ชจ๋ํฐ๋งํ๊ณ ํ์์ ๋ฐ๋ผ Preload ์ ๋ต์ ์กฐ์ ํ์ธ์.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๊ณ ๋ ค: CSS Preload๋ ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๋๋ฆฌ ์ง์๋์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Preload๋ฅผ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ๊ธฐ๋ฅ ๊ฐ์ง๋ ํด๋ฆฌํ์ ์ฌ์ฉํ์ฌ ๋์ฒด ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋ค๋ฅธ ์ต์ ํ ๊ธฐ์ ๊ณผ ๊ฒฐํฉํ๊ธฐ: CSS Preload๋ CSS ์ถ์, ์ด๋ฏธ์ง ์์ถ, ๋ธ๋ผ์ฐ์ ์บ์ฑ ํ์ฉ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ์ ๊ณผ ๊ฒฐํฉ๋ ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
ํผํด์ผ ํ ํํ ์ค์
CSS Preload๋ฅผ ๊ตฌํํ ๋ ํผํด์ผ ํ ๋ช ๊ฐ์ง ํํ ์ค์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
as
์์ฑ ์์ด๋ฒ๋ฆฌ๊ธฐ: ์ด๋ ์ฑ๋ฅ์ ์ฌ๊ฐํ๊ฒ ์ ํ์ํฌ ์ ์๋ ์น๋ช ์ ์ธ ์ค์์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ฏธ๋ฆฌ ๋ก๋๋๋ ๋ฆฌ์์ค์ ์ ํ์ ์ดํดํ๊ธฐ ์ํดas
์์ฑ์ด ํ์ํฉ๋๋ค.- ํต์ฌ์ด ์๋ CSS ๋ฏธ๋ฆฌ ๋ก๋ํ๊ธฐ: ๋๋ฌด ๋ง์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๊ฒ์ ๋น์์ฐ์ ์ผ ์ ์์ต๋๋ค. ์ด๊ธฐ ๋ ๋๋ง์ ํ์์ ์ธ CSS์ ์ง์คํ์ธ์.
- ์๋ชป๋ ํ์ผ ๊ฒฝ๋ก:
href
์์ฑ์ด CSS ํ์ผ์ ์ฌ๋ฐ๋ฅธ URL์ ๊ฐ๋ฆฌํค๊ณ ์๋์ง ํ์ธํ์ธ์. - ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฌด์ํ๊ธฐ: ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์์ ๊ตฌํ์ ํ ์คํธํ์ฌ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ธ์. ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ์๋ฃจ์ ์ ์ ๊ณตํ์ธ์.
- ์ฑ๋ฅ ํ ์คํธํ์ง ์๊ธฐ: Preload๋ฅผ ๊ตฌํํ ํ์๋ ํญ์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํ ์คํธํ์ฌ ์ค์ ๋ก ์ฑ๋ฅ์ด ๊ฐ์ ๋๊ณ ์๋์ง ํ์ธํ์ธ์.
์ค์ ์ฌ๋ก ๋ฐ ์ผ์ด์ค ์คํฐ๋
์๋ง์ ์น์ฌ์ดํธ๋ค์ด ์ฑ๋ฅ ํฅ์์ ์ํด CSS Preload๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ์ต๋๋ค. ๋ช ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ: ๋ง์ ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋ ์ ํ ํ์ด์ง๊ฐ ๋น ๋ฅด๊ฒ ๋ก๋๋๋๋ก ํต์ฌ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ์ ํ์จ์ ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ํ ์จ๋ผ์ธ ์๋งค์ ์ฒด๋ ์ ํ ์ด๋ฏธ์ง, ์ค๋ช ๋ฐ ๊ฐ๊ฒฉ ์ ๋ณด๋ฅผ ํ์ํ๋ ๋ฐ ํ์ํ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ์ ์์ต๋๋ค.
- ๋ด์ค ์น์ฌ์ดํธ: ๋ด์ค ์น์ฌ์ดํธ๋ ํนํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋ ๋น ๋ฅธ ๋ ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ข ์ข CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค. ๊ธฐ์ฌ ๋ ์ด์์๊ณผ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ํ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ฉด ์ฒด๊ฐ ๋ก๋ฉ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋ธ๋ก๊ทธ ๋ฐ ์ฝํ ์ธ ์ค์ฌ ์น์ฌ์ดํธ: ๋ธ๋ก๊ทธ๋ ์ฝํ ์ธ ๊ฐ ๋ง์ ์น์ฌ์ดํธ๋ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ๊ฐ๋ ์ฑ๊ณผ ์ฐธ์ฌ๋๋ฅผ ๋์ด๋ ๋ฐ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. ์ฃผ์ ์ฝํ ์ธ ์์ญ๊ณผ ๋ด๋น๊ฒ์ด์ ์์๋ฅผ ์ํ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ฉด ๋ ๋ถ๋๋ฌ์ด ๋ธ๋ผ์ฐ์ง ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ผ์ด์ค ์คํฐ๋ ์์:
ํ ๊ธ๋ก๋ฒ ์ฌํ ์์ฝ ์น์ฌ์ดํธ๋ ํํ์ด์ง์ ์ฃผ์ ๋๋ฉ ํ์ด์ง์ CSS Preload๋ฅผ ๊ตฌํํ์ต๋๋ค. ๊ฒ์ ์์, ์ถ์ฒ ์ฌํ์ง, ํ๋ก๋ชจ์ ๋ฐฐ๋ ๋ ๋๋ง์ ํ์ํ ํต์ฌ CSS๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํจ์ผ๋ก์จ ์ต์ด ์ฝํ ์ธ ํ ํ์ธํธ(FCP)๋ฅผ 15%, ์ต๋ ์ฝํ ์ธ ํ ํ์ธํธ(LCP)๋ฅผ 10% ๋จ์ถํ ์ ์์์ต๋๋ค. ์ด๋ ๋์ ๋๋ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ๊ณผ ์ฝ๊ฐ์ ์ ํ์จ ์ฆ๊ฐ๋ก ์ด์ด์ก์ต๋๋ค.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
Webpack ๋ฐ ๊ธฐํ ๋น๋ ๋๊ตฌ ์ฌ์ฉ
Webpack, Parcel ๋๋ Rollup๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํต์ฌ CSS ํ์ผ์ ๋ํ <link rel="preload">
ํ๊ทธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ตฌํ ๊ณผ์ ์ ๊ฐ์ํํ๊ณ Preload ์ ๋ต์ด ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๋๋ก ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Webpack์์๋ preload-webpack-plugin
์ด๋ webpack-plugin-preload
์ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์์กด์ฑ์ ๊ธฐ๋ฐ์ผ๋ก Preload ๋งํฌ๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
๋์ Preloading
๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ํธ์์ฉ์ด๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ CSS ํ์ผ์ ๋์ ์ผ๋ก ๋ฏธ๋ฆฌ ๋ก๋ํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑํ ์ ์์ต๋๋ค:
function preloadCSS(url) {
const link = document.createElement('link');
link.rel = 'preload';
link.href = url;
link.as = 'style';
link.onload = function() { this.onload=null; this.rel='stylesheet' };
document.head.appendChild(link);
}
// ์์: ๋ฒํผ์ ํด๋ฆญํ์ ๋ CSS ํ์ผ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ธฐ
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
preloadCSS('dynamic-styles.css');
});
์ด๋ฅผ ํตํด ํน์ CSS ํ์ผ์ ํ์ํ ๋๋ง ๋ก๋ํ์ฌ ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํ ์ ์์ต๋๋ค.
์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ณผ CSS Preload
Preload๊ฐ ํต์ฌ ๋ฆฌ์์ค๋ฅผ ๋ ์ผ์ฐ ๋ก๋ํ๋ ๋ฐ ์ค์ ์ ๋๋ ๋ฐ๋ฉด, ์ง์ฐ ๋ก๋ฉ์ ์ค์ํ์ง ์์ ๋ฆฌ์์ค์ ๋ก๋๋ฅผ ํ์ํ ๋๊น์ง ์ง์ฐ์ํต๋๋ค. ์ด ๋ ๊ธฐ์ ์ ๊ฒฐํฉํ๋ฉด ๋งค์ฐ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค. ์ด๊ธฐ ๋ทฐํฌํธ์ ํ์ํ CSS์๋ Preload๋ฅผ ์ฌ์ฉํ๊ณ , ์ฆ์ ๋ณด์ด์ง ์๋ ํ์ด์ง์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ CSS๋ ์ง์ฐ ๋ก๋ฉํ ์ ์์ต๋๋ค.
CSS Preload vs. Preconnect vs. Prefetch
CSS Preload, Preconnect, Prefetch์ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- Preload: ํ์ฌ ํ์ด์ง์์ ์ฌ์ฉ๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด๊ธฐ ๋ ๋๋ง์ ํ์์ ์ด๊ฑฐ๋ ๊ณง ์ฌ์ฉ๋ ๋ฆฌ์์ค๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
- Preconnect: ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ ์๋ฒ์์ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. ์ด๋ ์ฐ๊ฒฐ ๊ณผ์ ์ ๊ฐ์ํํ์ฌ ์ง์ฐ ์๊ฐ์ ์ค์ ๋๋ค. ์์ฒด์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ์ง๋ ์์ต๋๋ค.
- Prefetch: ๋ค์ ํ์ด์ง์์ ์ฌ์ฉ๋ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ํ์ฌ ํ์ด์ง์๋ ํ์ํ์ง ์์ง๋ง ๋ค์ ํ์ด์ง์์ ํ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฆฌ์์ค๋ฅผ ์ํ ๊ฒ์ ๋๋ค. Preload๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ์ต๋๋ค.
ํน์ ๋ฆฌ์์ค์ ๊ทธ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ๊ธฐ์ ์ ์ ํํ์ธ์.
CSS Preload์ ๋ฏธ๋
CSS Preload๋ ๋์์์ด ์งํํ๋ ๊ธฐ์ ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฅ์ ๊ณ์ํด์ ๊ฐ์ ํจ์ ๋ฐ๋ผ, Preload ๊ธฐ๋ฅ์ ๋ํ ์ถ๊ฐ์ ์ธ ํฅ์์ ๊ธฐ๋ํ ์ ์์ต๋๋ค. Preloading์ ๋์ฑ ํจ๊ณผ์ ์ผ๋ก ๋ง๋๋ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ธฐ์ ์ด ๋ฑ์ฅํ ์ ์์ต๋๋ค.
์ต์ ์น ์ฑ๋ฅ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ์ข์ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ, ์ฑ๋ฅ ๋๊ตฌ ๊ฐ์ , ์ปค๋ฎค๋ํฐ ํ ๋ก ์ ์ฃผ์ํ์ฌ ์๋์ ์์๋๊ฐ์ธ์.
๊ฒฐ๋ก
CSS Preload๋ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋ ๋น ๋ฅด๊ณ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ํต์ฌ CSS ํ์ผ์ ๋ฏธ๋ฆฌ ๋ก๋ํจ์ผ๋ก์จ ๋ ๋๋ง ์ฐจ๋จ ์๊ฐ์ ์ค์ด๊ณ , ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๋ฉฐ, ๋ ๋งค๋ ฅ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. CSS Preload ๊ตฌํ์ ๋น๊ต์ ๊ฐ๋จํ์ง๋ง ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ ํํ ์ค์๋ฅผ ํผํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํต์ฌ CSS๋ฅผ ์ ์คํ๊ฒ ์๋ณํ๊ณ , as
์์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉฐ, ๊ตฌํ์ ์ฒ ์ ํ ํ
์คํธํจ์ผ๋ก์จ ์น์ฌ์ดํธ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. Preload ๋งํฌ ์์ฑ์ ์๋ํํ๊ธฐ ์ํด Webpack๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ์์ง ๋ง์ธ์. ๋ํ, ๊ฐ๋ฅํ ๋์์ผ๋ก HTTP/2 ์๋ฒ ํธ์๋ฅผ ๊ธฐ์ตํ๊ณ , Preload, Preconnect, Prefetch ๊ฐ์ ์ฐจ์ด์ ์ ์ดํดํ์ธ์.
์ ๋ฐ์ ์ธ ์น ์ฑ๋ฅ ์ต์ ํ ์ ๋ต์ ์ผํ์ผ๋ก CSS Preload๋ฅผ ์ฑํํ์ฌ ์น์ฌ์ดํธ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ์ธ์!