Published:

Last Updated:

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ  ์„ฑ๋Šฅ๊ณผ Intersection Observer๋ฅผ ํ™œ์šฉํ•œ Core Web Vitals ํ–ฅ์ƒํ•˜๊ธฐ

Intersection Observer ์ ์šฉ: ์• ๋“œ์„ผ์Šค ๋“ฑ ๋ฌด๊ฑฐ์šด ๋ธ”๋กœ๊ทธ ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ ์ง€์—ฐ ๋กœ๋”ฉํ•˜์—ฌ ์›น ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  SEO ์ ์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.โ€‹


์›น ํ™˜๊ฒฝ์—์„œSEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)์˜ ํ•ต์‹ฌ์€ ์ด์ œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์ด๋ฉฐ, ๊ตฌ๊ธ€์€ ์ด๋ฅผ Core Web Vitals(์ฝ”์–ด ์›น ๋ฐ”์ดํƒˆ)์ด๋ผ๋Š” ๊ณต์‹ ์ง€ํ‘œ๋ฅผ ํ†ตํ•ด ์—„๊ฒฉํ•˜๊ฒŒ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. Core Web Vitals๋Š” ์›น์‚ฌ์ดํŠธ์˜ ๋กœ๋”ฉ ์†๋„, ์ƒํ˜ธ์ž‘์šฉ ๋ฐ˜์‘์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ์  ์•ˆ์ •์„ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ํ•ต์‹ฌ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ๊ด‘๊ณ ๋‚˜ ๋ฌด๊ฑฐ์šด ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ(์˜ˆ: Google AdSense, ๋ฐ์ด๋ธ”, ํƒ€๋ถˆ๋ผ ๋“ฑ ๋„ค์ดํ‹ฐ๋ธŒ ๊ด‘๊ณ  ์†”๋ฃจ์…˜)๋ฅผ ํŽ˜์ด์ง€์— ํ†ตํ•ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋Š” ์›น์‚ฌ์ดํŠธ์˜ ์ƒ์กด๊ณผ ๊ฒ€์ƒ‰ ์—”์ง„ ์ˆœ์œ„๋ฅผ ์œ„ํ˜‘ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์š”์†Œ์ž…๋‹ˆ๋‹ค.


๋งŽ์€ ํผ๋ธ”๋ฆฌ์…”๋“ค์ด "์ˆ˜์ตํ™” = ์†๋„ ์ €ํ•˜"๋ผ๋Š” ์ž˜๋ชป๋œ ๋“ฑ์‹์„ ๋ฐ›์•„๋“ค์ด์ง€๋งŒ,์ด๋Š” Intersection Observer(์ธํ„ฐ์„น์…˜ ์˜ต์ €๋ฒ„) API๋ผ๋Š” ์ตœ์‹  ์›น ํ‘œ์ค€ ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ๊ทน๋ณตํ•˜๊ณ  ์˜คํžˆ๋ ค ์„ฑ๋Šฅ๊ณผ ์ˆ˜์ต์„ ๋™์‹œ์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ LCP(Largest Contentful Paint), CLS(Cumulative Layout Shift), ๊ทธ๋ฆฌ๊ณ  INP(Interaction to Next Paint) ๊ฐ™์€ ํ•ต์‹ฌ ์ง€ํ‘œ๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ด‘๊ณ  ๋…ธ์ถœ ํšจ์œจ, ์ฆ‰ Viewability๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading)์˜ ๊ธฐ์ˆ ์  ์›๋ฆฌ์™€ ์• ๋“œ์„ผ์Šค ๊ด‘๊ณ (AdSense ์ฝ”๋“œ)์— ์ ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ , ๊ณ ์„ฑ๋Šฅ ์›น ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

1. ๋ธ”๋กœ๊ทธ ๊ด‘๊ณ ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ๊ทผ๋ณธ ์›์ธ์€ ๋ฌด์—‡์ผ๊ฐ€์š”?

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

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ  ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

ํŠนํžˆ์ดˆ๊ธฐ ๊ด‘๊ณ  ๋กœ๋”ฉ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ, ์ด๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋”์šฑ ์•…ํ™”์‹œํ‚ค๋Š” ์š”์ธ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ์ค‘ ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋ฆฌ์Šค๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ํฐ ๋ถ€๋‹ด์„ ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” CPU ๋ถ€ํ•˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์— ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฐฉ์‹์€ ๋””๋ฐ”์šด์‹ฑ(Debouncing)์ด๋‚˜ ์Šค๋กœํ‹€๋ง(Throttling) ๊ฐ™์€ ๋ณด์กฐ์ ์ธ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ์ ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ๋ณต์žก๋„๋Š” ์ฆ๊ฐ€ํ•˜๊ณ , ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—๋Š” ์—ฌ์ „ํžˆ ์ƒ๋‹นํ•œ ๋ถ€๋‹ด์„ ๋‚จ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. Intersection Observer๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜๋™์ ์ธ ์ตœ์ ํ™” ์ž‘์—… ์ž์ฒด๋ฅผ ํ•„์š” ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

1. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(Main Thread)์˜ ๊ณผ๋ถ€ํ•˜์™€ INP ์•…ํ™”

window.onscroll ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กคํ•  ๋•Œ๋งˆ๋‹ค ๋งค์šฐ ๋†’์€ ๋นˆ๋„(์ดˆ๋‹น ์ˆ˜์‹ญ ํšŒ)๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝœ๋ฐฑ ๋‚ด์—์„œ ๋ทฐํฌํŠธ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด element.getBoundingClientRect() ๊ฐ™์€ ๋™๊ธฐ์ ์ธ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ๊ฐ„, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ•์ œ๋กœ ์ ์œ ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” DOM ์กฐ์ž‘, ์Šคํƒ€์ผ ๊ณ„์‚ฐ, ๋ ˆ์ด์•„์›ƒ ์ฒ˜๋ฆฌ, ํŽ˜์ธํŒ…, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(ํด๋ฆญ, ํ‚ค ์ž…๋ ฅ) ๋“ฑ ๋ชจ๋“  ์ค‘์š”ํ•œ ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋Š” ๋‹จ์ผ ์ž‘์—… ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ ๋กœ ์ธํ•œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๊ณผ๋ถ€ํ™”๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ๋А๋ ค์ง€๋Š” ๋ชจ์Šต

๋นˆ๋ฒˆํ•œ ์Šคํฌ๋กค ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์žฅ์‹œ๊ฐ„ ์ ์œ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋ธ”๋กœ๊ทธ ์‘๋‹ต ์†๋„๊ฐ€ ์ €ํ•˜๋˜๊ณ  FID(First Input Delay)๋Š” ๋ฌผ๋ก , INP(Interaction to Next Paint) ์ ์ˆ˜๊ฐ€ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ธ”๋กœํ‚น์€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ์žฅ๊ธฐ ์‹คํ–‰ ์ž‘์—…(Long Task)์„ ์œ ๋ฐœํ•˜๋ฉฐ, ์ด๋Š” INP์˜ ๊ถŒ์žฅ ์ž„๊ณ„๊ฐ’(300ms)์„ ์‰ฝ๊ฒŒ ์ดˆ๊ณผํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

INP๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

INP๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉ(ํด๋ฆญ, ํƒญ, ํ‚ค ์ž…๋ ฅ ๋“ฑ)ํ–ˆ์„ ๋•Œ๋ถ€ํ„ฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค์Œ ์‹œ๊ฐ์  ์—…๋ฐ์ดํŠธ(Next Paint)๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์…˜์„ ์ทจํ•œ ํ›„ ๋ˆˆ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ๊นŒ์ง€์˜์ฒด๊ฐ ์‘๋‹ต ์†๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ์ง€ํ‘œ์ด๋ฉฐ, ์›น์‚ฌ์ดํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋ฐ˜์‘์„ฑ ํ’ˆ์งˆ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. 50ms ์ด์ƒ์˜ ์‘๋‹ต ์ง€์—ฐ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆ์พŒ๊ฐ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ์ตœ์ ํ™” IMP ์ธก์ • ํ™”๋ฉด

2. Layout Thrashing์˜ ์•…์ˆœํ™˜๊ณผ ๊ฐ•์ œ Re-Flow

๋” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋Š” ๋ ˆ์ด์•„์›ƒ ์Šค๋ž˜์‹ฑ(Layout Thrashing)์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์š”์†Œ์˜ ์œ„์น˜๋‚˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด DOM์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜จ ์งํ›„(์˜ˆ: offsetTop, clientWidth, getComputedStyle()), ๊ณง๋ฐ”๋กœ DOM์„ ๋ณ€๊ฒฝ(์˜ˆ: height = '200px', style.top = '10px')ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ตœ์‹  ๊ฐ’์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ๋™๊ธฐ์ ์ธ ์žฌ๊ณ„์‚ฐ(Re-Flow/Re-Layout)์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Layout Thrashing์ด๋ž€, JavaScript๊ฐ€ ํ™”๋ฉด ์ •๋ณด๋ฅผ ์ฝ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ €์— ๊ฐ•์ œ ๋ ˆ์ด์•„์›ƒ ์žฌ๊ณ„์‚ฐ์„ ์ผ์œผํ‚ค๋Š” ๋น„ํšจ์œจ์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ '์ฝ๊ธฐ-์“ฐ๊ธฐ-์ฝ๊ธฐ-์“ฐ๊ธฐ'์˜ ๋ฐ˜๋ณต์ ์ธ ๋น„ํšจ์œจ์€ ๋ ˆ์ด์•„์›ƒ ์žฌ๊ณ„์‚ฐ ๋น„์šฉ์„ ์ˆ˜์‹ญ ๋ฐฐ ์ด์ƒ ์ฆ๊ฐ€์‹œ์ผœ CPU ๋ถ€ํ•˜๋ฅผ ๊ทน๋„๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ,ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๋Š” '๋ž™(Lag)' ํ˜„์ƒ์„ ์œ ๋ฐœํ•˜๋Š” ์ง์ ‘์ ์ธ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ์Šคํฌ๋กค ๊ธฐ๋ฐ˜ ๊ฐ์ง€ ๋กœ์ง์€ ์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต์„ ์ž์ฃผ ์œ ๋ฐœํ•˜์ง€๋งŒ, Intersection Observer๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ œ๊ฑฐํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ ๋กœ ์ธํ•œ ๋ ˆ์ด์•„์›ƒ ํ”๋“œ๋ฆผ์œผ๋กœ ํด๋ฆญ์„ ์ž˜๋ชปํ•˜๋Š” ํ™”๋ฉด

2. Intersection Observer์˜ ๊ธฐ์ˆ ์  ์šฐ์œ„: ๋น„๋™๊ธฐ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ ์ตœ์ ํ™”

Intersection Observer API๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์‹œ๋Œ€์  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ์„ ์–ธ์ (Declarative)์ด๋ฉฐ ๋น„๋™๊ธฐ์ ์ธ(Asynchronous) ๊ด€์ฐฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด API๋Š” ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ”๊พผ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

1. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ์˜ ์ž‘์—… ๋ถ„๋ฆฌ ๋ฐ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์˜ ์žฅ์ 

IO๋Š” ์š”์†Œ์˜ ๊ต์ฐจ(Intersection) ์—ฌ๋ถ€๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ, ์ฆ‰ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ฐ–์˜ ํ•ฉ์„ฑ ์Šค๋ ˆ๋“œ(Compositor Thread)์™€ ๊ฐ™์€ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ  ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํฌ๋กค ์ด๋ฒคํŠธ์™€๋Š” ๋‹ฌ๋ฆฌ, IO์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๊ด€์ฐฐ ๋Œ€์ƒ ์š”์†Œ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•œ ์ž„๊ณ„๊ฐ’(threshold)์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ๋งŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์ด ๋น„๋™๊ธฐ์  ํŠน์„ฑ ๋•๋ถ„์— ์ฝœ๋ฐฑ ์‹คํ–‰์ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ž‘์—…(์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋“ฑ)์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋ถ€ํ•˜๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ž…๋‹ˆ๋‹ค.

์ด๋Š” ํŠนํžˆ First Input Delay(FID)์™€ INP ์ง€ํ‘œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. IO๋Š” ํŠนํžˆ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ ๋ณด์ด์ง€ ์•Š๋Š” ์ˆ˜๋งŽ์€ ๊ด‘๊ณ  ์Šฌ๋กฏ์ด๋‚˜ ์ด๋ฏธ์ง€์˜ ๋กœ๋”ฉ์„ ์ง€์—ฐ์‹œ์ผœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์„ฑ๋Šฅ(FCP, LCP) ๊ฐœ์„ ์— ๊ฒฐ์ •์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ค„์ด๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ ๋ฅผ ๋น„๋™๊ธฐ ๋กœ๋“œ๋ฅผ ํ™œ์šฉํ•ด ๋ฉ€ํ‹ฐ ์ž‘์—…์„ ํ•˜๋Š” ๋ชจ์Šต

2. rootMargin์„ ํ†ตํ•œ ์Šค๋งˆํŠธํ•œ ์‚ฌ์ „ ๋กœ๋”ฉ๊ณผ Viewability ํ™•๋ณด ์ „๋žต

IO๋Š” ๊ด€์ฐฐ ์˜์—ญ(Root) ์™ธ์— rootMargin์ด๋ผ๋Š” ์ค‘์š”ํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ทฐํฌํŠธ์— ์‹ค์ œ๋กœ ๋“ค์–ด์˜ค๊ธฐ ์ง์ „ (์˜ˆ: ๋ทฐํฌํŠธ ํ•˜๋‹จ์œผ๋กœ๋ถ€ํ„ฐ 250px ์œ„)์— ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๋”ฉ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์Šค๋งˆํŠธํ•œ ์‚ฌ์ „ ๋กœ๋”ฉ(Pre-loading)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๋””์ง€ํ„ธ ๊ด‘๊ณ ์—์„œ Viewability๋Š” ๊ด‘๊ณ ์˜ ์ค‘์š”ํ•œ ์ˆ˜์ต ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

Viewability (๋ทฐ์–ด๋นŒ๋ฆฌํ‹ฐ)๋ž€?

๊ด‘๊ณ ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ธก์ •ํ•˜๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ด‘๊ณ  ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ ์ด์ƒ์˜, ๊ด‘๊ณ ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์˜€๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ํ•ต์‹ฌ ์„ฑ๊ณผ ์ง€ํ‘œ(KPI)์ž…๋‹ˆ๋‹ค. IAB(Interactive Advertising Bureau)์˜ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•ด์•ผ ๊ด‘๊ณ  ๋…ธ์ถœ๋กœ ์ธ์ •๋˜์–ด ์ˆ˜์ต์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ด‘๊ณ  ์œ ํ˜• ์ตœ์†Œ ๊ธฐ์ค€
๋””์Šคํ”Œ๋ ˆ์ด ๊ด‘๊ณ  (๋ฐฐ๋„ˆ ๊ด‘๊ณ ) ๊ด‘๊ณ  ํ”ฝ์…€์˜ 50% ์ด์ƒ์ด ์ตœ์†Œ 1์ดˆ ์ด์ƒ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์˜ ๋ทฐํฌ(Viewport) ๋‚ด์— ๋…ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋™์˜์ƒ ๊ด‘๊ณ  (Video Ads) ๊ด‘๊ณ  ํ”ฝ์…€์˜ 50% ์ด์ƒ์ด ์ตœ์†Œ 2์ดˆ ์ด์ƒ ์—ฐ์†์ ์œผ๋กœ ๋ทฐํฌํŠธ ๋‚ด์— ๋…ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

rootMargin: '250px 0px 250px 0px'์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กค ํ–ˆ์„ ๋•Œ ๊ด‘๊ณ ๊ฐ€ ์ด๋ฏธ ๋กœ๋”ฉ๋˜์–ด ํ‘œ์‹œ๋˜๋ฏ€๋กœ, ์ง€์—ฐ ๋กœ๋”ฉ์œผ๋กœ ์ธํ•œ ๋นˆ ๊ณต๊ฐ„ ๋…ธ์ถœ(UX ์ €ํ•˜) ์—†์ด ๊ด‘๊ณ  ๋…ธ์ถœ ํšจ์œจ(Viewability)์„ ๋†’์ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์กฐ์ •ํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ ์ˆ˜์ต ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Core Web Vitals ์ตœ์ ํ™”์— ๋ฏธ์น˜๋Š” ์ง์ ‘์ ์ธ ์˜ํ–ฅ

Intersection Observer ๊ธฐ๋ฐ˜์˜ ์ง€์—ฐ ๋กœ๋”ฉ์€ LCP(Largest Contentful Paint)์™€ CLS(Cumulative Layout Shift)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ Core Web Vitals ์ง€ํ‘œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

1. LCP(Largest Contentful Paint) ๊ฐœ์„ ์„ ํ†ตํ•œ SEO ์ ์ˆ˜ ํ™•๋ณด

LCP๋Š” ๋ทฐํฌํŠธ ๋‚ด์—์„œ ๊ฐ€์žฅ ํฐ ์ฝ˜ํ…์ธ  ์š”์†Œ(ํ…์ŠคํŠธ ๋ธ”๋ก, ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ํฌ์Šคํ„ฐ ๋“ฑ)๊ฐ€ ๋กœ๋“œ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. LCP๋Š” ํŽ˜์ด์ง€์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์ฒด๊ฐ์„ ์ธก์ •ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

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

์ด๋Š” ์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ  Total Blocking Time (TBT)์„ ์ค„์—ฌ LCP๋ฅผ 2.5์ดˆ ์ด๋‚ด๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๊ฒฐ์ •์ ์ธ ๊ธฐ์—ฌ๋ฅผ ํ•˜๋ฉฐ, ์ด๋Š” ๊ณง SEO ์ ์ˆ˜ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

Core Web Vitals ๋ธ”๋กœ๊ทธ ์„ฑ๋Šฅ ์ธก์ • ์ˆ˜์น˜

2. CLS(Cumulative Layout Shift) ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„ ํ™•๋ณด ์˜๋ฌด์™€ CSS ์ „๋žต

CLS๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ ˆ์ด์•„์›ƒ ์ด๋™๋Ÿ‰์„ ์ธก์ •ํ•˜๋ฉฐ, ๊ด‘๊ณ ๊ฐ€ ๋Šฆ๊ฒŒ ๋กœ๋“œ๋˜๋ฉด์„œ ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ๊ฒƒ์ด CLS ์•…ํ™”์˜ ์ฃผ์š” ์›์ธ์ž…๋‹ˆ๋‹ค. Intersection Observer๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, ๊ด‘๊ณ  ์˜์—ญ์ด ๋กœ๋“œ๋  ๋•Œ ๋ฐ€๋ฆผ์ด ๋ฐœ์ƒํ•˜๋ฉด CLS ์ ์ˆ˜๊ฐ€ ๊ธ‰๋“ฑํ•ฉ๋‹ˆ๋‹ค. CLS ๋ชฉํ‘œ๋Š” 0.1 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ด‘๊ณ  ์ปจํ…Œ์ด๋„ˆ(Placeholder)์— CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด‘๊ณ ๊ฐ€ ๋“ค์–ด์˜ฌ ์ตœ์†Œ ๊ณต๊ฐ„(min-height, min-width)์„ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด‘๊ณ  ํฌ๊ธฐ๋ฅผ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Aspect Ratio Box ๊ธฐ๋ฒ•(์˜ˆ: padding-bottom์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์œจ ์œ ์ง€)์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ์ž…๋‹ˆ๋‹ค.

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

4. ์• ๋“œ์„ผ์Šค ๊ด‘๊ณ ์˜ ์„ธ ๊ตฌ์„ฑ ์š”์†Œ์™€ IO ์ ์šฉ ๋ฐฉ๋ฒ•

Google AdSense ๊ด‘๊ณ  ์ฝ”๋“œ๋Š” ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, Intersection Observer๋ฅผ ์ ์šฉํ•˜๋Š” ์ „๋žต์€ 3๋ฒˆ ์ตœ์ข… ์‹คํ–‰ ๋ช…๋ น์„ ์‚ฌ์šฉ์ž ๋ทฐํฌํŠธ ์ง„์ž… ์‹œ์ ์œผ๋กœ ์ง€์—ฐ ์ œ์–ด(Lazy Execution)ํ•˜๋Š” ๊ฒƒ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ „๋žต์„ ํ†ตํ•ด ๊ด‘๊ณ  ์š”์ฒญ ๋ฐ ๋ Œ๋”๋ง์„ ์ตœ์ ์˜ ์‹œ์ ์— ์ˆ˜ํ–‰ํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์„ฑ๋Šฅ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

1. 1๋‹จ๊ณ„: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๋™๊ธฐ ๋กœ๋“œ (`adsbygoogle.js`)

์• ์Šค์„ผ์Šค ๊ด‘๊ณ  ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๋™๊ธฐ ๋กœ๋“œ ์ฝ”๋“œ

์ด ์ฝ”๋“œ๋Š” head ๋˜๋Š” body ์ƒ๋‹จ์— ๋ฐ˜๋“œ์‹œ async ์†์„ฑ๊ณผ ํ•จ๊ป˜ ์‚ฝ์ž…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. async ์†์„ฑ์€ ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ ์ž์ฒด๋Š” HTML ํŒŒ์‹ฑ์„ ๋ธ”๋กœํ‚นํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ, ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด‘๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด๋กœ๋“œ ์ง€์—ฐ์ดLCP์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

2. 2๋‹จ๊ณ„: ๊ด‘๊ณ  ์ปจํ…Œ์ด๋„ˆ (Placeholder) ์ •์˜ ๋ฐ CLS ๋ฐฉ์ง€

์• ๋“œ์„ผ์Šค ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๊ด‘๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ฝ”๋“œ

์• ๋“œ์„ผ์Šค(AdSense)๊ด‘๊ณ ์˜ TML ์š”์†Œ๋Š” ๊ด‘๊ณ  ์Šฌ๋กฏ ID๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ Intersection Observer์˜ ๊ด€์ฐฐ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. SEO ๊ด€์ ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ์š”์†Œ ๋˜๋Š” ์ด๋ฅผ ๊ฐ์‹ธ๋Š” ๋ถ€๋ชจ์—๊ณต๊ฐ„ ํ™•๋ณด CSS๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. min-height๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ด‘๊ณ ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด CLS ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์„ ๊ฒฐ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

3. 3๋‹จ๊ณ„: IO๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ข… ์‹คํ–‰ ๋ช…๋ น ์ง€์—ฐ ๋ฐ Offloading

๋ธ”๋กœ๊ทธ ๊ด‘๊ณ  ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ์ง€์—ฐ ๋กœ๋“œ ์ฝ”๋“œ

์›๋ž˜ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋˜ ๊ด‘๊ณ  ์š”์ฒญ ๋ฐ ๋ Œ๋”๋ง ๋ช…๋ น์ธ (adsbygoogle = window.adsbygoogle || []).push({});๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์บก์Аํ™”ํ•˜๊ณ ,Intersection Observer์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ์—„๊ฒฉํžˆ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌด๊ฑฐ์šด ์‹คํ–‰ ์ž‘์—…์„ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์ง€์—ฐ(Offloading)์‹œ์ผœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ดˆ๊ธฐ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™” ๊ด‘๊ณ ๊ฐ€ SEO์— ์•…์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฃผ์š” ์›์ธ

์ž๋™ํ™” ๊ด‘๊ณ ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŽ˜์ด์ง€์— ๋™์ ์œผ๋กœ ๊ด‘๊ณ ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠนํžˆ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ Core Web Vitals ์ง€ํ‘œ๋ฅผ ์•…ํ™”์‹œํ‚ฌ ์œ„ํ—˜์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ์ตœ์ ์˜ ๊ด‘๊ณ  ์œ„์น˜๋ฅผ ์„ ์ •ํ•ด์„œ ์ˆ˜๋™์œผ๋กœ ๊ด‘๊ณ ๋ฅผ ์ ์šฉํ•˜์„ธ์š”!

1.CLS (Cumulative Layout Shift) ์•…ํ™”

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

2. LCP (Largest Contentful Paint) ์ง€์—ฐ

  • ๋ฌธ์ œ: ์ž๋™ ๊ด‘๊ณ ๋ฅผ ๋กœ๋“œํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ(adsbygoogle.js ๋“ฑ)๋Š” ๋ฌด๊ฑฐ์šด ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ดˆ๊ธฐ ๋กœ๋”ฉ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์œ ํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ์ฝ˜ํ…์ธ (LCP)์ธ ๋ฉ”์ธ ์ด๋ฏธ์ง€๋‚˜ ํ…์ŠคํŠธ์˜ ๋ Œ๋”๋ง์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ: ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„(์ฒด๊ฐ ์†๋„)๊ฐ€ ๋А๋ ค์ ธ LCP ์ ์ˆ˜๊ฐ€ ๊ถŒ์žฅ ๊ธฐ์ค€(2.5์ดˆ ์ด๋‚ด)์„ ์ดˆ๊ณผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์— ๊ด‘๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ฒฝ์Ÿํ•˜๋ฉด์„œ ์ค‘์š”ํ•œ ์ฝ˜ํ…์ธ ์˜ ํ‘œ์‹œ๊ฐ€ ์ง€์—ฐ๋ฉ๋‹ˆ๋‹ค.

3. INP (Interaction to Next Paint) ์•…ํ™”

  • ๋ฌธ์ œ: ์ž๋™ ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ณต์žกํ•œ ๊ด‘๊ณ  ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์žฅ์‹œ๊ฐ„ ์ ์œ ํ•˜์—ฌ ๋ธ”๋กœํ‚น์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜๋ฐฑ ๋ฐ€๋ฆฌ์ดˆ์— ๋‹ฌํ•˜๋Š” ๊ธด ์ž‘์—…(Long Task)์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ: ์ด ์‹œ์ ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ์Šคํฌ๋กคํ•˜๋Š” ๋“ฑ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์‹œ๋„ํ•˜๋ฉด, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ด‘๊ณ  ์ฒ˜๋ฆฌ์— ๋ฐ”๋น  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์ง€์—ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด INP ์ ์ˆ˜๊ฐ€ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค.

๊ณ ์„ฑ๋Šฅ ์›น์‚ฌ์ดํŠธ์˜ ํ•„์ˆ˜์ ์ธ ๊ด‘๊ณ  ์ตœ์ ํ™” ์•„ํ‚คํ…์ฒ˜

Intersection Observer ๊ธฐ๋ฐ˜์˜ ์ง€์—ฐ ๋กœ๋”ฉ์€ ๋” ์ด์ƒ ์„ ํƒ์  ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ, Core Web Vitals๋ฅผ ์ถฉ์กฑํ•˜๊ณ  SEO ๊ฒฝ์Ÿ์—์„œ ์šฐ์œ„๋ฅผ ์ ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๊ธฐ์ˆ  ์Šคํƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ์‚ฌ์šฉ์ž ์‹œ์ ์— ๋งž์ถฐ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ง€์—ฐ์‹œ์ผœ LCP์™€ INP๋ฅผ ๋‹จ์ถ•ํ•˜๊ณ , ๊ณต๊ฐ„ ํ™•๋ณด CSS์™€์˜ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด CLS๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐฉ์–ดํ•ฉ๋‹ˆ๋‹ค.

์ด ์ตœ์ ํ™”๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€ ์†๋„ ๋ฌธ์ œ์™€ SEO ํŒจ๋„ํ‹ฐ ๊ฑฑ์ • ์—†์ด, ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์ตœ์ƒ์˜ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ณ  ๊ด‘๊ณ  ์ˆ˜์ต์„ ์˜ฌ๋ฆด์ˆ˜ ์žˆ๋Š” ์„ฑ๊ณต์ ์ธ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.


Q1. ์Šคํฌ๋กค ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ๋กœ๋”ฉ ๋ฐฉ์‹์ด ์™œ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ๊นŒ์š”?

์Šคํฌ๋กค ์ด๋ฒคํŠธ๋Š” ์ดˆ๋‹น ์ˆ˜์‹ญ ํšŒ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋•Œ๋งˆ๋‹ค DOM ์œ„์น˜ ๊ณ„์‚ฐ๊ณผ ๋ ˆ์ด์•„์›ƒ ์žฌ๊ณ„์‚ฐ์ด ๋™๊ธฐ์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์žฅ์‹œ๊ฐ„ ์ ์œ ํ•ด INP์™€ FID๋ฅผ ์•…ํ™”์‹œํ‚ค๋ฉฐ, ๊ด‘๊ณ  ๋กœ๋”ฉ ์‹œ ๋ฒ„๋ฒ…์ž„ ํ˜„์ƒ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

Q2. Intersection Observer๋Š” ๊ธฐ์กด ๋ฐฉ์‹๊ณผ ์–ด๋–ค ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

Intersection Observer๋Š” ๋ทฐํฌํŠธ ์ง„์ž… ์—ฌ๋ถ€๋ฅผ ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ ๋ ˆ๋ฒจ์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ์ง€ํ•˜๋ฉฐ, ์Šคํฌ๋กค ์ด๋ฒคํŠธ ์—†์ด๋„ ์š”์†Œ๋“ค์˜ ๋…ธ์ถœ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ€ํ•˜๋ฅผ ํฌ๊ฒŒ ์ค„์—ฌ Core Web Vitals๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

Q3. Layout Thrashing์€ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ์™œ ์œ„ํ—˜ํ•œ๊ฐ€์š”?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™”๋ฉด ์ •๋ณด๋ฅผ ์ฝ๊ธฐ,์“ฐ๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฐ•์ œ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์žฌ๊ณ„์‚ฐํ•˜๋ฉด์„œ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๊ธ‰์ฆํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์Šคํฌ๋กค ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ๊ฐ์ง€ ์ฝ”๋“œ์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋ฉฐ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Q4. ๊ด‘๊ณ  Viewability๋ฅผ ์˜ฌ๋ฆฌ๋ฉด์„œ๋„ LCP,INP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜์š”?

Intersection Observer์˜ rootMargin ์˜ต์…˜์„ ํ™œ์šฉํ•˜๋ฉด, ๋ทฐํฌํŠธ ์ง„์ž… ์ง์ „์— ๊ด‘๊ณ ๋ฅผ ์‚ฌ์ „ ๋กœ๋”ฉํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„ ๋…ธ์ถœ ์—†์ด ๊ด‘๊ณ ๊ฐ€ ์ฆ‰์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ด‘๊ณ  ์ˆ˜์ต ์ง€ํ‘œ(Viewability)๋ฅผ ๋†’์ด๋ฉด์„œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.

๊ตฌ๊ธ€ ์• ๋“œ์„ผ์Šค ๊ด‘๊ณ  ์ ์šฉ ์ฝ”๋“œ ์˜ˆ์ œ

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž์‹ ์˜ ์• ๋“œ์„ผ์Šค ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ด์„œ HTML ์ฝ”๋“œ /BODY ๋ถ€๋ถ„์œ„์— ๋„ฃ์–ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.