λΈλ‘κ·Έ κ΄κ³ μ΅μ ν: ν°μ€ν 리μμ μ λμΌμ€ + μ λν + μ ν΄ μ΄λ―Έμ§ μ΄μλ°©λ²
μ΄λ² κΈμμλ μ΄μ μ μ¬λ Έλ κ΄κ³ μμ΅ κ΄λ ¨ μλ£μ μ΄μ΄, λΈλ‘κ·Έ κ΄κ³ μμ΅μ μ‘°κΈμ΄λΌλ ν보ν μ μλ λ°©λ²μΌλ‘ κ΄κ³ μλ μ ν μ½λ μ μκ°νλ €κ³ ν©λλ€. λ³΄ν΅ μ λμΌμ€ κ΄κ³ 1κ°λ§ μ΄μνλ μ΄μμλ μμ§λ§, μ μ²λΌ μ¬λ¬ κ°μ§ κ΄κ³ λ₯Ό λμμ μ΄μνλ λΈλ‘κ·Έ μ΄μμλ μμ κ±°λΌ μκ°ν©λλ€.
μ΄λ κ² μ¬λ¬ κ°μ κ΄κ³ λ₯Ό μ΄μνλλΌλ νμ μ λ ΈμΆ κ΄κ³ κ° μκ³ , νμμ κ΄κ³ κ° μ‘΄μ¬ν©λλ€. μ¬λ¬ κ°μ§ μ΄μ λ‘ μ£Ό κ΄κ³ μμ£Όλ‘ μ΄μνκ³ λλ¨Έμ§λ λΆμμ μΌλ‘ μ΄μνλ κ²½μ°κ° λλΆλΆμ λλ€.
μ λμΌμ€ κ΄κ³ κ° μ λμ¬ λ? 보쑰 κ΄κ³ λ‘ μμ΅ λ³΄μ₯νλ λ°©λ²
μ΄ κ²½μ° λ ΈμΆ μμμ΄ λΆμ‘±νκ±°λ, μ€μ κ΄κ³ κ° λ ΈμΆλμ§ μλ μν©μ΄ λ§μ΄ λ°μν©λλ€. κ΄κ³ κ° λ ΈμΆλμ§ μμ 곡κ°μ λλΉκ° λκ³ , λΆμ‘±ν μμμΌλ‘ μΈν μμ΅ μμ€μ΄ λ°μν μ μμ΅λλ€. μ΄λ¬ν μν©μ μ ν©ν λ°©λ²μ μ΄λ² κΈμμ μ΄μΌκΈ°ν΄ λ³΄κ² μ΅λλ€.
μ΄λ² κΈμμλ AdSenseκ° μ€ν¨ν κ²½μ° Kakao AdFit(μ λν), μ΄νμλ μ ν΄ μ΄λ―Έμ§ κ΄κ³ λ‘ μλ μ νλλ μλ κ΄κ³ μ ν λ°©λ²μ μκ°ν©λλ€. μ΄λ₯Ό ν΅ν΄ κ΄κ³ μμ€μ μ΅μννκ³ , ν°μ€ν 리 λΈλ‘κ·Έμμλ κ°νΈνκ² μ μ©ν μ μλ λ°©λ²μ μλ €λλ¦¬κ² μ΅λλ€.
κ΄κ³ κ° λ ΈμΆλμ§ μλ μ΄μ λ?
μ΄μ κΈμμ μ΄λ―Έ λ€λ€λ€κ³ νλ¨νμ¬ μμΈν λ΄μ©μ μλ΅νκ² μ΅λλ€. κΆκΈνμ λΆλ€μ λ§ν¬λ₯Ό ν΅ν΄ νμΈνμ€ μ μμ΅λλ€.
κ΄κ³ κ° λ ΈμΆλμ§ μλ κ²½μ°, AdSenseλ§μΌλ‘λ κ΄κ³ μμ΅λ₯ μ 100% 보μ₯ν μ μμ΅λλ€. λ°λΌμ λ체 κ΄κ³ λ μ ν΄ μ΄λ―Έμ§λ₯Ό μ€λΉνλ κ²μ΄ λ λ€λ₯Έ λμμ΄ λ μ μμ΅λλ€. μ£Όλ‘ λ§μ΄ μ΄μνλ κ΄κ³ λ₯Ό μλ‘ λ€μ΄ μκ°ν΄ λλ¦¬κ² μ΅λλ€.

λΈλ‘κ·Έμ μ μ©νλ κ΄κ³ μλ μ ν μ½λ
μ£Ό κ΄κ³ κ° λ ΈμΆλμ§ μμ κ²½μ° λΆ κ΄κ³ κ° λ ΈμΆλκ³ , μ΄λ§μ λ μ λ κ²½μ° μ ν΄ κ΄κ³ λ° μ΄λ―Έμ§ κ΄κ³ λ₯Ό λ ΈμΆνμ¬ κ΄κ³ λ―Έλ ΈμΆλ‘ μΈν μμ΅ μμ€μ μ΅λν λ°©μ§νλ λ°©λ²μ λλ€. μλ λ°©λ²μ ν΅ν΄ λꡬλ μ½κ² μ΄μν μ μμ΅λλ€.
ν°μ€ν 리 κΈ°μ€ κ΄κ³ μ½λ μ€μΉ λ°©λ²
μλ μ½λλ ν°μ€ν 리 κ΄λ¦¬μ > μ€ν¨ νΈμ§ > HTML νΈμ§ λλ κΈμ°κΈ° νλ©΄μ HTML νμ μ½μ ν μ μμ΅λλ€.
- μ€ν¨ μ 체 μ μ©: μ€ν¨ νΈμ§ > HTML νΈμ§ > μνλ μμΉμ μ½μ (μ: <body> μ)
- κ°λ³ κΈ μ μ©: κΈ μμ± > HTML νμμ μνλ μμΉμ μ½μ
μλ μ½λμμ λ³ΈμΈμ΄ μ΄μνκ³ μλ κ΄κ³ μ½λλ§ λ³κ²½ν΄μ μ¬μ©νμλ©΄ λ©λλ€.

<div class="ad-container">
<div class="ad-placeholder" id="initial-placeholder">κ΄κ³ λ‘λ μ€...</div>
<!-- 1λ¨κ³: μ λμΌμ€ κ΄κ³ -->
<div id="adsense-ad" class="ad-slot">
<ins class="adsbygoogle"
style="display:block;width:100%;height:100%;"
data-ad-client="ca-pub-μ¬κΈ°μ_μ λμΌμ€_ν΄λΌμ΄μΈνΈ_ID"
data-ad-slot="μ λμΌμ€_μ¬λ‘―_ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
</div>
<!-- 2λ¨κ³: μΉ΄μΉ΄μ€ μ λν κ΄κ³ -->
<div id="kakao-ad" class="ad-slot">
<ins class="kakao_ad_area"
style="display:block;width:100%;height:100%;"
data-ad-unit="DAN-μ λν_μ λ_ID"
data-ad-width="728"
data-ad-height="90"></ins>
</div>
<!-- 3λ¨κ³: μ΄λ―Έμ§ κ΄κ³ (μ ν΄ λλ μ체 κ΄κ³ ) -->
<div id="fallback-ad" class="ad-slot fallback-image">
<img src="https://yourdomain.com/images/fallback-ad.webp" alt="κ΄κ³ μ΄λ―Έμ§" loading="lazy">
</div>
</div>

JavaScript μ½λ (μλ μ ν)
μλ μ½λλ₯Ό κ°μ μμΉμ <script>λ‘ ν¨κ» μ½μ ν΄ μ£ΌμΈμ. κ΄κ³ κ° μμ°¨μ μΌλ‘ λ‘λλλ©° μ€ν¨ μ μλ μ νλ©λλ€.
<script>
document.addEventListener("DOMContentLoaded", function() {
const adsense = document.getElementById("adsense-ad");
const kakao = document.getElementById("kakao-ad");
const fallback = document.getElementById("fallback-ad");
const tryAd = (el, scriptLoader, onFail, timeout = 3000) => {
el.classList.add("visible");
scriptLoader();
const observer = new MutationObserver(() => {
const iframe = el.querySelector("iframe");
if (iframe && iframe.offsetHeight > 50) observer.disconnect();
});
observer.observe(el, { childList: true, subtree: true });
setTimeout(() => {
const iframe = el.querySelector("iframe");
if (!iframe || iframe.offsetHeight < 50) {
el.classList.remove("visible");
observer.disconnect();
onFail();
}
}, timeout);
};
const loadAdsense = () => {
const s = document.createElement("script");
s.src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxx";
s.async = true;
s.crossOrigin = "anonymous";
s.onload = () => (adsbygoogle = window.adsbygoogle || []).push({});
document.head.appendChild(s);
};
const loadAdfit = () => {
const s = document.createElement("script");
s.src = "//t1.daumcdn.net/kas/static/ba.min.js";
s.async = true;
s.onload = () => (kakao_ad_area = window.kakao_ad_area || []).push({});
document.head.appendChild(s);
};
tryAd(adsense, loadAdsense, () => {
tryAd(kakao, loadAdfit, () => fallback.classList.add("visible"), 2000);
}, 3000);
});
</script>

κ΄κ³ μ€μ μ μ μμ¬ν
- data-ad-client, data-ad-slot, data-ad-unit κ°μ μμ μ κ΄κ³ μ½λ κ°μΌλ‘ λ°λμ κ΅μ²΄νμΈμ.
- μ΄λ―Έμ§ κ΄κ³ μ£Όμλ μμ μ μλ² λλ μ ν΄ μ΄λ―Έμ§ μ£Όμλ‘ μμ ν΄μΌ ν©λλ€.
- ν°μ€ν 리λ μ€ν¬λ¦½νΈ νκ·Έ μ½μ μ΄ μ νλ μ μμΌλ―λ‘ “HTML νΈμ§” λ©λ΄μμ μ§μ μμ νμ μΌ ν©λλ€.
- κ΄κ³ μμΉλ μ½ν μΈ μλ¨, μ€κ°, νλ¨ λ± κ°μμ± λμ μμΉμ μ½μ νλ κ²μ΄ μ’μ΅λλ€.
μ½λμ μ£Όμ μ₯μ
κΈ°λ₯ | μ€λͺ |
---|---|
κ΄κ³ μ μ€ λ°©μ§ | μ λμΌμ€ μ€ν¨ μ μ λν λλ μ΄λ―Έμ§λ‘ μλ μ ν |
λ μ΄μμ μμ μ± | κ³ μ λμ΄ μ€μ μΌλ‘ CLS(μ½ν μΈ λ°λ¦Ό) λ¬Έμ λ°©μ§ |
μμ΅ κ·Ήλν | νμ κ΄κ³ κ° λ ΈμΆλλ―λ‘ μμ΅ μμ€ μ΅μν |
λͺ¨λ°μΌ λμ | 100% λ°μν ꡬ쑰 μ¬μ© κ°λ₯ |
κ΄κ³ μ μ± λμ | μ λμΌμ€ μ°¨λ¨/λΉλ ΈμΆ μ μλ λ체 μ²λ¦¬ κ°λ₯ |
μ€ν¬λ¦½νΈ μ½λ μ€λͺ
1. 기본 ꡬ쑰
- DOMμ΄ μμ ν λ‘λλ ν(
DOMContentLoaded
) μ€νλ©λλ€. - Google AdSense, Kakao Adλ₯Ό μμ°¨μ μΌλ‘ μλνκ³ , λͺ¨λ μ€ν¨ μ λ체 μ΄λ―Έμ§ κ΄κ³ λ‘ μ νλ©λλ€.
2. μ£Όμ κ΅¬μ± μμ
- κ΄κ³ 컨ν
μ΄λ:
.ad-container
λ°#initial-placeholder
- κ΄κ³ μ ν:
#adsense-ad
: Google AdSense#kakao-ad
: Kakao AdFit#fallback-ad
: μ ν΄ μ΄λ―Έμ§ κ΄κ³
3. λμ νλ¦
- μ΄κΈ°ν: λͺ¨λ κ΄κ³ divμμ 'visible' ν΄λμ€ μ κ±°
- κ΄κ³ λ‘λ μμ:
- AdSense → AdFit → μ ν΄ μ΄λ―Έμ§ μμλ‘ μλ
- κ° λ¨κ³λ³ νμμμ: AdSense(3μ΄), AdFit(2μ΄)
- κ΄κ³ λ‘λ κ°μ§:
MutationObserver
λ‘ iframe λ‘λ© μ¬λΆμ λμ΄ κ°μ§
4. μ£Όμ ν¨μ μ€λͺ
tryAd()
: κ΄κ³ λ₯Ό μλνκ³ μ€ν¨ μ λ€μ κ΄κ³ λ‘ λμ΄κ°λ ν¨μloadAdsense()
: AdSense μ€ν¬λ¦½νΈ λ‘λloadAdfit()
: Kakao AdFit μ€ν¬λ¦½νΈ λ‘λfallback.classList.add('visible')
: μ΄λ―Έμ§ κ΄κ³ νμ
5. νΉμ§
- ν΄λ°± μμ€ν : λ€λ¨κ³ κ΄κ³ μλ ꡬ쑰
- λΉλκΈ° μ²λ¦¬: νμ΄μ§ λ‘λ© μ±λ₯ μ ν μ΅μν
- νμμμ μ€μ : κ° κ΄κ³ μ λ‘λ© μ€ν¨ νλ¨ κΈ°μ€ μ 곡
- μ€λ³΅ λ°©μ§: ν λ²μ νλμ κ΄κ³ λ§ λ ΈμΆ
κ΄κ³ 3λ¨ λ ΈμΆμ© CSS ν΄λμ€ μ€λͺ
κ΅¬λΆ | ν΄λμ€ | μ€λͺ |
---|---|---|
κ΄κ³ μ 체 μμ | .ad-container-top | κ³ μ λμ΄, μ€μ μ λ ¬λ κ΄κ³ μμ |
κ° κ΄κ³ μμ | .ad-slot | λΉλ ΈμΆ μνμμ μμ°¨ λ ΈμΆ |
κ΄κ³ νμ μν | .visible | νλ©΄μ νμλ λ μ μ©λλ ν΄λμ€ |
μ΄λ―Έμ§ κ΄κ³ | .fallback-image img | λΉμ¨ μ μ§νλ©΄μ κ΄κ³ μμ κ½ μ±μ |
λ‘λ© μλ΄ λ¬Έκ΅¬ | .ad-placeholder | κ΄κ³ λ‘λ© μ€ μ¬μ©μ μλ΄μ© ν μ€νΈ |
<style>
.ad-container {
width: 100%;
height: 300px;
overflow: hidden;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.ad-slot {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
visibility: hidden;
opacity: 0;
transition: visibility 0s, opacity 0.5s ease-in-out;
}
.ad-slot.visible {
visibility: visible;
opacity: 1;
}
.fallback-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.ad-placeholder {
background: #e0e0e0;
color: #888;
text-align: center;
line-height: 300px;
width: 100%;
height: 100%;
font-size: 1.2em;
}
</style>
μμ | κ΄κ³ μ’ λ₯ | μ€ν¨ μ λ체 | λ체 λ°©μ |
---|---|---|---|
1 | AdSense | μ€ν¨νλ©΄ | Kakao |
2 | Kakao | μ€ν¨νλ©΄ | μ΄λ―Έμ§ |
3 | μ΄λ―Έμ§ | μ΅μ’ λ ΈμΆ | - |
λ¨μΌ κ΄κ³ μ μμ‘΄νλ ꡬ쑰λ λ§€μ° λΆμμ ν©λλ€. AdSenseκ° μ°¨λ¨λκ±°λ μ μ± μλ°μΌλ‘ μΈν΄ μ μ§λ κ²½μ°, κ΄κ³ μμ΅μ΄ 0μμ΄ λ μλ μμ΅λλ€. λ°λΌμ 보쑰 κ΄κ³ λ₯Ό 1~2κ° μ λ μ΄μνλ κ²λ μ’μ μ λ΅ μ€ νλμ λλ€.
λν μ¬λ¬ κ°μ κ΄κ³ λ₯Ό μ΄μνλ€λ©΄, λ©ν° κ΄κ³ ꡬ쑰λ μ νμ΄ μλ νμ μ λ΅μ΄ λ μ μμ΅λλ€.μ΄λ²μ μκ°ν μ½λμ²λΌ μ λμΌμ€ → μ λν → μ ν΄ μ΄λ―Έμ§ μμΌλ‘ λ체λλ κ΄κ³ ꡬ쑰λ μμ΅μ±κ³Ό μμ μ±μ λμμ μ‘μ μ μλ λ°©λ²μ λλ€.