๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ์ต์ ํ Intersection Observer ๊ธฐ๋ฐ ๊ด๊ณ
๋ธ๋ก๊ทธ๋ฅผ ์ด์์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ Intersection Observer๋ก ๊ตฌํํ์ฌ ์น ์ฑ๋ฅ๊ณผ Core Web Vitals๋ฅผ ๊ฐ์ ํ๋ ์ค์ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด๋ฒ๊ธ์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ํตํด ๊ฒ์์ต์ ํ(LCP, CLS, FID)์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ด๊ณ , ๊ด๊ณ ์์ต์ ์งํค๋ฉด์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
1. Intersection Observer๋ก ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ๊ตฌํํด์ผ ํ๋ ์ด์
๊ด๊ณ ๋ฅผ ์ค์ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ๋ฐฉ๋ฒ(์คํฌ๋กค ์ด๋ฒคํธ ๊ธฐ๋ฐ)์ ๋น๋ฒํ ์ด๋ฒคํธ ํธ์ถ๋ก ๋ฉ์ธ ์ค๋ ๋ ์์ ์ ๋๋ฆฌ๊ณ , ์ ๋๋ฉ์ด์ ๊ณผ ๋ ๋๋ง ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ Intersection Observer๋ก ์ฒ๋ฆฌํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์์์ ๋ทฐํฌํธ ์ง์ ์ฌ๋ถ๋ฅผ ๊ด์ฐฐํ๋ฏ๋ก ๋ฉ์ธ ์ค๋ ๋ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
ํนํ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ ์คํฌ๋กค ์ฑ๋ฅ๊ณผ ์ ๋ฐ์ ์ธ ํ์ด์ง ๋ฐ์์ฑ๋ ๊ฐ์ ๋ฉ๋๋ค.
Intersection Observer๋ ์์๊ฐ ๋ทฐํฌํธ์ ์ด๋ ์ง์ ์ ๋ค์ด์ฌ ๋๋ฅผ ์ ํํ๊ฒ ๊ฐ์งํ๊ณ , ๋ฏธ๋ฆฌ ์ ์๋ ๋ง์ง(์: rootMargin: '200px 0px')์ ๋๋ฌํ๋ฉด ๊ด๊ณ ๋ฅผ ๋ก๋ํ๋๋ก ์ค๊ณํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๊ด๊ณ ๋ฅผ ๋ณด๊ธฐ ์ง์ ์๋ง ๊ด๊ณ ๋ฅผ ๋ถ๋ฌ์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ์ด์ ์ ํจ๊ณผ๋ฅผ ๋ ธ๋ฆด์ ์์ต๋๋ค.
1-1. ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ํต์ฌ ๊ตฌํ ํจํด
๊ธฐ๋ณธ์ ์ผ๋ก ๊ด๊ณ ๊ฐ ๋ ธ์ถ๋๋ ์ง์ ์ ๊ด๊ณ ์ฌ๋กฏ์ ํ๋ ์ด์คํ๋(๊ด๊ณ ๊ฐ ๋ค์ด๊ฐ ๋น์์น)๋ก ๋จ๊ฒจ๋๊ณ , ๊ด๊ณ ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ก๋ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
div id="ad-slot-1" class="ad-lazy-load" data-ad-ready="false"/div
๊ด๊ณ ๋ฅผ ๋ ธ์ถํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ชฝ์์๋ Observer ์ต์ ์ ์ค์ ํ๊ณ , ์ฝ๋ฐฑ์์ ์์๊ฐ ๊ต์ฐจํ๋ฉด ์ค์ ๊ด๊ณ ๋ก๋ฉ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค:.
๊ด๊ณ ๋ก๋ ์์ ์ ์ด, ์ค๋ณต ๋ก๋ ๋ฐฉ์ง, ํด๋ฐฑ ์ฒ๋ฆฌ ์ฉ์ด์ฑ. ์์ฝํ๋ฉด, ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ๊ด๊ณ ํธ์ถ ๋น์ฉ์ ์ค์ฌ์ฉ์ ์์ ์ ๋ง์ถฐ ์ต์ํํฉ๋๋ค.
2. ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ์ธ๋ถ ๊ตฌํ ๋ฐฉ๋ฒ (ํต์ฌ ์ฝ๋ ๊ฐ์)
๋ธ๋ก๊ทธ๋ ์ฌ์ดํธ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํต์ฌ์ observerCallback์์ entry.isIntersecting๊ฐ true์ผ ๋ loadAd๋ฅผ ํธ์ถํ๊ณ , ์ฑ๊ณต ์ observer.unobserve๋ฅผ ํธ์ถํด ์ถ๊ฐ ๊ด๊ณ ๋ก๋ ์์ ์ ์ค๋จํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ๋ฒ ๋ก๋๋ ์ฌ๋กฏ์ด ๋ฐ๋ณต ํธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ฉฐ, ์ ์ฒด ํ์ด์ง์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค.
| ํญ๋ชฉ | ์คํฌ๋กค ์ด๋ฒคํธ ๋ฐฉ์ | Intersection Observer ๋ฐฉ์ |
|---|---|---|
| ๋ฉ์ธ ์ค๋ ๋ ๋ถํ | ๋์ | ๋ฎ์ |
| ์ ํ์ฑ | ์คํฌ๋กค ๋น๋์ ์์กด | ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ๊ด์ฐฐ |
| ํด๋ฐฑ ์ฒ๋ฆฌ | ์ง์ ๊ตฌํ ํ์ | ๋น์ง์ ๋ธ๋ผ์ฐ์ ์ ๋ํ ํด๋ฐฑ ํ์ |
์๋๋ ํต์ฌ ์ต์ ๊ถ์ฅ๊ฐ์ ๋๋ค:
root์ null๋ก(๋ทฐํฌํธ), rootMargin์ '200px 0px' ๊ถ์ฅ, threshold๋ 0.01. ์ด ์ค์ ์ ์ฌ์ฉ์๊ฐ ์์๋ฅผ ๋ณด๊ธฐ ์ ์ฝ๊ฐ์ ์ฌ์ ๋ฅผ ๋๊ณ ๊ด๊ณ ๋ฅผ ๋ถ๋ฌ์ ์ด๊ธฐ LCP ์ํฅ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ฆ, ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ํตํด ์ฒซ ํ๋ฉด ๋ ๋๋ง ๋ถ๋ด์ ์ค์ด๋ฉด์ ๊ด๊ณ ์ ํ ๊ฐ๋ฅ์ฑ์ ์ฉ์ํ๊ฒ ํ๊ฒ ํฉ๋๋ค.
๋ํ, ๊ด๊ณ ๋ก๋ ํ์๋ ๋ฐ๋์ ๋ฐ์ดํฐ ํ๋๊ทธ(์: data-ad-ready)๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ํ๋ ์ด์คํ๋๋ฅผ ์ ์ ํ ์ ๊ฑฐํ๊ฑฐ๋ ๊ต์ฒดํ๋๋ก ํฉ๋๋ค. ์ด ํ์ ์ฒ๋ฆฌ๋ UI ์ ํ ์ ํด๋ฆฌํน ๊ฒฝํ(UX)์ ์ง์ ์ ์ธ ์ํฅ์ ์ค๋๋ค.
์๋ฅผ ๋ค์๋ฉด ๊ด๊ณ ๊ฐ ๋ก๋๋๊ธฐ ์ ํ์ ๋์ด ๋ณํ๋ CLS(๋์ ๋ ์ด์์ ์ด๋)๋ก ์ด์ด์ง ์ ์์ผ๋ฏ๋ก, ํ๋ ์ด์คํ๋๋ ๊ณ ์ ๋ ๋์ด๋ฅผ ๊ฐ๋๋ก ์คํ์ผ๋ง(CSS ์ ์ฉ)ํด์ผ ํฉ๋๋ค.

3. ๊ด๊ณ ์ฑ๋ฅ์์ ์ฑ์์ต ๊ฐ ํธ๋ ์ด๋์คํ
๊ด๊ณ ๋ฅผ ์์ ํ ์ง์ฐํ๋ฉด ํ์ด์ง ์ฑ๋ฅ์ ๊ฐ์ ๋์ง๋ง ๊ด๊ณ ๋ ธ์ถ ๊ธฐํ๊ฐ ์ค์ด๋ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ๊ตฌํ ์์๋ ๋ค์ ์ธ ๊ฐ์ง ๊ฐ์ ๊ท ํ ์๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
- ๋ก๋ฉ ์์ (์ง์ฐ ์๊ฐ): rootMargin์ ์ฌ์ฉํด ๋ทฐํฌํธ ์ง์ ๋ช ํฝ์ ์ ์ ๋ก๋ํ ์ง ๊ฒฐ์ ํ์ธ์. ๋๋ฌด ๋ฆ์ผ๋ฉด ๊ด๊ณ ๊ฐ ํ์๋ ๊ธฐํ๋ฅผ ๋์น๊ณ , ๋๋ฌด ์ด๋ฅด๋ฉด LCP์ ์ํฅ์ด ํฝ๋๋ค.
- ํ๋ ์ด์คํ๋ ์ค๊ณ: ๊ณ ์ ๋์ด ํ๋ ์ด์คํ๋๋ฅผ ์ฌ์ฉํด CLS๋ฅผ ๋ฐฉ์งํ์ธ์. ๊ด๊ณ ๋ก๋ ํ ํ๋ ์ด์คํ๋๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์นํํ๋ฉด UX๊ฐ ํฅ์๋ฉ๋๋ค.
- ํด๋ฐฑ ์ ๋ต: IntersectionObserver ๋ฏธ์ง์ ๋ธ๋ผ์ฐ์ ์ ๋ํ ์ฆ์ ๋ก๋ ๋๋ ํ์ด๋จธ ๊ธฐ๋ฐ ๋ก๋ ํด๋ฐฑ์ ๊ตฌํํ์ธ์. ์ด๋ ์์ต ์์ค์ ๋ฐฉ์งํฉ๋๋ค.
4. ๊ด๊ณ ์ต์ ํ ์ฒดํฌ๋ฆฌ์คํธ
๋ค์์ ์ด์ ์ค ๋ฐ๋์ ์ ๊ฒํด์ผ ํ ์ฒดํฌ๋ฆฌ์คํธ์ ๋๋ค. ๊ฐ ํญ๋ชฉ์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ์์ ์ฑ๊ณผ ์์ต์ฑ ํ๋ณด์ ์ง๊ฒฐ๋ฉ๋๋ค.
| ์ ๊ฒ ํญ๋ชฉ | ๊ถ์ฅ ํ๋ | ์ฐ์ ๋ |
|---|---|---|
| ํ๋ ์ด์คํ๋ ๋์ด | ๊ด๊ณ ์ฌ๋กฏ์ ๊ณ ์ ๋์ด ์ง์ | ๋์ |
| rootMargin ์ค์ | '100px~300px' ๋ฒ์์์ A/B ํ ์คํธ | ์ค |
| ๋ฐ์ดํฐ ์์ฑ ๊ด๋ฆฌ | data-ad-ready๋ก ์ํ ๊ด๋ฆฌ | ๋์ |
| ์ค๋ฅ ๋ก๊น | ๋ก๋ ์คํจ ์ ํด๋ฐฑ ๋ฐ ๋ก๊ทธ ๊ธฐ๋ก | ์ค |
5. ์ฝ๋ ํตํฉ ๋ฐ ๋ชจ๋ํ ๊ถ์ฅ ํจํด
์ฌ์ดํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๊ด๊ณ ๋ก๋๋ฅผ ๋ชจ๋ํํ์ฌ BlogApp์ด๋ SiteCore์ ์ผ๋ถ๋ก ํตํฉํ์ธ์. ๋ชจ๋ํ ์ ๋ค์์ ๊ถ์ฅํฉ๋๋ค:
์ด๊ธฐํ(init)์์ Observer๋ฅผ ์ค์ , adLoader ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ ธ์ถ, fail-safe(๋คํธ์ํฌ ์คํจ ์ ์ ์ ์ปจํ ์ธ ํ์) ํฌํจ. ์์: BlogApp.adLoader.initObserver()๋ฅผ DOMContentLoaded ๋๋ SPA ๋ผ์ฐํธ ๋ณ๊ฒฝ ์ ํธ์ถํฉ๋๋ค.
์๋๋ ์ด์ ์ค ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ์ต์ ํ ํ์ ๋๋ค:
- ์ค์ ๊ด๊ณ ์ฌ๋กฏ(์: ์ฒซ ํ๋ฉด ์๋จ)์ rootMargin์ ์๊ฒ ํ์ฌ ์ฐ์ ๋ก๋.
- ๋นํต์ฌ ๊ด๊ณ ์ฌ๋กฏ์ ํฐ rootMargin ๋๋ ์ง์ฐ ์๊ฐ ์ค์ ์ผ๋ก ๋น์ฉ ์ ๊ฐ.
- ๋ทฐํฌํธ ๋ด์์ ๋น ๋ฅด๊ฒ ์ง๋๊ฐ๋ ์์ญ(์: ์ค์์ดํ ์)์ด ์๋ค๋ฉด threshold๋ฅผ ์กฐ์ ํด ๊ณผ๋ํ ๋ก๋๋ฅผ ๋ฐฉ์ง.
๊ตฌํ ์ ๋ฐ๋์ ๊ณ ๋ คํ ์ : ๊ด๊ณ ๋คํธ์ํฌ์ ๋น๋๊ธฐ ์คํฌ๋ฆฝํธ๊ฐ ์ธ๋ถ ๋ฆฌ์์ค์ด๋ฏ๋ก ๋คํธ์ํฌ ๋ธ๋กํน์ ์ ๋ฐํ์ง ์๋๋ก async ๋๋ defer๋ก ๋ก๋ํ๊ณ , ๊ด๊ณ ํธ์ถ์ ๊ฐ๋ฅํ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ผ๋ก ์ฒ๋ฆฌํ์ธ์. ๋ํ, ๊ด๊ณ ์คํฌ๋ฆฝํธ๊ฐ DOM์์ ๋์ ์ผ๋ก ์์ฑํ iframe์ ์ฝ์ ํ ๋ ๋์ด์ ๋๋น๊ฐ ์์ธก ๊ฐ๋ฅํ๋๋ก ํ๋ ์ด์คํ๋๋ฅผ ์ค๊ณํ๋ฉด CLS๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
5-1. ๋ชจ๋ํฐ๋ง๊ณผ A/B ํ ์คํธ
๋ธ๋ก๊ทธ์ ๊ด๊ณ ์ต์ ํ๋ฅผ ์ ์ฉํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋์ A/B ํ ์คํธ์ ๋ชจ๋ํฐ๋ง์ ํตํด ๊ฒ์ฆํ์ธ์. ๊ด์ฌ ์งํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: LCP, CLS, FCP(First Contentful Paint), ๊ด๊ณ ๋ทฐ(views), ํด๋ฆญ๋ฅ (CTR), RPM. ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ์ ์ฉ ์ ํ์ ์งํ๋ฅผ ๋น๊ตํด ๋ก๋ ์์ (rootMargin/threshold) ์กฐํฉ์ ์ต์ ํํฉ๋๋ค.
5-2. ๊ด๊ณ ์ต์ ํ ๊ตฌํ ์ํ
์์ฝํ๋ฉด ๊ตฌํ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(1) ์ฌ๋กฏ ๋งํฌ์ ์ค๋น (2) Intersection Observer ์ด๊ธฐํ (3) entry.isIntersecting ์ loadAd ํธ์ถ (4) ๋ก๋ ์ฑ๊ณต ์ observer.unobserve ๋ฐ data-ad-ready ์ ๋ฐ์ดํธ (5) ์ค๋ฅ ์ ํด๋ฐฑ ์ฒ๋ฆฌ.
!-- [1] ๊ด๊ณ ์ปจํ
์ด๋ (HTML) --
div id="ad-slot-1" class="ad-lazy-load" data-ad-ready="false"/div
div id="ad-slot-2" class="ad-lazy-load" data-ad-ready="false"/div
script
/
* Intersection Observer ๊ธฐ๋ฐ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ (Lazy Loading)
*/
(() = {
const adLoader = {
observerOptions: {
root: null, // ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค
rootMargin: '200px 0px', // 200px ์ ๋ฏธ๋ฆฌ ๋ก๋
threshold: 0.01 // 1% ๋ณด์ด๋ฉด ํธ๋ฆฌ๊ฑฐ
},
observerCallback(entries, observer) {
entries.forEach(entry = {
if (entry.isIntersecting) {
const adSlot = entry.target;
adLoader.loadAd(adSlot.id);
observer.unobserve(adSlot); // ํ ๋ฒ ๋ก๋ ํ ๊ด์ฐฐ ์ค๋จ
}
});
},
loadAd(adSlotId) {
const adSlot = document.getElementById(adSlotId);
if (!adSlot || adSlot.dataset.adReady === 'true') return;
// ์ค์ ๊ด๊ณ ๋ก๋ ์ฝ๋ (AdSense ์์)
const ins = document.createElement('ins');
ins.className = 'adsbygoogle';
ins.style.display = 'block';
ins.setAttribute('data-ad-client', 'ca-pub-XXXXXXXXXXXXXXX'); // โถ ์์ ์ ID ์
๋ ฅ
ins.setAttribute('data-ad-slot', '1234567890'); // โถ ๊ด๊ณ ์ฌ๋กฏ ID
ins.setAttribute('data-ad-format', 'auto');
ins.setAttribute('data-full-width-responsive', 'true');
adSlot.appendChild(ins);
try {
(adsbygoogle = window.adsbygoogle || []).push({});
console.log(`Lazy Loaded Ad: ${adSlotId}`);
} catch (e) {
console.warn(`๊ด๊ณ ๋ก๋ ์คํจ: ${adSlotId}`, e);
}
adSlot.dataset.adReady = 'true';
},
initObserver() {
const slots = document.querySelectorAll('.ad-lazy-load[data-ad-ready="false"]');
if (!('IntersectionObserver' in window)) {
console.log('IntersectionObserver ๋ฏธ์ง์ ๋ธ๋ผ์ฐ์ : ๋ชจ๋ ๊ด๊ณ ์ฆ์ ๋ก๋');
slots.forEach(slot = adLoader.loadAd(slot.id));
return;
}
const observer = new IntersectionObserver(adLoader.observerCallback, adLoader.observerOptions);
slots.forEach(slot = observer.observe(slot));
console.log(`๊ด๊ณ ${slots.length}๊ฐ ๊ด์ฐฐ ์์`);
}
};
// ํ์ด์ง ๋ก๋ ์๋ฃ ์ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ ์ด๊ธฐํ
window.addEventListener('load', () = adLoader.initObserver());
})();
/script
๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ๋จ์ํ ๊ธฐ์ ์ ํธ๋ฆญ์ด ์๋๋ผ ์ฌ์ฉ์ ๊ฒฝํ(UX)๊ณผ ์์ต์ฑ์ ๊ท ํ์ ๋ง์ถ๋ ์ ๋ต์ ์ ํ์ ๋๋ค. ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ LCP๋ฅผ ๊ฐ์ ํ๊ณ , ๋ถํ์ํ ๋ฆฌ์์ค ํธ์ถ์ ์ค์ด๋ฉฐ, ์ฌ์ฉ์ ์ดํ์ ๋ฎ์ถฐ ๊ถ๊ทน์ ์ผ๋ก ์์ต ์์ ํ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. ์ด์์ ์ ์ฅ์์๋ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ์ ์ ํ rootMargin ์ค์ , ํ๋ ์ด์คํ๋ ๋์ด ํ๋ณด, ํด๋ฐฑ ์ฒ๋ฆฌ ์ธ ๊ฐ์ง๋ฅผ ์ฒ ์ ํ ๊ด๋ฆฌํด ๋ณด์ธ์!
Q1: Intersection Observer๋ฅผ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋์?
A1: Intersection Observer ๋ฏธ์ง์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํด ํด๋ฐฑ์ ๊ตฌํํ์ธ์. ํด๋ฐฑ ์์๋ก๋ ํ์ด์ง ๋ก๋ ์ ๋ชจ๋ ๊ด๊ณ ๋ฅผ ์ฆ์ ๋ก๋ํ๊ฑฐ๋, ์ผ์ ์๊ฐ(์: 2์ด) ํ์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ๋ ํ์ด๋จธ ๊ธฐ๋ฐ ๋ก์ง์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ์ฌ์ฉ์์ ์์ด์ ํธ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์กฐ๊ฑด๋ถ๋ก ํด๋ฐฑ ํ๋์ ์ ํํ๋ฉด ๋ฉ๋๋ค.
Q2: ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ด ๊ด๊ณ ์์ต์ ์ ์ํฅ์ ์ฃผ์ง ์๋์?
A2: ์ ์ ํ๊ฒ ์ค์ ๋ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ๋ ธ์ถ ๊ธฐํ๋ฅผ ์ง๋์น๊ฒ ์ค์ด์ง ์์ผ๋ฉด์๋ ์ด๊ธฐ ํ์ด์ง ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค. ํต์ฌ์ rootMargin๊ณผ threshold๋ฅผ ์กฐ์ ํ์ฌ '๋ณด์ฌ์ง ๊ฐ๋ฅ์ฑ์ด ๋์ ์์ '์ ๊ด๊ณ ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. A/B ํ ์คํธ๋ฅผ ํตํด ์ต์ ์ ๊ท ํ์ ์ ์ฐพ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Q3: ํ๋ ์ด์คํ๋๋ก ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ CLS๋ฅผ ์๋ฐฉํ ์ ์๋์?
A3: ํ๋ ์ด์คํ๋๋ ๊ด๊ณ ๊ฐ ์ฐจ์งํ ์ ํํ ๊ณต๊ฐ(๋์ด/๋๋น)์ ์ฌ์ ์ ํ๋ณดํด์ผ ํฉ๋๋ค. ๊ณ ์ ๋ ๋์ด ๊ฐ์ CSS๋ก ์ค์ ํ๊ฑฐ๋, ๋น์จ ๊ธฐ๋ฐ ๋ฐ์ค(์: aspect-ratio)๋ก ๊ณต๊ฐ์ ์์ฝํ๋ฉด ๊ด๊ณ ๋ก๋ ์ ํ์ ๋ ์ด์์ ๋ณ๋์ ์ค์ผ ์ ์์ต๋๋ค.
์์ฝ ๊ฐ์กฐ: ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ์ฑ๊ณต ํฌ์ธํธ๋ ์ ํํ ๋ก๋ ์์ , ์์ ์ ํ๋ ์ด์คํ๋, ์ ์ํ ํด๋ฐฑ์ ๋๋ค. ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ฒํ๊ณ ๊ฐ์ ํ๋ฉด, ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ํ์ด์ง ์ฑ๋ฅ๊ณผ ๊ด๊ณ ์์ต ๋ชจ๋์ ๊ธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.