ํฐํธ ์ต์ ํ๋ก ์น์ฌ์ดํธ ์ฑ๋ฅ ๊ฐ์ ํ๊ธฐ: LCP์ CLS ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๊ฒ์์์ง ๋ ธ์ถ ๋ฐฉ๋ฒ
ํฐํธ ์ต์ ํ๋ฅผ ํตํด ์น์ฌ์ดํธ์ LCP (์ต๋ ์ฝํ ์ธ ๋ ๋๋ง ์๊ฐ)์ CLS (๋์ ๋ ์ด์์ ๋ณ๊ฒฝ) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ฒ์์์ง ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. WOFF2 ์ ์ฉ, ์ธ๋ผ์ธ CSS ๋ก๋ฉ, `font-display` ์ค์ ๋ฑ ๊ตฌ์ฒด์ ์ธ ์ต์ ํ ํ์ ํ์ธํ์ธ์.
ํฐํธ ๋ก๋ฉ ์๋์ ๋ ์ด์์ ์์ ์ฑ: LCP ๋ฐ CLS ๋ฌธ์ ๋ถ์
ํฐํธ ์ต์ ํ๋ ํ์ด์ง ๋ก๋ฉ ์๋์ ๋ ์ด์์์ ๋ณ๊ฒฝ์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ํ ์์์ ๋๋ค. ํฐํธ๊ฐ ํ์ด์ง์ ๋ฆ๊ฒ ๋ก๋๋๋ฉด ํ ์คํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ์ง์ฐ์ด ๋ฐ์ํ๋ฉฐ, ๊ทธ๋ก ์ธํด ์ต๋ ์ฝํ ์ธ ๋ ๋๋ง ์๊ฐ(LCP)๊ณผ ๋์ ๋ ์ด์์ ๋ณ๊ฒฝ(CLS)์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ด๋ ๊ตฌ๊ธ์ ํต์ฌ ์น ๋ฐ์ดํ(Core Web Vitals) ์ ์๋ฅผ ๋ฎ์ถ๋ ์ฃผ์ ์์ธ์ด ๋ฉ๋๋ค.
๊ฒ์์์ง ์ต์ ํ ์ค์์ ํฐํธ ์ต์ ํ ๋ฐฉ๋ฒ์ ์น ์ฑ๋ฅ ๊ฐ์ ์ ํ์์ ์ธ ์์์ ๋๋ค. ํฐํธ๋ฅผ ์ต์ ํ์์ผ ์ข ๋ ๋น ๋ฅด๊ฒ ๋ก๋ฉ๋๊ฒ ํ๊ณ , ํฐํธ์ ๋ณ๊ฒฝ์ผ๋ก ๋ฐ์ํ๋ ๋ ์ด์์ ๋ณ๊ฒฝ ๋ถ๋ถ์ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ด LCP์ CLS ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํต์ฌ์ ๋๋ค.
ํฐํธ ๋ก๋ฉ ์๋ ์ต์ ํ๋ฅผ ์ํ 5๊ฐ์ง ๊ธฐ์ ์ ํ
ํฐํธ๋ฅผ ์ต์ ํํด์ ๊ฒ์์์ง ์ต์ ํ๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ฉฐ, ์ด๊ธฐ ๋ก๋ฉ ๋จ๊ณ์์ ํฐํธ ํ์ผ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๋ค์์ ํฐํธ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๋ ํต์ฌ ๊ธฐ์ ์ ๋๋ค.
1. ์ธ๋ผ์ธ CSS๋ก ์ด๊ธฐ ๋ก๋ฉ ๊ฐ์ (LCP ์ต์ ํ)
ํฐํธ๋ฅผ ์ต๋ํ ๋น ๋ฅด๊ฒ ๋ก๋ฉ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ํฐํธ๋ฅผ ์ค์ ํ ์ธ๋ถ CSS๋ฅผ ์ธ๋ผ์ธ(HTML)์ ํฌํจ์์ผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํฐํธ์ ๋ก๋ฉ ์๋๋ฅผ ์ข ๋ ๋น ๋ฅด๊ฒ ์งํํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ CSS๋ฅผ ๋ด๋ถ HTML ์ฝ๋์ ํฌํจ์์ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ธ๋ถ ํ์ผ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ํฐํธ๋ฅผ ์ธ์ํ๋๋ก ์ต์ ํํฉ๋๋ค. ์ด๋ LCP ์ง์ฐ์ ์ค์ด๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.
โ ์์
style
@font-face {
font-family: 'Noto Sans KR';
font-style: normal;
src: url(ํฐํธ ๊ฒฝ๋ก/NotoSans-Regular.woff2) format('woff2');
unicode-range: U+AC00-D7AF, U+0030-0039, U+0041-005A, U+0061-007A, U+0020-007E;
}
html {
font-family:'Noto Sans KR', sans-serif;
}
/style
2. ์ธ๋ถ ํฐํธ ์ฌ์ดํธ๋ฅผ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ (Preconnect ์ฌ์ฉ)
ํฐํธ ์ต์ ํ ๋ฐฉ๋ฒ ์ค์์ ์ธ๋ถ์์ ํฐํธ๋ฅผ ๋ก๋ฉ์ํค๋ ๊ฒฝ์ฐ ์ธ๋ถ ์ฌ์ดํธ์ ์ฃผ์๋ฅผ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ(Preconnect)ํ์ฌ ํฐํธ์ ๋ก๋์๋๋ฅผ ์ต์ ํ ํด์ค๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋น ๋๋ฉ์ธ์ ๋ํ DNS ์กฐํ, TCP ํธ๋์ ฐ์ดํฌ ๋ฐ TLS ํ์์ ๋ฏธ๋ฆฌ ์๋ฃํ์ฌ ์์ฒญ ๋๊ธฐ ์๊ฐ์ ์ค์ฌ์ค๋๋ค.
โ์์
head
link rel="preconnect" href="https://fonts.com"
/head
3. ์์ฒด ํธ์คํ ํฐํธ ๋ฐ ์์คํ ํฐํธ ์ฌ์ฉ
์์ฒด ํธ์คํ ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ(์์คํ ) ๊ธ๊ผด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ค๋ฅธ ์ฌ์ดํธ๋ฅผ ํตํด์ ํฐํธ๋ฅผ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ด ํฐํธ์ ๋ก๋ฉ์๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ํนํ ํฐํธ ํ์ผ์ ์์ฒด ์๋ฒ์ ํธ์คํ ํ๋ฉด ์ธ๋ถ CDN ์์กด์ฑ์ ์ค์ฌ ์ฑ๋ฅ ์ ์ด๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
โ์์
font-family: system-ui
4. WOFF2 ํฐํธ ์ฌ์ฉ์ผ๋ก ํ์ผ ํฌ๊ธฐ ์ต์ํ
ํฐํธ ์ต์ ํ๋ฅผ ์ํด์ ์ผ๋ฐ ํฐํธ๋ณด๋ค ์์ถ๋ฅ ์ด 30% ํฅ์๋ WOFF2 ๊ธ๊ผด์ ์ฌ์ฉํ์ฌ ํฐํธ์ ๋ค์ด๋ก๋ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. WOFF2๋ ํ์ฌ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋๋ฏ๋ก, ์ด๋ฅผ ์ต์ฐ์ ํฌ๋งท์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ด์ง ๋ก๋ฉ ์๋์ ๊ฐ์ฅ ํจ๊ณผ์ ์ ๋๋ค.
UNICOD-RANGE๋ก ํ์ํ ๋ฌธ์๋ง ์ฌ์ฉ (์๋ธ์ ํ )
ํฐํธ์ ํฌํจ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค ์ฌ์ฉํ์ง ์๊ณ ํ์ํ ํฐํธ์์ ์ ์ฉํ ๊ธ๊ผด ์ฝ๋๋ง ์ ์ฉํด์ ํฐํธ์ ๋ก๋ฉ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ํฐํธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ ์๋ธ์ ํ ๊ธฐ์ ์ ๋๋ค. ํนํ ํ๊ธ ํฐํธ๋ ํ์ผ ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ด ํ์์ ์ ๋๋ค.
โ์์
unicode-range:
U+AC00-D7AF, /* ํ๊ธ ์์ */
U+0030-0039, /* ์ซ์ 0-9 */
U+0041-005A, /* ๋๋ฌธ์ A-Z */
U+0061-007A, /* ์๋ฌธ์ a-z */
U+0020-007E; /* ๊ธฐ๋ณธ ๋ผํด ๋ฌธ์์ ๊ธฐํธ */

CLS ๋ฌธ์ ํด๊ฒฐ: ํฐํธ ๋ ๋๋ง ๋ฐ ๋ ์ด์์ ๋ณ๊ฒฝ ๋ฐฉ์ง
๋์ ๋ ์ด์์ ๋ณ๊ฒฝ(CLS)์ ํฐํธ๊ฐ ๋ก๋๋๋ฉด์ ๊ธฐ๋ณธ ํฐํธ์์ ์น ํฐํธ๋ก ๊ต์ฒด๋ ๋ ํ ์คํธ ํฌ๊ธฐ๋ ์ค ๊ฐ๊ฒฉ์ด ๋ณํ๋ ํ์(FOIT/FOUT) ๋๋ฌธ์ ์ฃผ๋ก ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ํฐํธ ๋ ๋๋ง ์ค์ (`font-display` ํ์ฉ)
๋ธ๋ผ์ฐ์ ๋ ํ์ด์ง์ ํฐํธ๊ฐ ๋ก๋๋์ง ์์ผ๋ฉด ๋ณดํต 3์ด ์ ๋ ํฐํธ๊ฐ ๋ก๋๋ ๋๊น์ง ํฐํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค. ํฐํธ๊ฐ ๋ก๋๋์ง ์์๋ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ฒํด์ ์ฌ์ฉ์๊ฐ ํฐํธ๊ฐ ๋ก๋ฉ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ ์ค์ผ ์ ์์ผ๋ฉฐ, ํฐํธ ๊ต์ฒด ๋ฐฉ์์ ์ ์ดํ์ฌ CLS๋ฅผ ์ต์ํํฉ๋๋ค.
โ์์: `font-display: swap;` /* ๊ธฐ๋ณธ ํฐํธ๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์น ํฐํธ๊ฐ ๋ก๋๋๋ฉด ๊ต์ฒด */
* auto: ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์ค์ ์ฌ์ฉ.
* block: ํฐํธ๊ฐ ๋ก๋๋ ๋๊น์ง ๋ด์ฉ ์จ๊ธฐ๊ธฐ (FOIT).
* swap: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ฉํ๋ค๊ฐ ์น ํฐํธ๋ก ๊ต์ฒด (FOUT, CLS ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์).
* fallback: ๊ธฐ๋ณธ ํฐํธ ์ฌ์ฉ, ํฐํธ ๋ก๋ ํ ๊ต์ฒด ์ ํจ.
* optional: ํฐํธ ๋ก๋๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ํฐํธ ๊ณ์ ์ฌ์ฉ (๊ฐ์ฅ ์์ ์ ).
`DISPLAY:BLOCK`์ ํฐํธ๊ฐ ๋ก๋๋๋ฉด์ ๋ฐ์ํ๋ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์ต์ํ ํ ์ ์๊ณ `DISPLAY:OPTIONAL`์ ํ์ด์ง์ ๋ก๋ฉ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์น์ฌ์ดํธ์ ์ฐ์ ์์์ ๋ง๊ฒ ์ค์ ํ์๋ฉด ๋ฉ๋๋ค.
2. ํฐํธ ๋ณ๊ฒฝ ์ ๋ ์ด์์์ ๋ณ๊ฒฝ ๋ฐฉ์ง (`font-size-adjust` ์ฌ์ฉ)
font-size-adjust๋ฅผ ์ฌ์ฉํด์ ํฐํธ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ ์ด์์์ ๋ณ๊ฒฝ์ ์ต์ํํ ์ ์์ต๋๋ค. ์ด ์์ฑ์ ์น ํฐํธ์ ๊ธฐ๋ณธ ํฐํธ ๊ฐ์ x-height ๋น์จ์ ์กฐ์ ํ์ฌ ๋ ํฐํธ์ ํฌ๊ธฐ๊ฐ ์๊ฐ์ ์ผ๋ก ์ ์ฌํ๊ฒ ๋ณด์ด๋๋ก ํฉ๋๋ค. ์ฆ, `font-size-adjust`๋ก ํฐํธ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ CLS๋ฅผ ์ค์ด๋ ๊ฒ์
๋๋ค.
โ์์
font-size-adjust: 0.5; /* x-height ๋น์จ์ 0.5๋ก ์กฐ์ */
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒ์์์ง ์ต์ ํ ์์ ์ค ํฐํธ์ ๊ด๋ จ๋ ์ต์ ํ๋ฅผ ์งํํ ์ ์์ต๋๋ค. ํฐํธ๋ ์ ์ฒด ๊ธ ํ์ด์ง์ 80% ์ด์์ ์ฐจ์งํ๋ ๊ฐ์ฅ ์ค์ํ ์์์ด๊ธฐ ๋๋ฌธ์ ํฐํธ์ ์ต์ ํ๋ฅผ ์งํํด์ ์ ์ฒด ํ์ด์ง์ ์ต์ ํ์ ๊ธ์ ์ ์ธ ํจ๊ณผ๋ฅผ ์ค ์ ์์ต๋๋ค.
Q: LCP์ CLS ๋ฌธ์ ๋ ํฐํธ ์ต์ ํ ์ธ์ ๋ ์ด๋ค ์ํฅ์ ๋ฐ๋์?
A: LCP๋ ์ด๋ฏธ์ง, ๋์์ ๋ฑ ํ์ด์ง์์ ๊ฐ์ฅ ํฐ ์์์ ๋ ๋๋ง ์๊ฐ์ ์ํฅ์ ๋ฐ์ผ๋ฉฐ, CLS๋ ํฐํธ ์ธ์๋ ํฌ๊ธฐ๊ฐ ์ง์ ๋์ง ์์ ์ด๋ฏธ์ง๋ ๊ด๊ณ ๋ฐฐ๋๊ฐ ๋ก๋๋ ๋ ๋ฐ์ํ๋ ๋ ์ด์์ ์ด๋์ ํฌ๊ฒ ์ํฅ์ ๋ฐ์ต๋๋ค.
Q: WOFF2 ํฐํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ป๊ฒ ๋๋์?
A: `@font-face` ๊ท์น์์ ์ฌ๋ฌ ํฐํธ ํฌ๋งท์ ์ ์ธํ๋ `format()` ๊ธฐ๋ฐ์ ์ฐ์ ์์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ง์ํ๋ ๊ฐ์ฅ ์ต์ ํฌ๋งท(WOFF2)์ ๋จผ์ ๋ก๋ํ๊ณ , ์ง์ํ์ง ์์ ๊ฒฝ์ฐ WOFF๋ TTF ๋ฑ ๋ค์ ํฌ๋งท์ ์์ฐจ์ ์ผ๋ก ๋ก๋ํ๊ฒ ๋ฉ๋๋ค.
Q: `font-display: swap;`์ด CLS๋ฅผ ์ ๋ฐํ ์ ์๋ค๊ณ ํ๋๋ฐ, ๋์์ ๋ฌด์์ธ๊ฐ์?
A: `swap`์ FOUT(Flash of Unstyled Text)๋ฅผ ํ์ฉํ๋ฉฐ CLS๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์์ ํ ๋์์ `font-display: optional;`์ ๋๋ค. ์ด ์ค์ ์ ์น ํฐํธ ๋ก๋๊ฐ ๋งค์ฐ ๋น ๋ฅผ ๋๋ง ์น ํฐํธ๋ฅผ ์ ์ฉํ๊ณ , ์๋๋ฉด ๊ธฐ๋ณธ ํฐํธ๋ฅผ ๊ณ์ ์ฌ์ฉํ์ฌ ํฐํธ ๊ต์ฒด๋ก ์ธํ ๋ ์ด์์ ๋ณ๊ฒฝ์ ์์ ํ ๋ฐฉ์งํฉ๋๋ค.