๋ฐœํ–‰์ผ:

์ˆ˜์ •์ผ:

๊นœ๋ฐ•์ด๋Š” ํ˜„์ƒ (FOUC์™€ FOUT ํ˜„์ƒ) ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ ์ฒ˜์Œ ํ™”๋ฉด ๋ฌธ์ œ ํŒŒํ—ค์น˜๊ธฐ

๋ธ”๋กœ๊ทธ ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊นœ๋ฐ•์ž„ ํ˜„์ƒ(FOUC/FOUT)์„ ๋ถ„์„ํ•˜๊ณ , Critical CSS ์ธ๋ผ์ธ, ์›น ํฐํŠธ preload, ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๊ณผ CLS(Cumulative Layout Shift)๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

์›น ์„ฑ๋Šฅ ์ง€ํ‘œ์ธ Core Web Vitals ์ค‘ CLS์— ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” FOUC์™€ FOUT ํ˜„์ƒ์˜ ์›๋ฆฌ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค..


FOUC์™€ FOUT ์ •์˜: ๋ถˆ์•ˆ์ •ํ•œ ์›น ๊ฒฝํ—˜์˜ ์›์ธ

๋ธ”๋กœ๊ทธ ์Šคํ‚จ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์ดํŠธ๋ฅผ ์ œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ• ๋•Œ ๋ฐ˜๋“œ์‹œ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” FOUC(Flash of Unstyled Content)์™€ FOUT(Flash of Unstyled Text) ํ˜„์ƒ์€, CSS, Critical CSS, ์›น ํฐํŠธ ๋“ฑ ์Šคํƒ€์ผ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ DOM๊ณผ CSSOM์ด ์™„์ „ํžˆ ๊ตฌ์ถ•๋˜๊ธฐ ์ „์— ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ์ ์šฉ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

FOUC์™€ FOUT ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ด๋กœ ์ธํ•ด ์ดˆ๊ธฐ ํ™”๋ฉด ๊นœ๋ฐ•์ž„, ์Šคํƒ€์ผ ์—†๋Š” ์ฝ˜ํ…์ธ  ๋…ธ์ถœ, ์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ด๋™(Layout Shift)๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ๋ถˆ์•ˆ์ • ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚˜๋ฉฐ, ํŠนํžˆ ๋ธ”๋กœ๊ทธ ์ฒซ ํ™”๋ฉด ๋กœ๋”ฉ ์‹œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์งง์€ ์ˆœ๊ฐ„์˜ ๊นœ๋นก์ž„์ด๋‚˜ ๋ ˆ์ด์•„์›ƒ ์ด๋™์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ๋А๋ฆฌ๊ณ  ๋ฏธ์™„์„ฑ์ด๋ผ๋Š” ์ธ์ƒ์„ ์ฃผ์–ด ์ฆ‰๊ฐ์ ์ธ ์ดํƒˆ(Bounce)์„ ์œ ๋ฐœํ•˜๋ฉฐ SEO์— ์•…์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

1 FOUC (Flash of Unstyled Content) - ์Šคํƒ€์ผ ์—†๋Š” ์ฝ˜ํ…์ธ  ๊นœ๋นก์ž„

FOUC(Flash of Unstyled Content)๋Š” ๋ธ”๋กœ๊ทธ ์ฒซ ๋กœ๋”ฉ ์‹œ HTML ์ฝ˜ํ…์ธ ๊ฐ€ ์™ธ๋ถ€ CSS ๋˜๋Š” Critical CSS ์ ์šฉ ์ „ ์ž ์‹œ ์Šคํƒ€์ผ ์—†์ด ํ‘œ์‹œ๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํŒŒ์‹ฑ์„ ํ†ตํ•ด DOM(Document Object Model)์„ ๋จผ์ € ์ƒ์„ฑํ•˜์ง€๋งŒ, CSSOM(CSS Object Model) ๊ตฌ์ถ•์ด ์ง€์—ฐ๋˜๋ฉด ๋ Œ๋”๋ง ์ฐจ๋‹จ ๋ฆฌ์†Œ์Šค์ธ CSS ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํƒ€์ผ ์—†๋Š” ์›์‹œ ์ฝ˜ํ…์ธ ๋ฅผ ๋จผ์ € ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„(Flash of Content), ์ดˆ๊ธฐ ๋กœ๋”ฉ ๊นœ๋ฐ•์ž„๊ณผ ๊ฐ™์€ ์‹œ๊ฐ์  ๋ถˆ์•ˆ์ •์„ฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ด๋Š” ํ˜„์ƒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

2 FOUT (Flash of Unstyled Text) - ์›น ํฐํŠธ ๋กœ๋“œ ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ํ…์ŠคํŠธ ๊ต์ฒด

FOUT(Flash of Unstyled Text)๋Š” ์›น ํฐํŠธ ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๊ธฐ ์ „, ํ…์ŠคํŠธ๊ฐ€ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ํฐํŠธ(Fallback Font)๋กœ ์ž ์‹œ ํ‘œ์‹œ๋˜์—ˆ๋‹ค๊ฐ€ ์›น ํฐํŠธ๋กœ ๊ต์ฒด๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์›น ํฐํŠธ ๋กœ๋“œ ์ง€์—ฐ์€ ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„(Flash of Text), ํฐํŠธ ๊นœ๋นก์ž„, ์ดˆ๊ธฐ ๋กœ๋”ฉ ๊ธ€๊ผด ๋ณ€๊ฒฝ ๋“ฑ ์‹œ๊ฐ์  ๋ถˆ์•ˆ์ •์„ฑ์„ ์œ ๋ฐœํ•˜๋ฉฐ, ํฐํŠธ ๊ต์ฒด ์‹œ ๊ธ€๊ผด ํฌ๊ธฐ, ์ž๊ฐ„(Letter Spacing), ํ–‰๊ฐ„(Line Height) ๋“ฑ์ด ๋ณ€ํ•˜๋ฉด์„œ ์ฃผ๋ณ€ ์š”์†Œ๊นŒ์ง€ ํ•จ๊ป˜ ์ด๋™ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ(Layout Shift)๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.


๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์›๋ฆฌ ์ดํ•ด: FOUC/FOUT ๋ฐœ์ƒ์˜ ๊ธฐ์ˆ ์  ๊ทผ์›

FOUC์™€ FOUT์„ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋Š” Critical Rendering Path (CRP) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ํ™”๋ฉด์— ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

๋‹จ๊ณ„ ์„ค๋ช… FOUC/FOUT ์˜ํ–ฅ ์ง€์ 
DOM ํŒŒ์‹ฑ HTML ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ๋“ค์—ฌ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑ. ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘์ ์ธ ์˜ํ–ฅ ์—†์Œ
CSS ํŒŒ์‹ฑ ์™ธ๋ถ€ CSS ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ํ•ด์„ํ•˜์—ฌ CSSOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑ. ํŽ˜์ด์ง€์˜ ์Šคํƒ€์ผ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. CSSOM ๊ตฌ์ถ• ์ง€์—ฐ ์‹œ FOUC ๋ฐœ์ƒ (๋ Œ๋”๋ง ์ฐจ๋‹จ)
๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ์ •๋ณด ๋ถˆ์ถฉ๋ถ„ ์‹œ FOUC ๋…ธ์ถœ
๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ๋ Œ๋” ํŠธ๋ฆฌ์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. (Reflow) ํฐํŠธ๋‚˜ ์Šคํƒ€์ผ์˜ ๋’ค๋Šฆ์€ ์ ์šฉ์œผ๋กœ ์ธํ•ด ๋ ˆ์ด์•„์›ƒ ์ด๋™(CLS)์ด ๋ฐœ์ƒํ•˜๋ฉฐ FOUT์ด ๋‘๋“œ๋Ÿฌ์ง
ํŽ˜์ธํŒ… ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์š”์†Œ๋ฅผ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ์ƒํƒœ๋กœ ํ‘œ์‹œ

๊ธฐ์ˆ ์  ์ถ”๋ก : CSSOM์ด ์™„์„ฑ๋˜์–ด์•ผ ๋ Œ๋” ํŠธ๋ฆฌ๊ฐ€ ๊ตฌ์„ฑ๋˜๊ณ  ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CSS๋Š” ๋ Œ๋”๋ง ์ฐจ๋‹จ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. FOUT์€ ํฐํŠธ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋Šฆ๊ฒŒ ๋„์ฐฉํ–ˆ์„ ๋•Œ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ๋‹จ๊ณ„๋ฅผ ๋‹ค์‹œ ๊ฐ•์ œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฆฌํ”Œ๋กœ์šฐ(Reflow)๋ฅผ ์œ ๋ฐœํ•˜๊ณ  CLS ์ ์ˆ˜๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.


FOUC ๊ทน๋ณต ์ „๋žต: CSS ๋กœ๋“œ ์ตœ์ ํ™” (FCP ๊ฐœ์„ )

FOUC(Flash of Unstyled Content)๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์ „๋žต์€ ๋ Œ๋”๋ง ์ฐจ๋‹จ ์‹œ๊ฐ„(Render-Blocking Time)์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์ดˆ๊ธฐ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ํ•„์ˆ˜ CSS(Critical CSS)๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด First Contentful Paint(FCP)๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„ ์—†์ด ์•ˆ์ •์ ์ธ ์ฝ˜ํ…์ธ  ํ‘œ์‹œ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1 CSS๋ฅผ head ํƒœ๊ทธ ์ตœ์ƒ๋‹จ์— ๋ฐฐ์น˜ (์šฐ์„ ์ˆœ์œ„ ํ™•๋ณด)

CSS ํŒŒ์ผ์„ HTML ๋ฌธ์„œ์˜ head ํƒœ๊ทธ ๋‚ด์—, ๋‹ค๋ฅธ meta ํƒœ๊ทธ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ์•ž์ชฝ ์ˆœ์„œ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ํŒŒ์ผ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ฏ€๋กœ, CSS๋ฅผ ๋จผ์ € ๋ฐœ๊ฒฌํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ CSSOM ๊ตฌ์ถ• ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

head
meta charset="UTF-8"
!-- CSS ํŒŒ์ผ์„ ์ตœ๋Œ€ํ•œ ์•ž์ชฝ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค --
link rel="stylesheet" href="main.css"
title์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”/title
/head

2 ํฌ๋ฆฌํ‹ฐ์ปฌ CSS (Critical CSS) ์ธ๋ผ์ธ ์‚ฝ์ž… ๋ฐ ๋น„๋™๊ธฐ ๋กœ๋“œ

์ดˆ๊ธฐ ๋ทฐํฌํŠธ(Above-the-Fold) ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ CSS(Critical CSS)๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ style ํƒœ๊ทธ๋กœ head ์•ˆ์— ์ธ๋ผ์ธ์œผ๋กœ ์ง์ ‘ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด HTTP ์š”์ฒญ ์—†์ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฆ‰์‹œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด FOUC ๋ฐฉ์ง€, ์›น ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„ ์ตœ์†Œํ™”, First Contentful Paint(FCP) ์ตœ์ ํ™”๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ CSS ํŒŒ์ผ์€ link ํƒœ๊ทธ์— media="print" ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ , onload="this.media='all'" JavaScript ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋กœ๋“œ ์™„๋ฃŒ ํ›„ media๋ฅผ 'all'๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•จ์œผ๋กœ์จ ๋ Œ๋”๋ง ์ฐจ๋‹จ ๋ฐฉ์ง€์™€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

head
style
/* Critical CSS: ์ดˆ๊ธฐ ๋ทฐํฌํŠธ ์Šคํƒ€์ผ */
body { margin: 0; font-family: sans-serif; }
.header { background: #1a1a1a; }
/style
!-- ๋‚˜๋จธ์ง€ CSS๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜์—ฌ ๋ Œ๋”๋ง ์ฐจ๋‹จ ํ•ด์ œ --
link rel="stylesheet" href="non-critical.css" media="print" onload="this.media='all'"
/head

3 CSS ํŒŒ์ผ ์••์ถ• ๋ฐ ์ตœ์†Œํ™” (Minification & Compression)

CSS ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜์–ด CSSOM ๊ตฌ์ถ•์ด ๋นจ๋ผ์ง€๊ณ  FOUC ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.

  • Minification (์ตœ์†Œํ™”): ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ, ์ฃผ์„, ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • Compression (์••์ถ•): ์„œ๋ฒ„ ์„ค์ •(Nginx, Apache)์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” CSS ํŒŒ์ผ์— Gzip ๋˜๋Š” Brotli ์••์ถ•์„ ์ ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ „์†ก๋Ÿ‰์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • Unused CSS ์ œ๊ฑฐ: CSS ํŠธ๋ฆฌ ์‰์ดํ‚น(Tree Shaking) ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” CSS ๊ทœ์น™์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

4 Anti-FOUC ํŒจํ„ด (์ฝ˜ํ…์ธ  ์ˆจ๊ธฐ๊ธฐ)

CSS ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ค‘์š” ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง ์ง€์—ฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ์š”์†Œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ˆจ๊ธฐ๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ตœ์ƒ์œ„ HTML ์š”์†Œ์— opacity: 0 ๋˜๋Š” visibility: hidden์„ ์ ์šฉํ•˜๊ณ , CSS ๋กœ๋“œ ์™„๋ฃŒ ์‹œ์ ์— JavaScript๋กœ ํ•ด๋‹น ์Šคํƒ€์ผ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›น ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„(Flicker) ์ตœ์†Œํ™”, FOUC ๋ฐฉ์ง€, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์ €ํ•˜ ๋ฐฉ์ง€์™€ ํ•จ๊ป˜ ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ฝ˜ํ…์ธ  ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


FOUT ๊ทน๋ณต ์ „๋žต: ์›น ํฐํŠธ ๋กœ๋“œ ์ตœ์ ํ™” (CLS ๋ฐฉ์ง€)

FOUT ํ˜„์ƒ์€ ํฐํŠธ ํŒŒ์ผ ์ž์ฒด์˜ ๋กœ๋“œ ์ง€์—ฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ ˆ์ด์•„์›ƒ ์ด๋™(CLS)์˜ ์ฃผ๋ฒ”์ž…๋‹ˆ๋‹ค. ํฐํŠธ ๋กœ๋“œ ๋ฐฉ์‹์„ ์ œ์–ดํ•˜์—ฌ CLS๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1 font-display ์†์„ฑ ํ™œ์šฉ: ํฐํŠธ ๋กœ๋“œ ๋ฐฉ์‹ ์ œ์–ด

CSS์˜ @font-face ๊ทœ์น™์— font-display ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ ํฐํŠธ ๋กœ๋“œ ์ „๋žต์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์„ค๋ช… ํšจ๊ณผ ๋ฐ FOUT/FOIT ์œ ๋ฐœ ์—ฌ๋ถ€
swap ์‹œ์Šคํ…œ ํฐํŠธ(fallback)๋กœ ์ฆ‰์‹œ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ์›น ํฐํŠธ ๋กœ๋“œ ํ›„ ๊ต์ฒด(swap)ํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ํ…์ŠคํŠธ ํ‘œ์‹œ์— ์œ ๋ฆฌ. ํฐํŠธ ๊ต์ฒด ์‹œ FOUT ๋ฐœ์ƒ ๋ฐ CLS ์œ ๋ฐœ ๊ฐ€๋Šฅ.
block ์งง์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ํ…์ŠคํŠธ๋ฅผ ์ˆจ๊ธฐ๊ณ  (์•ฝ 3์ดˆ๊นŒ์ง€), ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. FOIT (Flash of Invisible Text) ๋ฐœ์ƒ ๊ฐ€๋Šฅ, ๊นœ๋นก์ž„์€ ์—†์œผ๋‚˜ ํ…์ŠคํŠธ ์ง€์—ฐ์œผ๋กœ UX ์ €ํ•˜.
fallback ๋งค์šฐ ์งง์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„(์•ฝ 100ms) ๋™์•ˆ ํ…์ŠคํŠธ ์ˆจ๊น€ ํ›„ ์‹œ์Šคํ…œ ํฐํŠธ ํ‘œ์‹œ. FOUT๊ณผ FOIT์˜ ์ค‘๊ฐ„ ์ „๋žต. ํฐํŠธ ๋กœ๋“œ๊ฐ€ ๋งค์šฐ ๋А๋ฆฐ ํ™˜๊ฒฝ์—์„œ CLS๋ฅผ ๋ฐฉ์ง€.
optional ์„ฑ๋Šฅ์„ ์ตœ์šฐ์„ ์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ํฐํŠธ ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ์šฐ์„  ์‹œ ์œ ์šฉ. ํฐํŠธ ๋กœ๋“œ๊ฐ€ ๋А๋ฆฌ๋ฉด ์•„์˜ˆ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ.

CLS ์ตœ์†Œํ™” ํŒ: font-display: swap์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, fallback ํฐํŠธ์™€ ์›น ํฐํŠธ์˜ ํฌ๊ธฐ, ์ž๊ฐ„, ํ–‰๊ฐ„์„ CSS์˜ `size-adjust`, `ascent-override` ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ๋งž์ถ”๋ฉด CLS ๋ฐœ์ƒ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2 link rel="preload" ์‚ฌ์šฉ: ํฐํŠธ ์šฐ์„  ๋‹ค์šด๋กœ๋“œ

์›น ํฐํŠธ ํŒŒ์ผ์„ link rel="preload"๋กœ ์ง€์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ๋ Œ๋”๋ง ํ•„์ˆ˜ ๋ฆฌ์†Œ์Šค(Critical Font Resource)๋กœ ์ธ์‹ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ณด๋‹ค ์šฐ์„ ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›น ํฐํŠธ ๋กœ๋”ฉ ์ง€์—ฐ ์ตœ์†Œํ™”, FOUT ๋ฐฉ์ง€, ๋ ˆ์ด์•„์›ƒ ์ด๋™(Layout Shift) ๊ฐ์†Œ์™€ ํ•จ๊ป˜ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ ํ…์ŠคํŠธ๊ฐ€ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œ๋˜์–ด ํŽ˜์ด์ง€ ๊นœ๋ฐ•์ž„(Flicker) ์—†๋Š” ์•ˆ์ •์  UX๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

head
!-- ํฐํŠธ ํŒŒ์ผ์„ CSS๋ณด๋‹ค ๋จผ์ € ๋กœ๋“œํ•˜์—ฌ FOUT ๋ฐœ์ƒ ์‹œ๊ฐ„ ์ตœ์†Œํ™” --
link rel="preload" href="/fonts/CustomFont.woff2" as="font" type="font/woff2" crossorigin
link rel="stylesheet" href="main.css"
/head

์ฃผ์˜์‚ฌํ•ญ: `crossorigin` ์†์„ฑ์€ ํฐํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ CORS(Cross-Origin Resource Sharing) ์ •์ฑ…์— ์˜ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋กœ FOUC/FOUT ๋ฐฉ์ง€

JavaScript๋Š” DOM๊ณผ CSSOM์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ฃผ๋ฏ€๋กœ ๋ Œ๋”๋ง ์ฐจ๋‹จ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋กœ๋“œ ์ˆœ์„œ์™€ ๋น„๋™๊ธฐ ์†์„ฑ์„ ํ™œ์šฉํ•˜๋ฉด FOUC์™€ FOUT ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. JavaScript ๋กœ๋“œ ์ˆœ์„œ ์ตœ์ ํ™”

JavaScript๊ฐ€ HTML ํŒŒ์‹ฑ์„ ์ฐจ๋‹จํ•˜์—ฌ ๋ Œ๋”๋ง์„ ์ง€์—ฐ์‹œํ‚ค์ง€ ์•Š๋„๋ก ๋กœ๋“œ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • script ํƒœ๊ทธ๋ฅผ body ๋์— ๋ฐฐ์น˜: HTML ํŒŒ์‹ฑ ๋ฐ CSSOM ๊ตฌ์ถ• ํ›„ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜์—ฌ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์ฐจ๋‹จ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • async ์†์„ฑ: ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ๊ฐ€ HTML ํŒŒ์‹ฑ๊ณผ ๋™์‹œ์— ์ง„ํ–‰๋˜์ง€๋งŒ, ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ ์ฆ‰์‹œ ์‹คํ–‰์„ ์œ„ํ•ด HTML ํŒŒ์‹ฑ์„ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. (์ˆœ์„œ ๋ณด์žฅ์ด ํ•„์š” ์—†๋Š” ์Šคํฌ๋ฆฝํŠธ)
  • defer ์†์„ฑ: ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ๊ฐ€ HTML ํŒŒ์‹ฑ๊ณผ ๋™์‹œ์— ์ง„ํ–‰๋˜์ง€๋งŒ, ์‹คํ–‰์€ HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ํ›„ (DOMContentLoaded ์ด๋ฒคํŠธ ์ง์ „)์— ์ˆœ์„œ ๋ณด์žฅ ํ•˜์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. (DOM ์กฐ์ž‘ ์Šคํฌ๋ฆฝํŠธ์— ์ ํ•ฉ)

2. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR) ํ™œ์šฉ: FOUC์˜ ๊ทผ๋ณธ์  ํ•ด๊ฒฐ

SSR(Server-Side Rendering)์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ด์ „(Pre-rendering)์— ์„œ๋ฒ„์—์„œ HTML์„ ๋ฏธ๋ฆฌ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ FOUC ๋ฐฉ์ง€, FOUT ์ตœ์†Œํ™”, ๋ ˆ์ด์•„์›ƒ ์ด๋™(Layout Shift) ๊ฐ์†Œ๋ฅผ ํ†ตํ•ด Core Web Vitals ์ตœ์ ํ™”์™€ ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ์›๋ฆฌ: ์„œ๋ฒ„์—์„œ CSS์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒฐํ•ฉํ•œ ์™„์ „ํ•œ HTML์„ ์ƒ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • ํšจ๊ณผ: ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ HTML์„ ๋ฐ›์œผ๋ฏ€๋กœ ๋ณ„๋„์˜ CSS ๋กœ๋“œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ FOUC๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Time to First Byte(TTFB) ๊ฐœ์„ ์„ ํ†ตํ•ด SEO ์ ์ˆ˜ ํ–ฅ์ƒ์—๋„ ํฌ๊ฒŒ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

3. UX ์ค‘์‹ฌ ๋กœ๋”ฉ ์ „๋žต: ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ์œผ๋กœ ์‹ฌ๋ฆฌ์  ์„ฑ๋Šฅ ์ตœ์ ํ™”

FOUC์™€ FOUT ํ˜„์ƒ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ตœ์ ํ™” ์ „๋žต๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ๊ฐœ์„ ์„ ์œ„ํ•œ ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ „๋žต์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ(Skeleton Loading)์€ ์ดˆ๊ธฐ ๋ทฐํฌํŠธ์—์„œ ์ฝ˜ํ…์ธ  ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ฃผ์–ด ๋ ˆ์ด์•„์›ƒ ์ด๋™(Layout Shift) ๊ฐ์†Œ, ์‹ฌ๋ฆฌ์  ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋‹จ์ถ•, Core Web Vitals ๊ฐœ์„ ์— ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค

๋กœ๋”ฉ ์œ ํ˜• ์„ค๋ช… UX ํšจ๊ณผ
์Šคํ”ผ๋„ˆ(Spinner) ํšŒ์ „ ์•„์ด์ฝ˜์œผ๋กœ ๋กœ๋“œ ์ค‘์ž„์„ ํ‘œ์‹œ. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ธฐ๋‹ค๋ฆผ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ. ๋กœ๋”ฉ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ถˆํ™•์‹ค์„ฑ์€ ์—ฌ์ „ํ•จ.
์ง„ํ–‰๋ฐ”(Progress Bar) ๋กœ๋“œ ์ง„ํ–‰๋ฅ ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ. ์˜ˆ์ƒ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ œ๊ณต, ๋ถˆํ™•์‹ค์„ฑ ๊ฐ์†Œ.
์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ ์‹ค์ œ ์ฝ˜ํ…์ธ ์˜ ๊ตฌ์กฐ์™€ ๋ ˆ์ด์•„์›ƒ ๋ผˆ๋Œ€๋ฅผ ํšŒ์ƒ‰ ์ƒ์ž๋กœ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์คŒ. ๋ ˆ์ด์•„์›ƒ ์ด๋™ ์ตœ์†Œํ™” (CLS ๋ฐฉ์ง€). ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋  ์œ„์น˜๋ฅผ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ฃผ์–ด ์ธ์ง€ ๋ถ€ํ•˜ ๊ฐ์†Œ ๋ฐ ์‹ฌ๋ฆฌ์  ๋กœ๋”ฉ ์‹œ๊ฐ„ ๋‹จ์ถ•.

FAQ: FOUC์™€ FOUT ์ตœ์ ํ™” ์‹ค์ „

Q1. FOUC์™€ FOUT์˜ ์ฐจ์ด๋ฅผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด?

FOUC๋Š” CSS ์ ์šฉ ์ „ ์ฝ˜ํ…์ธ  ๊นœ๋นก์ž„, FOUT์€ ์›น ํฐํŠธ ๋กœ๋“œ ์ „ ํ…์ŠคํŠธ ํฐํŠธ ๊ต์ฒด๋กœ ์ธํ•œ ๊นœ๋นก์ž„์ด๋ฉฐ, ๋‘˜ ๋‹ค ๋ ˆ์ด์•„์›ƒ ์ด๋™(CLS)์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

Q2. Critical CSS๋ฅผ ์ธ๋ผ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ดˆ๊ธฐ ๋ทฐํฌํŠธ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ์ตœ์†Œ CSS๋ฅผ ์ธ๋ผ์ธํ•˜๋ฉด, ๋ณ„๋„์˜ HTTP ์š”์ฒญ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ”๋กœ CSSOM์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด FCP๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ  FOUC๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q3. ์›น ํฐํŠธ์—์„œ font-display swap ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ํšจ๊ณผ๊ฐ€ ์žˆ๋‚˜์š”?

ํ…์ŠคํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜์—ฌ FOIT๋กœ ์ธํ•œ ๊ณต๋ฐฑ์„ ์—†์• ์ง€๋งŒ, ์›น ํฐํŠธ ๋กœ๋“œ ํ›„ ๊ต์ฒด ์‹œ ํฐํŠธ์˜ ํฌ๊ธฐ ์ฐจ์ด๋กœ ์ธํ•ด FOUT์ด ๋ฐœ์ƒํ•˜๊ณ  CLS๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UX์™€ ์„ฑ๋Šฅ์„ ๊ท ํ˜• ์žˆ๊ฒŒ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Q4. ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ์ด FOUC์™€ FOUT ์ตœ์ ํ™”์— ๋„์›€๋˜๋Š” ์ด์œ ๋Š”?

์ฝ˜ํ…์ธ ์˜ ์ตœ์ข… ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•œ ๋ผˆ๋Œ€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜์–ด๋„ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ๋ ˆ์ด์•„์›ƒ ์ด๋™(CLS)์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ๊ฐ์  ๋ถˆ์•ˆ์ •์„ฑ ์—†์ด ๋กœ๋”ฉ์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


FOUC์™€ FOUT์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์‹œ๊ฐ์  ํ’ˆ์งˆ ๋ฌธ์ œ๋ฅผ ๋„˜์–ด์„œ Core Web Vitals์˜ CLS๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ํ•ต์‹ฌ ์ „๋žต์ž…๋‹ˆ๋‹ค. CLS๋ฅผ 0.1 ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ , FCP (First Contentful Paint) ๋ฐ LCP (Largest Contentful Paint) ์ง€ํ‘œ ๊ฐœ์„ ์—๋„ ์ง์ ‘์ ์ธ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Critical CSS ์ธ๋ผ์ธ, `font-display` ์„ค์ •, `preload` ํ™œ์šฉ, JavaScript ๋น„๋™๊ธฐ ๋กœ๋“œ, SSR ํ™œ์šฉ, ๊ทธ๋ฆฌ๊ณ  ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ๋‹ค๊ฐ์ ์ธ ์ „๋žต์„ ์ข…ํ•ฉ์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋Š” ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ดํƒˆ๋ฅ ์„ ์ค„์ด๋ฉฐ, ๊ถ๊ทน์ ์œผ๋กœ ์›น์‚ฌ์ดํŠธ์˜ ์ „๋ฌธ์„ฑ๊ณผ ์ „ํ™˜์œจ์„ ๋†’์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜๋ฅผ ,๋†’์ด๋Š” ํ•ต์‹ฌ ์š”์†Œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

'SEO > seo-tips' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ธ”๋กœ๊ทธ ์ตœ์ ํ™” ์œ„์ ฏ ์„ค์น˜ ๋ฐฉ๋ฒ•: ์‹ค์‹œ๊ฐ„ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ ๊ฐœ์„ ํ•˜๊ธฐ!  (1) 2025.12.04
๋ฌธ์„œ์— ์ฃผ์š” ๋žœ๋“œ๋งˆํฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ ์ตœ์ ํ™”, ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฒ•  (0) 2025.12.02
๋งํฌ ํ…์ŠคํŠธ! ํด๋ฆญ ์ „์— ๋ฏธ๋ฆฌ ์•Œ๋ ค์ฃผ๋Š” ๋งํฌ ์ •๋ณด, ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?  (0) 2025.12.01
๊ฐœ๋ฐฉํ˜• ๋ธ”๋กœ๊ทธ ์ƒ์กด ์ „๋žต: SEO, ์ฝ”๋”ฉ, HTML ์ƒ์กด ํ•„์ˆ˜ ํŒ  (1) 2025.11.28
๋ธ”๋กœ๊ทธ ๊ด‘๊ณ  ์ตœ์ ํ™” ๋ฐฉ๋ฒ• Intersection Observer ์‚ฌ์šฉ๋ฐฉ๋ฒ•  (0) 2025.11.27
๋ฐ์ด๋ธ” ๊ด‘๊ณ  SEO ๋ฌธ์ œ: LCPยทINP ๊ฐœ์„ ํ•˜๋Š” ์ตœ๊ฐ• ์ง€์—ฐ ๋กœ๋”ฉ ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2025.11.20
์ €ํ’ˆ์งˆ ๋ธ”๋กœ๊ทธ ๋ฐฉ์ง€ ๋ฐฉ๋ฒ•! ํ•˜๋“œ์ฝ”๋”ฉ ์›๋ณธ ์ถœ์ฒ˜ ํ‘œ์‹œ ๋ฐฉ๋ฒ•  (0) 2025.11.16