๐Ÿšจ 2025๋…„ 11์›” ๊ธฐ์ค€, ๋ธ”๋กœ๊ทธ์ŠคํŒŸ์— ์‹ค์‹œ๊ฐ„ ๊ตฌ๊ธ€ ํŠธ๋ Œ๋“œ ๊ฒฝ์ œ ํ‹ฐ์ปค ์™„๋ฒฝํ•˜๊ฒŒ ๋„ฃ๋Š” ์ „ ๊ณผ์ •(+Google Apps Script๋ฅผ ํ”„๋ก์‹œ ์„œ๋ฒ„์ดํ•ด)

๐Ÿšจ 2025๋…„ 11์›” ๊ธฐ์ค€, ๋ธ”๋กœ๊ทธ์ŠคํŒŸ์— ์‹ค์‹œ๊ฐ„ ๊ตฌ๊ธ€ ํŠธ๋ Œ๋“œ ๊ฒฝ์ œ ํ‹ฐ์ปค ์™„๋ฒฝํ•˜๊ฒŒ ๋„ฃ๋Š” ์ „ ๊ณผ์ •

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ€๋‚˜ํˆฌ๋ฐ์ด์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์ˆ˜๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค ๋์— ์ง„์งœ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ๊ฒฝ์ œ ํŠธ๋ Œ๋“œ ํ‹ฐ์ปค๋ฅผ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ(Blogger)์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์„ ์ „๋ถ€ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋งŒ ๋”ฐ๋ผ ํ•˜์‹œ๋ฉด 2025๋…„ 11์›” 28์ผ ํ˜„์žฌ 100% ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.


์™œ ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ํž˜๋“ค์—ˆ๋‚˜?

Blogger ํ™˜๊ฒฝ์— ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ด ๊นŒ๋‹ค๋กœ์› ๋˜ ์ด์œ ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • Blogger CSP ์ •์ฑ… ๊ฐ•ํ™”: Blogger๋Š” 2024๋…„ ๋ง๋ถ€ํ„ฐ CSP(Content Security Policy) ์ •์ฑ…์„ ๊ฐ•ํ™”ํ•˜์—ฌ ์œ„์ ฏ ๋“ฑ์—์„œ ์™ธ๋ถ€ API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” fetch() ๋ช…๋ น์„ ๋Œ€๋ถ€๋ถ„ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ตฌ๊ธ€ ํŠธ๋ Œ๋“œ RSS๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Apps Script ๋ฐฐํฌ ๋ณต์žก์„ฑ: ๋”ฐ๋ผ์„œ Google Apps Script๋ฅผ ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ฐฐํฌ ๊ณผ์ •์—์„œ "์•ก์„ธ์Šค ๊ถŒํ•œ: ๋ˆ„๊ตฌ๋‚˜(์ต๋ช… ํฌํ•จ)" ์„ค์ •๊ณผ "๊ฒ€์ฆ๋˜์ง€ ์•Š์Œ" ์Šน์ธ ๊ณผ์ •์„ ๋ˆ„๋ฝํ•˜๋ฉด URL์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฒช์€ ๋ชจ๋“  ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ๋ฒ•

์˜ค๋ฅ˜ ์œ ํ˜• ๋ฌธ์ œ์  ํ•ด๊ฒฐ๋ฒ•
์œ„์ ฏ ์‚ฝ์ž… Blogger์˜ CSP ์ •์ฑ…์— ์˜ํ•ด fetch() ๋ช…๋ น์ด ์™„์ „ ์ฐจ๋‹จ๋จ. ์œ„์ ฏ ๋Œ€์‹  HTML ํ…œํ”Œ๋ฆฟ์˜ </body> ์ง์ „์— ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์•ผ ํ•จ.
<head> ์•ˆ์— ์‚ฝ์ž… HTML ํ‘œ์ค€ ์œ„๋ฐ˜ ์˜ค๋ฅ˜ (div should not appear inside of head). CSS/JS ์ฝ”๋“œ๊ฐ€ <body> ์˜์—ญ์„ ์นจ๋ฒ”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
</header> ์•„๋ž˜ ์‚ฝ์ž… HTML ๋กœ๋”ฉ์ด ๋Šฆ๊ฑฐ๋‚˜, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์˜ˆ ์•ˆ ๋œจ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ. ์•ˆ์ „ํ•œ ์‹คํ–‰ ์ง€์ ์ธ </body> ์ง์ „์„ ๊ณ ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ translateX(-66.7%) ๋“ฑ ์ •์ ์ธ ๊ฐ’ ์‚ฌ์šฉ ์‹œ ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊น€. translateX(100vw)์—์„œ translateX(-100%)๋กœ ์ด๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„์„ ์—†์•ฐ.
Apps Script URL ์˜ค๋ฅ˜ ๋ฐฐํฌ ์„ค์ •์„ ์ž˜๋ชปํ•˜์—ฌ /exec URL์ด JSON์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ. ์•ก์„ธ์Šค ๊ถŒํ•œ์„ "๋ˆ„๊ตฌ๋‚˜(์ต๋ช… ํฌํ•จ)"๋กœ ์„ค์ •ํ•˜๊ณ  ๊ถŒํ•œ ์Šน์ธ(๊ณ ๊ธ‰→๊ณ„์†ํ•˜๊ธฐ→ํ—ˆ์šฉ) ๊ณผ์ •์„ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง„์งœ ์ •๋‹ต ์œ„์น˜์™€ ์ฝ”๋“œ

ํ‹ฐ์ปค๊ฐ€ ๋นˆ ๊ณต๊ฐ„ ์—†์ด, ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋œจ๋Š” ์ง„์งœ ์ •๋‹ต ์œ„์น˜๋Š” </body> ์ง์ „์ž…๋‹ˆ๋‹ค. (Blogger์˜ ํ…Œ๋งˆ ํŽธ์ง‘ ๋ชจ๋“œ์—์„œ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

๐ŸŽฏ ์ •๋‹ต ์œ„์น˜: </body> ์ง์ „

๐Ÿ“„ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ์— ์‚ฝ์ž…ํ•  ์ตœ์ข… ์™„์„ฑ ์ฝ”๋“œ (HTML/CSS/JS)

XML
<b:if cond='data:view.isHomepage or data:view.isArchive or data:view.isPost'>
  <div id="realtime-economy-ticker">
    <span class="ticker-label">๊ฒฝ์ œ ํŠธ๋ Œ๋“œ</span>
    <div class="ticker-wrap">
      <ul id="ticker-list"><li>๋กœ๋”ฉ ์ค‘...</li></ul>
    </div>
  </div>
  <style scoped=''>
  #realtime-economy-ticker{background:#000;color:#fff;padding:16px 20px;margin:20px auto 30px;border-radius:18px;overflow:hidden;display:flex;align-items:center;box-shadow:0 6px 25px rgba(255,107,107,.4);max-width:96%;font-family:'Malgun Gothic',sans-serif;box-sizing:border-box}
  .ticker-label{font-weight:900;font-size:17px;background:linear-gradient(90deg,#ff4757,#ffa502);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-right:20px;flex-shrink:0}
  .ticker-wrap{overflow:hidden;flex:1}
  #ticker-list{display:inline-flex;animation:ticker-move 15s linear infinite;gap:60px;padding:0;margin:0;list-style:none;white-space:nowrap}
  #ticker-list a{color:#ff6b6b;font-weight:700;font-size:16.5px;text-decoration:none}
  #ticker-list a:hover{color:#fff;text-decoration:underline}
  #ticker-list span{color:#ffd93d;margin-left:7px;font-weight:900}
  @keyframes ticker-move{0%{transform:translateX(100vw)}100%{transform:translateX(-100%)}}
  @media(max-width:768px){#realtime-economy-ticker{margin:15px 8px;padding:12px}}
  </style>
  <script type='text/javascript'>
  //<![CDATA[
    const MY_PROXY = '์—ฌ๊ธฐ์—-๋‹น์‹ ๋งŒ์˜-/exec-URL-๋„ฃ๊ธฐ';
    fetch(MY_PROXY+'?t='+Date.now())
      .then(r=>r.json())
      .then(d=>{
        const ul=document.getElementById('ticker-list');
        let h='';
        d.forEach((x,i)=>h+=`<li><a href="${x.link}" target="_blank">${x.keyword}</a><span>#${i+1}</span></li>`);
        ul.innerHTML=h;
      })
      .catch(()=>{document.getElementById('ticker-list').innerHTML='<li>์ฝ”์Šคํ”ผ · ํ™˜์œจ · ๊ธˆ๋ฆฌ · ๋ถ€๋™์‚ฐ · ๋น„ํŠธ์ฝ”์ธ</li>'});
  //]]>
  </script>
</b:if>

๋‹น์‹ ๋งŒ ๋”ฐ๋ผ ํ•˜๋ฉด ๋˜๋Š” 4๋‹จ๊ณ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

1. ๊ธฐ์กด ํ‹ฐ์ปค ์ฝ”๋“œ ์ œ๊ฑฐ & ์ƒˆ ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ

  • ๊ธฐ์กด ํ‹ฐ์ปค ์ฝ”๋“œ ์ „๋ถ€ ์‚ญ์ œ: ๊ธฐ์กด์— ์‹œ๋„ํ–ˆ๋˜ econ-ticker, ticker-items ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ํ…Œ๋งˆ ํŽธ์ง‘๊ธฐ์—์„œ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‹น ์ง€์›๋‹ˆ๋‹ค.

  • ์ƒˆ ์ฝ”๋“œ ์‚ฝ์ž…: ์œ„์—์„œ ์ œ๊ณต๋œ ์ตœ์ข… ์™„์„ฑ ์ฝ”๋“œ๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•˜์—ฌ, Blogger์˜ ํ…Œ๋งˆ ํŽธ์ง‘ ๋ชจ๋“œ์—์„œ </body> ํƒœ๊ทธ ์ง์ „์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

2. ๋‹น์‹ ๋งŒ์˜ Google Apps Script ๋งŒ๋“ค๊ธฐ

  • ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ: https://script.google.com ์ ‘์† → ์ƒˆ ํ”„๋กœ์ ํŠธ ํด๋ฆญ.

  • ์ฝ”๋“œ ๋ถ™์—ฌ๋„ฃ๊ธฐ: Code.gs ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ  ์•„๋ž˜ ํ”„๋ก์‹œ ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์€ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

JavaScript
function doGet(e) {
  return ContentService
    .createTextOutput(getKoreaEconomyTrends())
    .setMimeType(ContentService.MimeType.JSON);
}
//... (๋‚˜๋จธ์ง€ getKoreaEconomyTrends ํ•จ์ˆ˜ ์ฝ”๋“œ ์ „์ฒด) ...

3. Apps Script๋ฅผ ์›น ์•ฑ์œผ๋กœ ๋ฐฐํฌํ•˜๊ธฐ

์ด ๊ณผ์ •์—์„œ URL์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. (๊ฐ€์žฅ ์ค‘์š”!)

  • ๋ฐฐํฌ ์‹œ์ž‘: ์ƒ๋‹จ 【๋ฐฐํฌ】【์ƒˆ ๋ฐฐํฌ】์›น ์•ฑ ์„ ํƒ.

  • ์„ค์ • ํ™•์ธ:

    • ์‹คํ–‰ ๋Œ€์ƒ: ๋‚˜

    • ์•ก์„ธ์Šค ๊ถŒํ•œ: ๋ˆ„๊ตฌ๋‚˜(์ต๋ช… ํฌํ•จ)

  • ๋ฐฐํฌ ๋ฐ ์Šน์ธ: 【๋ฐฐํฌ】 ํด๋ฆญ → “๊ฒ€์ฆ๋˜์ง€ ์•Š์Œ”์ด ๋œจ๋ฉด:

    • 【๊ณ ๊ธ‰】【๊ณ„์†ํ•˜๊ธฐ(์•ˆ์ „ํ•˜์ง€ ์•Š์Œ)】【ํ—ˆ์šฉ】 ํด๋ฆญ.

  • URL ๋ณต์‚ฌ: ๋ฐฐํฌ ์™„๋ฃŒ ํ™”๋ฉด์—์„œ /exec๋กœ ๋๋‚˜๋Š” URL ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.


์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์œผ๋กœ, ๋ธ”๋กœ๊ทธ์ œ์ž‘์— ๋„์›€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ •์ƒ ์˜ˆ์‹œ: https://script.google.com/macros/s/๋‹น์‹ ์ด-๋ณต์‚ฌํ•œ-๊ธด-ID/exec

4. ๋ธ”๋กœ๊ทธ ์ฝ”๋“œ์— URL ์ ์šฉ ๋ฐ ์ €์žฅ

  • ๋ธ”๋กœ๊ทธ ํ…Œ๋งˆ ํŽธ์ง‘ ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ, MY_PROXY ๋ถ€๋ถ„์„ 3๋‹จ๊ณ„์—์„œ ๋ณต์‚ฌํ•œ URL๋กœ ์ •ํ™•ํžˆ ๊ต์ฒดํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

JavaScript
const MY_PROXY = 'https://script.google.com/macros/s/๋‹น์‹ ์ด-๋ณต์‚ฌํ•œ-๊ธด-ID/exec';

์ตœ์ข… ํ™•์ธ์šฉ ์ž„์‹œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ (์„ ํƒ ์‚ฌํ•ญ)

Apps Script URL ๋ฐฐํฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ, ํ‹ฐ์ปค์˜ CSS/JS๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด fetch ์ฝ”๋“œ ๋Œ€์‹  ์ž ์‹œ ์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋ณด์„ธ์š”.

document.getElementById('ticker-list').innerHTML = `
  • ์ฝ”์Šคํ”ผ 2580#1
  • ํ™˜์œจ 1482์›#2
  • ๊ธˆ๋ฆฌ ๋™๊ฒฐ#3
  • ๋น„ํŠธ์ฝ”์ธ 1.1์–ต#4
  • ์„œ์šธ ์•„ํŒŒํŠธ ๊ธ‰๋“ฑ#5

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ:: 
    document.getElementById('ticker-list').innerHTML = `<li><a href="#" target="_blank">์ฝ”์Šคํ”ผ 2580</a><span>#1</span></li><li><a href="#" target="_blank">ํ™˜์œจ 1482์›</a><span>#2</span></li><li><a href="#" target="_blank">๊ธˆ๋ฆฌ ๋™๊ฒฐ</a><span>#3</span></li><li><a href="#" target="_blank">๋น„ํŠธ์ฝ”์ธ 1.1์–ต</a><span>#4</span></li><li><a href="#" target="_blank">์„œ์šธ ์•„ํŒŒํŠธ ๊ธ‰๋“ฑ</a><span>#5</span></li>`;

    ์ด ๊ธ€๋งŒ ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ ํ•˜์‹œ๋ฉด ์˜ค๋ฅธ์ชฝ ๋์—์„œ ๋”ฑ ๋‚˜ํƒ€๋‚˜์„œ ์™ผ์ชฝ์œผ๋กœ ์ญ‰์ญ‰ ์‚ฌ๋ผ์ง€๋Š”, ๋นˆ ๊ณต๊ฐ„ ์—†๋Š” ์‹ค์‹œ๊ฐ„ ๊ฒฝ์ œ ํ‹ฐ์ปค๊ฐ€ ๋‹น์‹  ๋ธ”๋กœ๊ทธ์— ์˜์›ํžˆ ์ž๋ฆฌ ์žก์Šต๋‹ˆ๋‹ค.

    ์ด์ œ ๋‹น์‹ ๋„ ์ง„์งœ ํ”„๋กœ ๊ฒฝ์ œ ๋ธ”๋กœ๊ฑฐ! ์™„์„ฑ๋˜๋ฉด ๊ผญ ๋Œ“๊ธ€๋กœ “์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค!” ํ•œ ์ค„๋งŒ ๋‚จ๊ฒจ ์ฃผ์„ธ์š”. ์ œ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋ฐ•์ˆ˜ ์ณ๋“œ๋ฆด๊ฒŒ์š” ๐ŸŽ‰

    ── ๊ฐ€๋‚˜ํˆฌ๋ฐ์ด ๋“œ๋ฆผ. 2025.11.28

    #๊ฐ€๋‚˜ ํˆฌ๋ฐ์ด #ganatoday

    ๊ทธ๋ฆฐ์•„ํ”„๋กœ

    ์ธ๊ธฐ ๊ธ€

    prfparkst

    ๋ฒ„ํ‚ท๋ฆฌ์ŠคํŠธ, ๊ฑธ์–ด์„œ122๊ฐœ๊ตญ์—ฌํ–‰, ์ฑ—์ง€ํ”ผํ‹ฐ, ์• ๋“œ์„ผ์Šค,๋ธ”๋กœ๊ทธ,์‹œ๋‚˜๋ฆฌ์˜ค,์ˆ์ธ 

    ๋Œ“๊ธ€ ์“ฐ๊ธฐ

    ๋‹ค์Œ ์ด์ „