SPA ์น์ฌ์ดํธ ์นด์นด์ค ์ ๋ํ(Kakao AdFit) ๋ชจ๋ฐ์ผ ๋น ํ๋ฉด ์ค๋ฅ: ์ฟผํฐ ์ ํ๊ณผ MutationObserver ์๋ฒฝ ํด๊ฒฐ๊ธฐ
์น์ฌ์ดํธ๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ์๋ฒ ํธ๋ํฝ ๋น์ฉ์ ๊ฐ๋นํ๊ธฐ ์ํด ์นด์นด์ค ์ ๋ํ์ด๋ ๊ตฌ๊ธ ์ ๋์ผ์ค ๊ฐ์ ๋์คํ๋ ์ด ๊ด๊ณ ๋ฅผ ํ์์ ์ผ๋ก ์ฐ๋ํ๊ฒ ๋ฉ๋๋ค. ์ ๋ ์ต๊ทผ ๋ฐ์คํฌํฑ(PC)๊ณผ ๋ชจ๋ฐ์ผ์์ ๋ชจ๋ ์์ฐ์ค๋ฝ๊ฒ ๊ด๊ณ ๊ฐ ๋ ธ์ถ๋๋๋ก ๋ฐ์ํ ๋ ์ด์์์ ์ง๊ณ , PC์ฉ ์(๋ ๊ฐ) ๋ฐฐ๋์ ๋ชจ๋ฐ์ผ์ฉ ๋ณธ๋ฌธ ๋ฐฐ๋๋ฅผ HTML์ ๊ผผ๊ผผํ๊ฒ ๋ฐฐ์นํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ค์๋ฒ ๋ฐฐํฌ ํ ๋์ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐ์คํฌํฑ์์๋ ์ข์ฐ ๋ ๊ฐ์ ์ํ๋จ ๊ด๊ณ 4๊ฐ๊ฐ ์์ฃผ ์์ํ๊ฒ ์ ๋์ค๋๋ฐ, ์ค๋งํธํฐ์ผ๋ก ์ ์ํ๋ฉด ๋ณธ๋ฌธ ์ค๊ฐ ๊ด๊ณ 1๊ฐ๋ง ๊ฐ์ ํ ๋จ๊ณ ๋๋จธ์ง ํ๋จ ๊ด๊ณ ๋ค์ ์ ๋ถ ํ์ ๋น ๊ป๋ฐ๊ธฐ(์์ค๋ฐ์ค)๋ก ๋์ค๋ ๊ฒ์ด์์ต๋๋ค. ์ ๋๋ธ๋ก์ ๋ ์ํ์์๋, ๊ฐ๋ ฅ ์๋ก๊ณ ์นจ์ ์๋ฐฑ ๋ฒ ๋๋ฌ๋ ๋ชจ๋ฐ์ผ ํ๋จ ๊ด๊ณ ๋ ๋ฌต๋ฌต๋ถ๋ต์ด์์ต๋๋ค.
์ด ๋ต๋ตํ ๋น ํ๋ฉด ํ์์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง๊ณผ ์นด์นด์ค ์คํฌ๋ฆฝํธ์ ๋์ ๋ฐฉ์์ ๋ฉฐ์น ๋ฐค๋ฎ์ผ๋ก ๋ฏ์ด๋ณธ ๋์, ๋ง์นจ๋ด ๊ทธ ์๋ฆ ๋๋ ์์ธ์ ์ฐพ์๋์ต๋๋ค.
1. ๋ฒ์ธ์ 'HTML ๋ ๋๋ง ์์'์ '4๊ฐ ์ฟผํฐ(Quota) ์ ํ'
์นด์นด์ค ์ ๋ํ ์คํฌ๋ฆฝํธ๋ ์์ฃผ ๊นํ์ค๋ฝ๊ณ ๊ณ ์ง์ค๋ฌ์ด ๊ท์น์ ํ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ก "ํ ํ์ด์ง ๋ด์์ ๊ด๊ณ ๋ ์ต๋ 4๊ฐ๊น์ง๋ง ํ์ฉํ๋ค"๋ ์ ์ฑ ์ ๋๋ค.
๋ฌธ์ ๋ ์ ์น์ฌ์ดํธ์ ๋ฐ์ํ HTML ๊ตฌ์กฐ์ ์์์ต๋๋ค. ์ ๋ ํ๋์ HTML ํ์ผ(view.html, base.html) ์์ PC์ฉ ๊ด๊ณ ์ปจํ
์ด๋ 4๊ฐ์ ๋ชจ๋ฐ์ผ์ฉ ๊ด๊ณ ์ปจํ
์ด๋ 4๊ฐ๋ฅผ ๋ชจ๋ ๋ฃ์ด๋๊ณ , ์ ์ํ ๊ธฐ๊ธฐ์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ CSS์ display: none ์์ฑ์ ์ด์ฉํด ์ ์ฐ๋ ๊ด๊ณ ๋ฅผ ์จ๊ธฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง ์นด์นด์ค ์คํฌ๋ฆฝํธ๋ CSS๋ก ์์๊ฐ ์จ๊ฒจ์ ธ ์๋์ง ์๋์ง๋ฅผ ๋ฐฐ๋ คํ์ง ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์์์ ์๋๋ก(Top-to-Bottom) ๋ฌด์ํ๊ฒ ์ฝ์ด ๋ด๋ ค๊ฐ๋ฉฐ ๊ฐ์ฅ ๋จผ์ ๋ง์ฃผ์น๋ <ins class="kakao_ad_area"> ํ๊ทธ 4๊ฐ์ ๊ด๊ณ ์ก์ถ ๊ถํ(์ฟผํฐ)์ ์ ์ฐฉ์์ผ๋ก ๋์ ธ๋ฒ๋ฆฝ๋๋ค.
๋ชจ๋ฐ์ผ๋ก ์ ์ํ์ ๋, HTML ๊ตฌ์กฐ์ ์๋จ์ ์์นํด ์๋ '์จ๊ฒจ์ง PC์ฉ ์ํ๋จ ๋ฐฐ๋'์ '์จ๊ฒจ์ง ์ข์ฐ ๋ ๊ฐ ๋ฐฐ๋'๊ฐ ์นด์นด์ค์ ์ฟผํฐ 4๊ฐ๋ฅผ ์ ๋ถ ์ ์ (๋๋์ง)ํด ๋ฒ๋ฆฐ ๊ฒ์ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, HTML ๋ฌธ์ ์ ์๋์ชฝ์ ์์ ํ๊ฒ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ง์ง ๋ชจ๋ฐ์ผ์ฉ ํ๋จ ๋ฐฐ๋(Middle 2, Bottom)๋ค์ ์ฟผํฐ๊ฐ 0์ด ๋์ด ํ์๊ฒ ๊ตถ์ด ์ฃฝ์ด๋ฒ๋ฆฐ ์ํ์์ต๋๋ค.
2. ํด๊ฒฐ์ฑ 1๋จ๊ณ: ๊ธฐ๊ธฐ๋ณ ๊ด๊ณ ์์ญ์ ์๋ฒฝํ ๊ฒฉ๋ฆฌ (Target Isolation)
๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์คํฌ๋ฆฝํธ๊ฐ ์จ๊ฒจ์ง ๊ด๊ณ ์์์ ์ฟผํฐ๋ฅผ ๋ญ๋นํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ์ด์์ต๋๋ค.
์ ๋ HTML์ ํ๋์ฝ๋ฉ ๋์ด์๋ <ins class="kakao_ad_area"> ํ๊ทธ๋ฅผ ์ ๋ถ <ins class="kakao_ad_ready">๋ผ๋ ์์์ ๊ฐ์ง ํด๋์ค(๋๊ธฐ ์ํ)๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์นด์นด์ค ์คํฌ๋ฆฝํธ๊ฐ HTML์ ์ฝ์ด๋ 'area'๊ฐ ์์ผ๋ฏ๋ก ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๊ทธ ํ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ํ์ฌ ํ๋ฉด์ ๋๋น(Viewport Width)๊ฐ 768px ์ดํ(๋ชจ๋ฐ์ผ)์ธ์ง ํ์ธํ ๋ค, ์ค์ง ๋ชจ๋ฐ์ผ ์ ์ฉ ์ปจํ
์ด๋(.mobile-ad-banner) ์์ ์๋ ํ๊ทธ๋ง kakao_ad_area๋ก ์ด๋ฆ์ ๋ฐ๊ฟ์ฃผ์ด ์ฟผํฐ๋ฅผ ์ ๋นํ๊ฒ ํ๋ํ๋๋ก ๊ฒฉ๋ฆฌ(Isolation) ๋ก์ง์ ๊ตฌํํ์ต๋๋ค.
3. ํด๊ฒฐ์ฑ 2๋จ๊ณ: SPA ๋ผ์ฐํ ๊ณผ MutationObserver์ ๋ซ
๊ฒฉ๋ฆฌ ๋ก์ง์ ์งฐ์์๋ ๊ด๊ณ ๊ฐ ์ฌ์ ํ ๋จ์ง ์์ ์ฝ์ ์ฐฝ์ ์ด์ด๋ณด๋, ์ด๋ฒ์๋ SPA(Single Page Application) ํน์ ์ ๋น๋๊ธฐ ๋ผ์ฐํ ์ด ๋ฐ๋ชฉ์ ์ก์์ต๋๋ค.
ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจ ํ์ง ์๊ณ ๋ณธ๋ฌธ๋ง ๋ถ๋๋ฝ๊ฒ ๊ฐ์ ๋ผ์ฐ๋ SPA ๊ตฌ์กฐ์์๋ ์๋ก์ด ๊ด๊ณ ์์๊ฐ ๋์ ์ผ๋ก ์ฝ์
๋ ๋ ์นด์นด์ค ์คํฌ๋ฆฝํธ๊ฐ ์ด๋ฅผ ๋์น์ฑ์ง ๋ชปํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HTML DOM์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ MutationObserver๋ฅผ ๋ฌ์๋์์ง๋ง, ์ด ๊ฐ์์๋ ๊ธฐ์กด์ kakao_ad_area๋ง ์ฐพ๋๋ก ๋์ด ๋ฉ์ด(Blind) ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฟผํฐ ๋ณดํธ๋ฅผ ์ํด ํ๊ทธ ์ด๋ฆ์ kakao_ad_ready๋ก ๋ฐ๊ฟ๋์๊ธฐ ๋๋ฌธ์, ๊ฐ์์๋ "์๋ก ๋ค์ด์จ ๊ด๊ณ ๊ฐ ์๋ค?" ํ๊ณ ์คํฌ๋ฆฝํธ ์ฌํธ์ถ(reloadKakaoAds)์ ๊ฑด๋๋ฐ์ด ๋ฒ๋ฆฐ ๊ฒ์
๋๋ค.
์ ๋ ์ฆ์ MutationObserver์ ํ๊ฒ ํด๋์ค๋ฅผ kakao_ad_ready๊น์ง ๊ฐ์งํ๋๋ก ์์ ํ๊ณ , ๋์ ๋ ๋๋ง ๋์ค ์ฐฐ๋์ ์๊ฐ์ ๋ชจ๋ฐ์ผ ๊ด๊ณ ์ปจํ
์ด๋๊ฐ display: none์ผ๋ก ์๋ชป ๊ณ์ฐ๋๋ ํ์ด๋ฐ ์๋ฌ๋ฅผ ๋ง๊ธฐ ์ํด Observer ๋ด๋ถ์ ์ฌํธ์ถ ๋๊ธฐ ์๊ฐ(Delay)์ 300~400ms๋ก ๋๋ํ๊ฒ ๋๋ ค์ฃผ์์ต๋๋ค.
์ด ๋ ๊ฐ์ง ์กฐ์น๊ฐ ๋ง๋ฌผ๋ฆฌ์, ๋ง์นจ๋ด ์ค๋งํธํฐ ํ๋ฉด ์ตํ๋จ๊น์ง ๋น ๊ณต๊ฐ ์์ด 4๊ฐ์ ๊ด๊ณ ๊ฐ ์๋กฑํ๊ฒ ๊ฝ ๋ค์ด์ฐจ๊ธฐ ์์ํ์ต๋๋ค!
๋งบ์ผ๋ฉฐ: 1์ธ ๊ฐ๋ฐ์์ ์ง์ํจ์ด ์๋ฒฝํ UX๋ฅผ ๋ง๋ ๋ค
๋จ์ํ "์ฝ๋๋ฅผ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋์ด๊ฒ ์ง"๋ผ๊ณ ์๊ฐํ๋ ๊ด๊ณ ์ฐ๋ ์์ ์ด, DOM ๋ ๋๋ง ์ฐ์ ์์์ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์์ฑ(Visibility) ๊ณ์ฐ ํ์ด๋ฐ๊น์ง ๊ณ ๋ คํด์ผ ํ๋ ๊ณ ๋๋์ ํ๋ก ํธ์๋ ์ต์ ํ ๊ณผ์ ๋ผ๋ ๊ฒ์ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ์ต๋๋ค.
ํนํ 2026๋ ์ดํ์ ๊ตฌ๊ธ ์ ๋์ผ์ค ์ฌ์ฌ์ SEO ์๊ณ ๋ฆฌ์ฆ์ '๋ชจ๋ฐ์ผ ์นํ์ฑ(Mobile-friendly design)'๊ณผ '๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋ ๋๋ง(Fast loading)'์ ์น์ฌ์ดํธ ์ ๋ขฐ๋์ ํต์ฌ ์งํ๋ก ์ผ๊ณ ์์ต๋๋ค. ๋น ์์ค๋ฐ์ค๋ ๊นจ์ง ๋ ์ด์์์ ๋ฐฉ์นํ์ง ์๊ณ SPA ํ๊ฒฝ์ ํ๊ณ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ง์ํ๊ฒ ๊ทน๋ณตํด ๋ธ ์ด ํธ๋ฌ๋ธ์ํ ๊ฒฝํ์, ์ ์ ์ ํธ์์ฑ๋ฟ๋ง ์๋๋ผ ์ฌ์ฌ ๋ด์๊ฒ๋ ์๋ฒฝํ ๊ธฐ์ ์ ์ ๋ขฐ๋(E-E-A-T)๋ฅผ ์ฆ๋ช ํ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๊ฐ ๋ ๊ฒ์ ๋๋ค.
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
Q1. PC ํ๊ฒฝ๊ณผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ๊ด๊ณ ๋จ์ ID(DAN-)๋ฅผ ๋๊ฐ์ ๊ฒ์ผ๋ก ์ค๋ณต ์ฌ์ฉํด๋ ๋๋์?
A. ์ ๋ ์ ๋ฉ๋๋ค. ์นด์นด์ค ์ ๋ํ ์ ์ฑ ์ ํ ํ์ด์ง ๋ด์์ ๋์ผํ ๊ด๊ณ ID๊ฐ ๋ ๋ฒ ์ค๋ณต ํธ์ถ๋๋ ๊ฒ์ ์๊ฒฉํ๊ฒ ๊ธ์งํ๊ณ ์์ต๋๋ค. PC์ฉ ์์ญ๊ณผ ๋ชจ๋ฐ์ผ์ฉ ์์ญ์ ๊ฐ์ ID๋ฅผ ๋ฃ์ผ๋ฉด, ์นด์นด์ค ์๋ฒ๊ฐ ์ค๋ณต ํธ์ถ๋ก ๊ฐ์ฃผํ์ฌ ํ์ชฝ ๊ด๊ณ ์ ์ก์ถ์ ์์ ํ ์ฐจ๋จ(๋น ํ๋ฉด)ํด ๋ฒ๋ฆฌ๋ฏ๋ก ๋ฐ๋์ ๊ธฐ๊ธฐ๋ณ, ์์น๋ณ๋ก ๊ณ ์ ํ ๋จ์ ID๋ฅผ ์๋ก ๋ฐ๊ธ๋ฐ์ ์ ์ฉํด์ผ ํฉ๋๋ค.
Q2. CSS์์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ(@media)๋ก ๋ชจ๋ฐ์ผ ๊ด๊ณ ๋ฅผ ์จ๊ธฐ๋ฉด ์ฟผํฐ(4๊ฐ ์ ํ)๋ฅผ ์๋ ์ ์์ง ์๋์?
A. ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์นด์นด์ค ์ ๋ํ์ด๋ ๊ตฌ๊ธ ์ ๋์ผ์ค์ ํ์ ๋ด์ CSS์ display: none ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ด์ ์, HTML ๊ตฌ์กฐ ์์ <ins class="kakao_ad_area"> ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ์ต์ฐ์ ์ผ๋ก ์นด์ดํ
ํฉ๋๋ค. ๋ฐ๋ผ์ CSS๋ง์ผ๋ก ์จ๊ธฐ๋ ๊ฒ์ ์ฟผํฐ ๋ญ๋น๋ฅผ ๋ง์ ์ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ํ๊ทธ ํด๋์ค ์์ฒด๋ฅผ ์กฐ์(Target Isolation)ํด์ผ๋ง ์ฟผํฐ๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ ์ ์์ต๋๋ค.
Q3. SPA(Single Page Application)์์ ํ์ด์ง ์ด๋ ์ ๊ด๊ณ ๊ฐ ์์ ๋จ์ง ์๊ฑฐ๋ ๊ณผ๊ฑฐ ๊ด๊ณ ๊ฐ ๋จ์ต๋๋ค.
A. SPA ํ๋ ์์ํฌ(React, Vue, ํน์ ๋์ ๋ฐ๋๋ผ JS)๋ ๋ธ๋ผ์ฐ์ ์ ์ฒด ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก, ์ต์ด 1ํ๋ง ๋ก๋๋๋ ์ธ๋ถ ๊ด๊ณ ์คํฌ๋ฆฝํธ๊ฐ ์๋ก์ด ํ์ด์ง ๋ ๋๋ง์ ๊ฐ์งํ์ง ๋ชปํฉ๋๋ค. ๋ฐ๋์ ์ปดํฌ๋ํธ ๋ง์ดํธ ์์ ์ด๋ ๋น๋๊ธฐ ํต์ ์ด ์๋ฃ๋ ์งํ, ๊ด๊ณ SDK๊ฐ ์ ๊ณตํ๋ ์ฌ๋ ๋๋ง ํจ์(์: ์นด์นด์ค์ ๊ฒฝ์ฐ ์๋ก ์ ์ํ reloadKakaoAds(), ๊ตฌ๊ธ์ ๊ฒฝ์ฐ (adsbygoogle = window.adsbygoogle || []).push({}))๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌํธ์ถํ๋๋ก DOM ๊ด์ฐฐ์(MutationObserver) ๋ก์ง์ ๊ตฌ์ถํด์ผ ํฉ๋๋ค.
๐ฌ ๋๊ธ 0๊ฐ