<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>수다쟁이</title>
    <link>https://chatboy.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 31 May 2026 03:30:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>떠버리</managingEditor>
    <image>
      <title>수다쟁이</title>
      <url>https://tistory1.daumcdn.net/tistory/6948105/attach/65231a0779124df4a2d8b65dbda46b5b</url>
      <link>https://chatboy.tistory.com</link>
    </image>
    <item>
      <title>바이브 코딩 뜻</title>
      <link>https://chatboy.tistory.com/673</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;바이브 코딩&lt;/b&gt;&quot;은 기술과 감성의 경계를 허무는 신조어로, 인간이 인공지능과 대화하며 원하는 결과물을 얻는 새로운 형태의 개발 방식을 의미합니다. 기존의 프로그래밍과 달리, 코딩 지식 없이도 아이디어만 설명하면 AI가 알아서 구현해주는 방식으로, 최근 오픈AI의 안드레이 카르파시가 이를 소개하며 급속히 확산되고 있습니다. SNS와 개발 커뮤니티에서는 실제로 몇 시간 만에 완성된 서비스 사례들도 공유되며 &lt;b&gt;AI 코딩 패러다임의 대중화&lt;/b&gt;를 보여주고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by9447/btsPEoWUQ2b/lNgkmwBxhATZBXVVF3KnKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by9447/btsPEoWUQ2b/lNgkmwBxhATZBXVVF3KnKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by9447/btsPEoWUQ2b/lNgkmwBxhATZBXVVF3KnKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby9447%2FbtsPEoWUQ2b%2FlNgkmwBxhATZBXVVF3KnKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe5cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 바이브 코딩 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;바이브 코딩&lt;/b&gt;은 기존의 프로그래머 중심 코딩 방식과 달리, 일반 사용자가 AI에게 자연어로 원하는 프로그램의 &amp;lsquo;느낌&amp;rsquo;이나 &amp;lsquo;기능&amp;rsquo;을 전달하면 AI가 이를 코드로 구현해주는 개발 방식을 말합니다. 일종의 감각 중심 개발, 즉 &amp;lsquo;느낌을 구현하는 코딩&amp;rsquo;이라는 의미로, 감성과 기술이 결합된 신개념 프로그래밍입니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: AI에게 느낌과 기능을 말로 전달하면, 자동으로 코드를 생성해주는 새로운 개발 방식&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 자연어 코딩, 노코드 개발, 생성형 코딩&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 생성형 AI, 텍스트 투 앱, AI 프로그래밍&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe5cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 바이브 코딩 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;바이브 코딩&lt;/b&gt;&quot;이라는 용어는 오픈AI 창립 멤버인 &lt;b&gt;안드레이 카르파시&lt;/b&gt;가 처음 언급하며 알려졌습니다. 그는 기존의 코드 기반 개발이 아닌, 인간의 감성과 직관을 자연어로 표현하고, AI가 이를 자동으로 프로그래밍하는 시대가 도래했다고 강조했습니다. 이후 온라인 커뮤니티와 IT 스타트업 업계에서 빠르게 퍼지며 새로운 개발 트렌드로 자리잡게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe5cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 바이브 코딩 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;바이브 코딩&lt;/b&gt;은 복잡한 문법이나 로직 없이도, 원하는 분위기나 기능을 AI에게 설명하면 그것이 바로 프로그램 형태로 구현되는 것이 특징입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;사용자가 '잔잔한 음악이 흐르는 감성 일기장 앱'을 말하면, AI가 자동으로 앱을 구현&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;&amp;lsquo;한 줄 일기 입력창&amp;rsquo;과 &amp;lsquo;하늘색 배경&amp;rsquo;을 설명하자 AI가 바로 웹페이지 완성&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;&amp;lsquo;카페 느낌 나는 예약 시스템&amp;rsquo;을 요청하자 디자인과 기능을 포함해 AI가 전부 생성&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe5cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 바이브 코딩 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;바이브 코딩&lt;/b&gt;은 아직 공식 한자어는 없지만, &amp;lsquo;느낌(感)&amp;rsquo;과 &amp;lsquo;구현(具現)&amp;rsquo; 또는 &amp;lsquo;자연어 코딩&amp;rsquo;(自然語 Coding) 등으로 의미를 나타낼 수 있습니다. 영어 표현으로는 &lt;b&gt;vibe coding&lt;/b&gt;, &lt;b&gt;prompt-to-code&lt;/b&gt;, 또는 &lt;b&gt;natural language programming&lt;/b&gt;이라는 용어가 쓰입니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 감구현(感具現), 자연어 코딩(自然語 Coding)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Vibe Coding, Prompt-to-Code, Natural Language Programming&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;바이브 코딩&lt;/b&gt;은 기술이 인간의 감성을 따라가는 흐름을 잘 보여주는 대표적인 신조어로, 앞으로 소프트웨어 개발뿐 아니라 콘텐츠 제작과 디자인 등 다양한 분야로 확장될 가능성이 큽니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>감성기술</category>
      <category>바이브 코딩</category>
      <category>생성형AI</category>
      <category>신조어사전</category>
      <category>오픈AI</category>
      <category>자연어코딩</category>
      <category>코딩트렌드</category>
      <category>텍스트투앱</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/673</guid>
      <comments>https://chatboy.tistory.com/673#entry673comment</comments>
      <pubDate>Tue, 29 Jul 2025 22:27:55 +0900</pubDate>
    </item>
    <item>
      <title>손절각 뜻</title>
      <link>https://chatboy.tistory.com/672</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;손절각&lt;/b&gt;&quot;은 누군가와의 관계를 끊어야 할 타이밍이 왔다는 뜻으로, &lt;b&gt;&amp;lsquo;손절&amp;rsquo;&lt;/b&gt;과 &lt;b&gt;&amp;lsquo;~각&amp;rsquo;&lt;/b&gt;(각이 나왔다, 각도기가 나왔다의 줄임말)이 결합된 신조어입니다. 누군가가 나에게 부정적이거나 부담스러운 행동을 했을 때, 더 이상 관계를 유지할 필요가 없다고 느껴졌을 때 주로 사용됩니다. 특히 MZ세대 사이에서 &amp;lsquo;자기 관리&amp;rsquo;와 &amp;lsquo;관계 청산&amp;rsquo;이 중요해지면서 이 표현은 다양한 상황에서 유행처럼 쓰이고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjI1Z1/btsPAuSffSg/LNEKZlZ4CrB2NdLa5UNUJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjI1Z1/btsPAuSffSg/LNEKZlZ4CrB2NdLa5UNUJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjI1Z1/btsPAuSffSg/LNEKZlZ4CrB2NdLa5UNUJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjI1Z1%2FbtsPAuSffSg%2FLNEKZlZ4CrB2NdLa5UNUJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffd6d6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 손절각 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;손절각&lt;/b&gt;&quot;은 &quot;&lt;b&gt;이제 그만 손절(관계 끊기)해야겠다&lt;/b&gt;&quot;는 의미로 쓰이며, 사람이나 상황이 더 이상 견디기 힘들거나 신뢰가 깨졌을 때 이를 과감하게 끊어야 할 &lt;b&gt;결정적 시점&lt;/b&gt;을 뜻합니다. 과거에는 인간관계에서 무작정 참는 경향이 있었다면, 최근 세대는 더 효율적이고 건강한 관계를 중시하면서 &lt;b&gt;손절&lt;/b&gt;이 하나의 문화로 자리잡고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 더 이상 관계를 유지할 수 없는 상황이 되었을 때 손절할 타이밍이 왔다는 의미&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 손절, 절교각, 노터치각&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 회피각, 차단각, 사이드컷&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffd6d6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 손절각 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;손절&lt;/b&gt;&quot;은 본래 주식 용어에서 유래했습니다. &amp;lsquo;손해를 감수하고 주식을 정리한다&amp;rsquo;는 의미에서, 인간관계에도 같은 맥락으로 사용되기 시작한 것입니다. 이후 SNS와 커뮤니티에서 &quot;&lt;b&gt;손절각&lt;/b&gt;&quot;이라는 표현이 등장하면서, 관계를 끊어야 할 &amp;lsquo;각이 나왔다&amp;rsquo;는 식으로 자주 쓰이게 되었습니다. 특히 카톡 차단이나 언팔로우 같은 행동이 쉽고 자연스러워진 시대적 배경도 이 용어가 퍼지게 된 이유 중 하나입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffd6d6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 손절각 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;손절각&lt;/b&gt;이라는 표현은 온라인뿐만 아니라 실제 대화에서도 자주 사용됩니다. 반복되는 실망이나 배신, 이기적인 행동 등으로 인해 관계를 정리할 때 자조 섞인 농담처럼 쓰이기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;또 약속 어긴 거 실화냐? &lt;b&gt;손절각&lt;/b&gt;이다 진짜.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;단톡방에서 험담하던 거 들켰다며? &lt;b&gt;손절각&lt;/b&gt;이네~&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;기프티콘 주자마자 차단? &lt;b&gt;손절각&lt;/b&gt; 제대로 나왔네.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br7l7T/btsPANw8sQF/jQa91BKqTOkhmOKd4pNRyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br7l7T/btsPANw8sQF/jQa91BKqTOkhmOKd4pNRyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br7l7T/btsPANw8sQF/jQa91BKqTOkhmOKd4pNRyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr7l7T%2FbtsPANw8sQF%2FjQa91BKqTOkhmOKd4pNRyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffd6d6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 손절각 영어 및 한자 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;손절각&lt;/b&gt;&quot;은 영어로는 명확한 대응 표현이 없지만 상황에 따라 &quot;&lt;b&gt;Time to cut ties&lt;/b&gt;&quot;, &quot;&lt;b&gt;This is the last straw&lt;/b&gt;&quot;, &quot;&lt;b&gt;I'm done with them&lt;/b&gt;&quot; 등으로 의역할 수 있습니다. 한자로는 직접 대응되는 표현은 없으나, &lt;b&gt;절교(絶交)&lt;/b&gt;, &lt;b&gt;단절(斷絶)&lt;/b&gt; 등의 단어를 응용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 절교(絶交), 단절(斷絶)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Time to cut ties, This is the last straw, I'm done with them&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;손절각&lt;/b&gt;&quot;은 건강한 인간관계를 위한 경계 설정을 나타내는 표현으로 자리 잡으며, 현대 사회에서 자기 방어의 수단으로 널리 활용되고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>MZ세대</category>
      <category>관계정리</category>
      <category>손절각</category>
      <category>신조어</category>
      <category>인간관계</category>
      <category>인터넷용어</category>
      <category>절교</category>
      <category>트렌드</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/672</guid>
      <comments>https://chatboy.tistory.com/672#entry672comment</comments>
      <pubDate>Sun, 27 Jul 2025 20:14:01 +0900</pubDate>
    </item>
    <item>
      <title>낋여오거라 밈 뜻과 활용 예시</title>
      <link>https://chatboy.tistory.com/671</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;낋여오거라&lt;/b&gt;&quot;는 전라도 방언에서 파생된 유행어로, 본래 의미와 전혀 다르게 쓰이면서 인터넷 커뮤니티에서 큰 인기를 끌고 있는 밈입니다. 이 표현은 당황스럽거나 어이없는 상황에 던지는 무의미한 말로, 감정을 익살스럽게 표현하는 데 활용됩니다. 최근에는 디시인사이드나 웃긴대학 등의 온라인 커뮤니티를 중심으로 퍼지며, 다양한 댓글이나 짤방, 밈 영상에까지 활용되는 등 새로운 유행어로 자리 잡았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ozlDf/btsPCj9hQkc/xXXNJsf04GHLLjDvYtrN01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ozlDf/btsPCj9hQkc/xXXNJsf04GHLLjDvYtrN01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ozlDf/btsPCj9hQkc/xXXNJsf04GHLLjDvYtrN01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FozlDf%2FbtsPCj9hQkc%2FxXXNJsf04GHLLjDvYtrN01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fde2e4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 낋여오거라 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;낋여오거라&lt;/b&gt;&quot;는 전라도 사투리인 &quot;&lt;b&gt;낋이다&lt;/b&gt;&quot;(끓이다의 방언형)에서 유래한 표현으로, &quot;끓여 오너라&quot;라는 말을 변형한 것입니다. 하지만 인터넷 밈으로 사용될 때는 본래 의미와는 다르게, 황당하거나 어처구니없는 상황에서 무작정 던지는 말처럼 쓰입니다. 말의 뜻보다는 어감과 상황에 따라 감정을 과장되게 표현하려는 용도로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;전라도 사투리 '끓이다'에서 유래된 표현으로, 감정표출용 무의미한 외침&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 어이없네, 이게 말이여 방구여, 읭?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: ㅇㄱㄹㅇ, 말잇못, 무야호&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fde2e4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 낋여오거라 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;낋여오거라&lt;/b&gt;&quot;는 전라도 방언인 &quot;&lt;b&gt;낋이다&lt;/b&gt;&quot;가 유머스럽게 사용되면서 생긴 밈입니다. 본래 '음식을 끓이다'라는 의미였지만, 이 말이 디시인사이드나 웃긴대학 같은 커뮤니티에서 상황 맥락 없이 갑자기 튀어나오며 유행하게 되었죠. 상황에 적합하지 않은 단어의 등장이 오히려 웃음을 유발하고, 그 유쾌한 어감을 통해 밈으로 확산되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fde2e4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 낋여오거라 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;낋여오거라&lt;/b&gt;는 실제로는 논리적인 맥락 없이 감정을 폭발시키는 용도로 쓰이기 때문에, 웃긴 상황이나 답답한 상황에 의도적으로 던져지는 경우가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fff7e6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;에어컨 고장났다고? &lt;b&gt;낋여오거라&lt;/b&gt;!&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;이 가격에 배달비가 또 붙는다고? &lt;b&gt;낋여오거라&lt;/b&gt;!!&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;과제 제출 마감 연기 안 된다고?! &lt;b&gt;낋여오거라!!!&lt;/b&gt;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsbFom/btsPAtZ2HFO/nhAM0NIlsOLImSkkD0zf91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsbFom/btsPAtZ2HFO/nhAM0NIlsOLImSkkD0zf91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsbFom/btsPAtZ2HFO/nhAM0NIlsOLImSkkD0zf91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsbFom%2FbtsPAtZ2HFO%2FnhAM0NIlsOLImSkkD0zf91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;300&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fde2e4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 낋여오거라 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;낋여오거라&lt;/b&gt;&quot;는 표준어가 아니기 때문에 직접적인 한자 표현은 존재하지 않지만, 상황 자체를 설명할 수 있는 단어로는 &lt;b&gt;당황(唐慌)&lt;/b&gt;이나 &lt;b&gt;감정 폭발(感情爆發)&lt;/b&gt; 등을 사용할 수 있습니다. 영어로는 &quot;I can't believe this!&quot;, &quot;Unbelievable!&quot;, 혹은 단순히 &quot;What the heck!&quot;처럼 당황스러움을 표현하는 감탄사로 대응할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 당황(唐慌), 감정 폭발(感情爆發)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: &quot;What the heck!&quot;, &quot;I can't believe this!&quot;, &quot;Come on!&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;낋여오거라&lt;/b&gt;&quot;는 지역 방언이 유머 코드로 변형되어 밈으로 발전한 대표적인 예로, 한국어 특유의 언어적 유희와 감정 과잉 표현이 만나 새로운 문화 콘텐츠로 소비되고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>감정 표현</category>
      <category>낋여오거라</category>
      <category>디시인사이드</category>
      <category>밈</category>
      <category>방언 유머</category>
      <category>신조어</category>
      <category>웃긴대학</category>
      <category>유행어</category>
      <category>인터넷 밈</category>
      <category>한국 밈</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/671</guid>
      <comments>https://chatboy.tistory.com/671#entry671comment</comments>
      <pubDate>Sun, 27 Jul 2025 11:24:44 +0900</pubDate>
    </item>
    <item>
      <title>Italian brainrot, 이탈리아인처럼 굴기</title>
      <link>https://chatboy.tistory.com/670</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;Italian brainrot&lt;/b&gt;&quot;는 특정 문화, 특히 이탈리아 또는 이탈리아 관련 콘텐츠에 과하게 몰입하거나 과잉 반응하는 인터넷 유행어입니다. 이 표현은 틱톡(TikTok)이나 트위터(X) 등에서 밈(meme)처럼 사용되며, 이탈리아 음식, 언어, 제스처, 라이프스타일에 집착적으로 반응하는 사람들을 유머러스하게 묘사할 때 쓰입니다. 실제 이탈리아인이 아닌 사람도 쉽게 &amp;lsquo;이탈리아인처럼 굴기&amp;rsquo;에 빠지는 현상을 말하죠. 이탈리아 감성에 대한 과도한 애정이 때로는 과장된 코미디로 승화되며 밈으로 자리잡았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;1167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPMb7x/btsPB18Jx1N/SO3mBI8VRdEfl88YpiwLdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPMb7x/btsPB18Jx1N/SO3mBI8VRdEfl88YpiwLdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPMb7x/btsPB18Jx1N/SO3mBI8VRdEfl88YpiwLdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPMb7x%2FbtsPB18Jx1N%2FSO3mBI8VRdEfl88YpiwLdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;709&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff0c1; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Italian brainrot 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;Italian brainrot&lt;/b&gt;&quot;는 이탈리아 문화나 감성에 심취한 나머지 모든 행동을 이탈리아식으로 해석하거나 과장되게 모방하는 태도를 말합니다. 피자, 파스타, 손 제스처, 오페라 음악 등 이탈리아와 연관된 모든 것에 과도한 열광을 보이며, 마치 '뇌가 이탈리아화된 것처럼' 행동하는 것을 뜻합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fff0c1;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;이탈리아 문화에 과도하게 몰입해 모든 것을 이탈리아식으로 인식하거나 표현하는 상태&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 문화 뇌절, 국가 감성 몰입, themed roleplay&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: Eurocore, Roman Empire brainrot, Francophile&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff0c1; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Italian brainrot 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;Italian brainrot&lt;/b&gt;&quot;는 주로 틱톡에서 짧은 패러디 영상이나 손 제스처를 강조하는 밈에서 시작되어 트위터(X) 등으로 퍼졌습니다. 사람들이 음식이나 일상 속 사소한 상황에 대해 이탈리아식 반응을 보이는 콘텐츠가 유행하면서, 이러한 과몰입 상태를 &amp;lsquo;&lt;b&gt;brainrot(뇌가 썩었다는 슬랭)&lt;/b&gt;&amp;rsquo;라는 단어와 결합하여 표현하게 된 것입니다. 즉, 이탈리아 감성에 너무 빠져 자신이 마치 이탈리아인처럼 행동하는 유머입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt; (adsbygoogle = window.adsbygoogle || []).push({}); &lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff0c1; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Italian brainrot 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Italian brainrot&lt;/b&gt;는 일상에서 이탈리아와 전혀 관련 없는 상황에서도 과장된 이탈리아 제스처나 억양, 감성을 흉내 낼 때 자주 사용되며, 그 자체로 하나의 유머 포인트가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;피자 먹으면서 손가락 오므리고 &amp;lsquo;Mamma mia!&amp;rsquo; 외치기 &amp;ndash; &lt;b&gt;Italian brainrot&lt;/b&gt; 대표 행동&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;친구가 파스타 면 조리 시간 어기면 &amp;lsquo;You dishonor my famiglia!&amp;rsquo; &amp;ndash; &lt;b&gt;Italian brainrot&lt;/b&gt; 발현&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;&amp;lsquo;에스프레소 아니면 커피가 아냐&amp;rsquo;라는 태도도 &lt;b&gt;Italian brainrot&lt;/b&gt; 증상 중 하나&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;1187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PHYwd/btsPAKfOnsp/qVuHFHv5gfUGUvPtapLu4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PHYwd/btsPAKfOnsp/qVuHFHv5gfUGUvPtapLu4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PHYwd/btsPAKfOnsp/qVuHFHv5gfUGUvPtapLu4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPHYwd%2FbtsPAKfOnsp%2FqVuHFHv5gfUGUvPtapLu4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;640&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;1187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff0c1; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. Italian brainrot 관련 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Italian brainrot&lt;/b&gt;는 농담이나 풍자적인 의미로 사용되는 만큼, 이를 표현할 수 있는 다양한 패러디 표현이 존재합니다. 일부는 인터넷 용어이며, 일부는 문화적 현상을 지칭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;관련 영어 표현&lt;/b&gt;&lt;/span&gt;: &amp;ldquo;Roman Empire obsession&amp;rdquo;, &amp;ldquo;Mamma mia mode&amp;rdquo;, &amp;ldquo;Chef kiss moment&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;밈 요소&lt;/b&gt;&lt;/span&gt;: 손가락 오므리기 제스처, 배경에 오페라 음악, 극적인 감탄사(MAMMA MIA!)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;Italian brainrot&lt;/b&gt;&quot;는 인터넷 밈이지만, 문화에 대한 애정이 과장되면 어떻게 유쾌하게 표현될 수 있는지를 보여주는 흥미로운 현상입니다. 단순한 유머를 넘어, 문화 간 소통과 패러디가 결합된 온라인 세대의 표현 방식이라 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>brainrot 밈</category>
      <category>internet slang</category>
      <category>italian brainrot</category>
      <category>Mamma Mia</category>
      <category>tiktok 유행어</category>
      <category>감성 과몰입</category>
      <category>문화 밈</category>
      <category>손가락 제스처</category>
      <category>유럽 감성</category>
      <category>이탈리아 밈</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/670</guid>
      <comments>https://chatboy.tistory.com/670#entry670comment</comments>
      <pubDate>Sat, 26 Jul 2025 19:30:50 +0900</pubDate>
    </item>
    <item>
      <title>식후땡, 식후땡 뜻</title>
      <link>https://chatboy.tistory.com/669</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;식후땡&lt;/b&gt;은 '식사 후 담배 한 대'라는 의미로, 주로 중장년 남성층에서 회자되던 표현입니다. 최근에는 건강 이슈와 담배에 대한 인식 변화로 인해, 금연 캠페인과 문화 패러디의 대상으로도 주목받고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oc61t/btsNYs1bnRl/SWYyk7MbYPn8fkq8cbJG61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oc61t/btsNYs1bnRl/SWYyk7MbYPn8fkq8cbJG61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oc61t/btsNYs1bnRl/SWYyk7MbYPn8fkq8cbJG61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foc61t%2FbtsNYs1bnRl%2FSWYyk7MbYPn8fkq8cbJG61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 식후땡 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;식후땡&lt;/b&gt;은 '밥을 먹은 후 한 대 피우는 담배'를 지칭하는 속어로, 오랜 시간 동안 습관처럼 쓰이던 표현입니다. 흡연자들 사이에서는 식사 후에 느끼는 포만감과 함께 담배 한 대를 피우며 휴식을 취하는 행위를 의미했지만, 최근에는 풍자적 의미로 재조명되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fff0f0; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffd7d7;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 식사 직후 피우는 담배 또는 그 행위&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #e3f2fd;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 식사 후 한 대, 휴식 흡연&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fff9c4;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 담배 브레이크, 흡연 루틴, 금연 패러디&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 식후땡의 변화&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lsquo;식후땡&amp;rsquo;이라는 표현은 과거와 달리 이제는 풍자적 맥락에서 쓰이며, 건강 캠페인에서도 반어적으로 활용됩니다. 아래 표는 &amp;lsquo;식후땡&amp;rsquo;의 사용 맥락과 인식 변화 사례를 정리한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; 내용 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;과거&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;식사 후 담배는 습관적인 휴식 수단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;현재&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;건강 위험 요소, 풍자 및 금연 메시지로 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;문화 활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px;&quot;&gt;웹툰, 밈, 광고 패러디 등에서 재조명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
  (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 식후땡 관련 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lsquo;&lt;b&gt;식후땡&lt;/b&gt;&amp;rsquo;은 영어로는 &amp;ldquo;&lt;b&gt;after-meal smoke&lt;/b&gt;&amp;rdquo; 혹은 &amp;ldquo;&lt;b&gt;post-lunch cigarette&lt;/b&gt;&amp;rdquo; 정도로 번역되며, 한자로는 직접 대응하는 표현은 없지만 &amp;lsquo;食後煙(식후연)&amp;rsquo;이라 의역할 수 있습니다. 현재는 건강을 위한 금연 문화 속에 다양한 콘텐츠로 재해석되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f8bbd0; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffebee;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 食後煙(식후연)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #e1f5fe;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: &amp;ldquo;After-meal smoke&amp;rdquo;, &amp;ldquo;Post-meal cigarette&amp;rdquo;, &amp;ldquo;Meal break puff&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>건강 패러디</category>
      <category>금연 캠페인</category>
      <category>담배 문화</category>
      <category>밈 문화</category>
      <category>생활 속 풍자</category>
      <category>식사 후 흡연</category>
      <category>식후땡</category>
      <category>신조어</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/669</guid>
      <comments>https://chatboy.tistory.com/669#entry669comment</comments>
      <pubDate>Wed, 14 May 2025 15:21:07 +0900</pubDate>
    </item>
    <item>
      <title>카본 중립, 카본 중립 뜻</title>
      <link>https://chatboy.tistory.com/668</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;카본 중립&lt;/b&gt;&amp;rdquo;은 일정 기간 동안 발생한 온실가스 배출량을 산림 흡수, 탄소 포집&amp;middot;저장 기술(CCS) 등 온실가스 저감 활동으로 상쇄하여 순 배출량(Net Zero)을 &amp;lsquo;0&amp;rsquo;으로 만드는 개념입니다. 이는 기후 위기에 대응하기 위한 국제 사회의 핵심 목표로 자리 잡았으며, 각국 정부와 기업이 저탄소 경제로 전환하기 위해 경쟁적으로 채택하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA89p0/btsNB5fWiaF/S3g85xdLxuytDBgv4GXHt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA89p0/btsNB5fWiaF/S3g85xdLxuytDBgv4GXHt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA89p0/btsNB5fWiaF/S3g85xdLxuytDBgv4GXHt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA89p0%2FbtsNB5fWiaF%2FS3g85xdLxuytDBgv4GXHt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 카본 중립의 의미&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;카본 중립&lt;/b&gt;&amp;rdquo;은 단순히 탄소 배출을 줄이는 것에 그치지 않고, 배출된 탄소를 동등한 양만큼 흡수&amp;middot;저장하여 실질적인 순배출량을 &amp;lsquo;0&amp;rsquo;으로 만들어 기후 변화 완화에 기여하는 전략입니다. 전 세계적으로 에너지 전환, 전기차 확대, 재생에너지 의존도 제고 등 다양한 정책과 기술 개발이 이에 맞춰 진행되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/span&gt;: 온실가스 배출량을 온실가스 저감&amp;middot;흡수 활동으로 상쇄하여 순배출량을 &amp;lsquo;0&amp;rsquo;으로 만드는 상태&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 넷 제로(Net Zero), 탄소 중성(Carbon Neutral)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 용어&lt;/b&gt;&lt;/span&gt;: 재생에너지, 탄소 포집&amp;middot;저장(CCS), 탄소 배출권 거래제&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 카본 중립의 등장 배경&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;카본 중립&lt;/b&gt;&amp;rdquo; 개념은 2015년 파리협정 채택과 함께 전 세계적으로 확산되었습니다. 파리협정에서는 지구 평균 온도 상승을 산업화 이전 대비 &amp;lsquo;2℃ 이하&amp;rsquo;로 제한하고, 이상 기후를 방지하기 위해 &amp;lsquo;1.5℃ 목표&amp;rsquo;를 제시했는데, 이를 달성하기 위한 핵심 수단이 바로 각국의 카본 중립 선언입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 카본 중립 실천 사례&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세계 여러 국가는 이미 카본 중립 목표와 로드맵을 발표했습니다. 예컨대, 유럽연합(EU)은 2050년 &amp;lsquo;기후 중립&amp;rsquo;을 선언했고, 대한민국은 2030년 국가 온실가스 감축 목표(NDC)를 강화하여 2050년까지 카본 중립을 실현하겠다고 발표했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;유럽연합은 2050년을 기점으로 화석연료 사용을 단계적으로 중단하기로 합의했다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;국내 대기업 A사는 전력 구매를 100% 재생에너지로 전환하여 카본 중립을 달성했다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;중소기업 지원 프로그램을 통해 탄소 포집&amp;middot;저장 기술이 보급되고 있다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;카본 중립&lt;/b&gt;&amp;rdquo;은 한자로 &amp;ldquo;碳中立&amp;rdquo;로 번역할 수 있으며, 영어권에서는 &amp;ldquo;&lt;b&gt;Carbon Neutrality&lt;/b&gt;&amp;rdquo; 또는 &amp;ldquo;&lt;b&gt;Net Zero Emissions&lt;/b&gt;&amp;rdquo;로 표기합니다. 국제 협상 문서에서도 해당 용어들이 널리 사용되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 碳中立&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Carbon Neutrality, Net Zero Emissions&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;카본 중립&lt;/b&gt;&amp;rdquo;은 기후 위기 극복의 열쇠로, 전 지구적 협력과 기술 혁신을 통해 실현 가능한 미래를 제시합니다. 앞으로 우리 사회와 산업 전반에서 더욱 중요한 기준이 될 것입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>기후변화</category>
      <category>재생에너지</category>
      <category>카본 중립</category>
      <category>탄소중립</category>
      <category>탄소포집저장</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/668</guid>
      <comments>https://chatboy.tistory.com/668#entry668comment</comments>
      <pubDate>Mon, 28 Apr 2025 22:57:51 +0900</pubDate>
    </item>
    <item>
      <title>오버슈팅, 오버슈팅 뜻</title>
      <link>https://chatboy.tistory.com/667</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;오버슈팅&lt;/b&gt;&amp;rdquo;은 경제&amp;middot;금융 분야에서 환율이나 금리, 자산 가격 등이 단기간에 균형 수준을 넘어 급격히 상승하거나 하락하는 현상을 가리키는 용어입니다. 시장 참여자들의 기대 변화, 정책 충격, 외부 변수에 대한 과민 반응 등이 복합적으로 작용하여 발생하며, 이후 빠르게 되돌려지는 특징이 있습니다. 이러한 &lt;b&gt;오버슈팅&lt;/b&gt; 현상은 정책 결정자에게 예측되지 않은 부작용을 초래할 뿐만 아니라, 기업과 소비자에게도 큰 혼란을 야기할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qj0TX/btsNAcsQRUF/GsTnKRAUw0MZgaJ9X9zoZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qj0TX/btsNAcsQRUF/GsTnKRAUw0MZgaJ9X9zoZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qj0TX/btsNAcsQRUF/GsTnKRAUw0MZgaJ9X9zoZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqj0TX%2FbtsNAcsQRUF%2FGsTnKRAUw0MZgaJ9X9zoZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오버슈팅의 정의&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;오버슈팅&lt;/b&gt;&amp;rdquo;은 &amp;lsquo;초과(over)&amp;rsquo;와 &amp;lsquo;뛰어넘다(shoot)&amp;rsquo;의 합성어로, 통상적으로 환율모형에서 자주 언급됩니다. 예컨대, 중앙은행이 기준금리를 예상보다 크게 인상하면, 시장 금리가 과도하게 하락하거나 상승하여 균형점(장기적 실질 환율)에서 일시적으로 이탈하는 현상을 말합니다. 이러한 급격한 변동은 심리적 요인과 단기 자금 흐름의 집중 때문이며, 이후 조정 과정을 통해 점차 정상 수준으로 복귀하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/span&gt;: 단기간에 시장 균형 수준을 넘어선 급격한 가격&amp;middot;환율 변동&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;주요 사례&lt;/b&gt;&lt;/span&gt;: 1997년 외환위기 당시 원&amp;middot;달러 환율 급등, 2020년 팬데믹 초기 증시 대폭락&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 용어&lt;/b&gt;&lt;/span&gt;: 환율 변동성, 금리 충격, 자산 거품&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 오버슈팅의 원인&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;오버슈팅&lt;/b&gt;&quot;이 발생하는 주요 원인으로는 크게 세 가지를 들 수 있습니다. 첫째, 정책 충격(예: 예상 외 금리 인상&amp;middot;인하)이 시장의 기대를 일시에 재조정하게 만듭니다. 둘째, 글로벌 자금 이동이 빠르게 이루어져 단기 수급 불균형이 심화됩니다. 셋째, 알고리즘 매매와 고빈도 트레이딩이 급격한 방향성 거래를 확대하여 변동성을 증폭시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 오버슈팅의 영향&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오버슈팅&lt;/b&gt;은 금융 시장 전반에 걸쳐 다음과 같은 부정적 영향을 미칩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째, 환율 &lt;b&gt;오버슈팅&lt;/b&gt; 시 수입 물가가 급등하면서 기업의 원가 부담이 증가합니다. 둘째, 자산 가격의 &lt;b&gt;오버슈팅&lt;/b&gt;은 거품 붕괴 위험을 높여 투자자 손실로 이어집니다. 셋째, 단기적 시장 불안이 거시경제 안정성에 부정적 신호를 보내어 소비&amp;middot;투자 심리를 위축시킵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;환율 &lt;b&gt;오버슈팅&lt;/b&gt;으로 원자재 수입 가격이 15% 이상 급등했다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;주택 시장 &lt;b&gt;오버슈팅&lt;/b&gt; 이후 가격 조정 국면이 심화되고 있다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;금리 &lt;b&gt;오버슈팅&lt;/b&gt; 위험을 우려한 중앙은행이 사전 안내를 강화하고 있다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckBBqu/btsNAaBQ1MW/dhk5RKEVW6Vi33XkzD4ru1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckBBqu/btsNAaBQ1MW/dhk5RKEVW6Vi33XkzD4ru1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckBBqu/btsNAaBQ1MW/dhk5RKEVW6Vi33XkzD4ru1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckBBqu%2FbtsNAaBQ1MW%2Fdhk5RKEVW6Vi33XkzD4ru1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 오버슈팅 대응 방안&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;오버슈팅&lt;/b&gt;&quot;에 효과적으로 대응하기 위해서는 다음과 같은 정책 수단이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;사전 커뮤니케이션&lt;/b&gt;&lt;/span&gt;: 중앙은행&amp;middot;정부의 정책 방향을 명확히 안내하여 시장 기대를 안정화&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;유동성 조절&lt;/b&gt;&lt;/span&gt;: 단기자금 시장 개입을 통해 과도한 변동성 억제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;감세&amp;middot;재정 지원&lt;/b&gt;&lt;/span&gt;: 기업&amp;middot;가계 부담 완화를 통해 경제 둔화 리스크 최소화&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;오버슈팅&lt;/b&gt;&amp;rdquo;은 단기적인 시장 불안을 넘어 거시경제 전반에 잠재적 위기를 불러올 수 있는 만큼, 정책 당국과 시장 참여자의 협조적 대응이 무엇보다 중요합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>거시경제 안정</category>
      <category>금리 충격</category>
      <category>시장 불안</category>
      <category>오버슈팅</category>
      <category>유동성 조절</category>
      <category>자산 가격</category>
      <category>정책 커뮤니케이션</category>
      <category>환율 변동성</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/667</guid>
      <comments>https://chatboy.tistory.com/667#entry667comment</comments>
      <pubDate>Sun, 27 Apr 2025 12:48:04 +0900</pubDate>
    </item>
    <item>
      <title>그린메일, 그린메일 뜻</title>
      <link>https://chatboy.tistory.com/666</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 기업 인수합병(M&amp;amp;A) 과정에서 나타나는 전략적 투자 행위로, 특정 투자자가 기업의 주식을 대량으로 매입한 후, 경영권 위협을 무기로 해당 기업에 프리미엄을 요구하여 보유 주식을 되팔고 이익을 얻는 행위를 말합니다. 이는 기업 경영에 부담을 주는 행위로 간주되며, 일부 국가에서는 이를 규제하기 위한 법적 장치를 마련하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Jer1/btsNz2jrWP6/vuFUawpB2dLCkLfkESSvP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Jer1/btsNz2jrWP6/vuFUawpB2dLCkLfkESSvP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Jer1/btsNz2jrWP6/vuFUawpB2dLCkLfkESSvP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Jer1%2FbtsNz2jrWP6%2FvuFUawpB2dLCkLfkESSvP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 그린메일 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 투자자가 기업의 주식을 대량으로 매입하여 경영권을 위협한 후, 기업으로부터 프리미엄을 받고 주식을 되파는 전략적 투자 행위를 의미합니다. 이는 기업의 경영 안정성을 해칠 수 있으며, 일부 국가에서는 이를 규제하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;기업의 주식을 대량으로 매입하여 경영권을 위협한 후, 프리미엄을 받고 주식을 되파는 행위&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 경영권 위협, 적대적 M&amp;amp;A, 전략적 투자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 백기사, 황금낙하산, 포이즌필&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 그린메일 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;이라는 용어는 '녹색(green)'과 '협박(letter)'의 합성어로, 투자자가 기업을 협박하여 금전적 이익을 얻는 행위를 비유적으로 표현한 것입니다. 이는 1980년대 미국에서 처음 사용되었으며, 이후 전 세계적으로 알려지게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 그린메일 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그린메일&lt;/b&gt;은 기업의 경영권을 위협하여 금전적 이익을 얻는 전략으로, 실제 사례로는 1980년대 미국의 기업들이 이러한 행위로 인해 큰 피해를 입은 바 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;&lt;b&gt;그린메일&lt;/b&gt;로 인해 기업의 경영 안정성이 위협받고 있습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;투자자의 &lt;b&gt;그린메일&lt;/b&gt; 행위로 기업이 막대한 손실을 입었습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;정부는 &lt;b&gt;그린메일&lt;/b&gt;을 방지하기 위한 법적 장치를 마련하고 있습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGeUX6/btsNCaNJVKy/Ll8ld6T6bPjMerg9AQLh3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGeUX6/btsNCaNJVKy/Ll8ld6T6bPjMerg9AQLh3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGeUX6/btsNCaNJVKy/Ll8ld6T6bPjMerg9AQLh3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGeUX6%2FbtsNCaNJVKy%2FLl8ld6T6bPjMerg9AQLh3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 그린메일 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그린메일&lt;/b&gt;은 한자로 '녹색 협박(綠色脅迫)'으로 표현할 수 있으며, 영어로는 'Greenmail'이라고 합니다. 이는 기업의 경영권을 위협하여 금전적 이익을 얻는 행위를 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 녹색 협박(綠色脅迫)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Greenmail&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 기업의 경영권을 위협하여 금전적 이익을 얻는 전략적 투자 행위로, 기업 경영에 큰 영향을 미칠 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>경영권 위협</category>
      <category>경제 신조어</category>
      <category>그린메일</category>
      <category>금융 용어</category>
      <category>기업 경영</category>
      <category>적대적 M&amp;amp;A</category>
      <category>전략적 투자</category>
      <category>투자 전략</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/666</guid>
      <comments>https://chatboy.tistory.com/666#entry666comment</comments>
      <pubDate>Sun, 27 Apr 2025 09:45:52 +0900</pubDate>
    </item>
    <item>
      <title>메타버스, 메타버스 뜻</title>
      <link>https://chatboy.tistory.com/665</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;메타버스&lt;/b&gt;&amp;rdquo;는 현실 세계와 가상 세계가 융합된 디지털 공간으로, 사용자는 아바타를 통해 사회적&amp;middot;경제적&amp;middot;문화적 활동을 자유롭게 경험할 수 있는 차세대 인터넷 환경입니다. 가상현실(VR)과 증강현실(AR), 그리고 블록체인 기술이 결합되어 현실의 제약을 넘어서는 새로운 소통과 비즈니스 가능성을 제시합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbUqgp/btsNBsBouJI/CiBRCe3UgdJ5nAVMj756Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbUqgp/btsNBsBouJI/CiBRCe3UgdJ5nAVMj756Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbUqgp/btsNBsBouJI/CiBRCe3UgdJ5nAVMj756Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbUqgp%2FbtsNBsBouJI%2FCiBRCe3UgdJ5nAVMj756Ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 메타버스 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;메타버스&lt;/b&gt;&amp;rdquo;는 메타(meta, 초월)와 유니버스(universe, 세계)의 합성어로, 현실 세계의 정보와 가상 세계의 콘텐츠가 실시간으로 연결된 확장된 공간을 뜻합니다. 이용자는 아바타를 통해 다양한 장소를 이동하고, 경제 활동을 하며, 타인과 상호 작용할 수 있습니다. 기존 인터넷이 2차원적 정보 제공에 그쳤다면, 메타버스는 3차원적 경험을 가능하게 하는 차원이 다른 플랫폼입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 현실과 가상이 융합된 3차원 디지털 공간&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/span&gt;: VR&amp;middot;AR&amp;middot;블록체인&amp;middot;AI&amp;middot;NFT&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;활용 분야&lt;/b&gt;&lt;/span&gt;: 교육, 엔터테인먼트, 쇼핑, 제조, 스포츠 등&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 메타버스 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;메타버스&lt;/b&gt;&amp;rdquo;라는 용어는 1992년 SF 소설가 닐 스티븐슨(Neal Stephenson)이 발표한 『스노 크래시』에서 처음 등장했습니다. 이후 2000년대 온라인 게임과 가상 커뮤니티를 거쳐, 2021년 페이스북이 회사명을 &amp;lsquo;Meta&amp;rsquo;로 변경하면서 대중화되었습니다. 기업과 정부는 가상 공간에서 경제&amp;middot;사회 시스템을 재구축하기 위해 메타버스 전략을 앞다투어 발표하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 메타버스 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전 세계 기업과 기관은 이미 다양한 메타버스 플랫폼을 선보이고 있습니다. &lt;b&gt;로블록스&lt;/b&gt;는 이용자가 직접 게임을 만들고 공유하며 경제권을 형성하는 대표적 사례이고, &lt;b&gt;제페토&lt;/b&gt;는 아바타 기반 소셜 네트워크로 Z세대의 큰 호응을 얻고 있습니다. 교육 분야에선 &lt;b&gt;게더타운&lt;/b&gt;이 가상 교실을 제공하며 원격 수업의 몰입도를 높이고, 스포츠 중계관은 가상 경기장에서 360&amp;deg; 시청 경험을 구현하기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;로블록스에서는 월간 이용자 5억 명 이상이 자신의 게임을 제작&amp;middot;운영하며 수익을 창출한다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;게더타운 가상 회의실은 사무실 자산 없이도 글로벌 원격 근무를 지원한다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mc9Lv/btsNBBY63sR/yQHPge2q5Y85pHgXY6gS0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mc9Lv/btsNBBY63sR/yQHPge2q5Y85pHgXY6gS0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mc9Lv/btsNBBY63sR/yQHPge2q5Y85pHgXY6gS0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmc9Lv%2FbtsNBBY63sR%2FyQHPge2q5Y85pHgXY6gS0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;메타버스&lt;/b&gt;&amp;rdquo;는 한자로 직접 대응하기 어려우나, &amp;ldquo;越次元世界&amp;rdquo; 혹은 &amp;ldquo;超越世界&amp;rdquo;로 의역할 수 있습니다. 영어권에선 &amp;ldquo;&lt;b&gt;metaverse&lt;/b&gt;&amp;rdquo;로 표기하며, 가상&amp;middot;증강현실 기술을 통해 확장된 인터넷 공간을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 越次元世界, 超越世界&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: metaverse&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;메타버스&lt;/b&gt;&amp;rdquo;는 기술 발전과 함께 사회 전반의 구조를 혁신적으로 변화시킬 잠재력을 지니고 있습니다. 앞으로 가상과 현실의 경계가 더욱 모호해지는 시대, 메타버스는 우리의 일상과 산업 전반에 지대한 영향을 미칠 것입니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>nft</category>
      <category>가상현실</category>
      <category>디지털경제</category>
      <category>메타버스</category>
      <category>증강현실</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/665</guid>
      <comments>https://chatboy.tistory.com/665#entry665comment</comments>
      <pubDate>Sun, 27 Apr 2025 08:10:55 +0900</pubDate>
    </item>
    <item>
      <title>스태그플레이션, 스태그플레이션 뜻</title>
      <link>https://chatboy.tistory.com/664</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;스태그플레이션&lt;/b&gt;&amp;rdquo;은 경제학에서 물가 상승과 경기 침체가 동시에 발생하는 현상을 가리키는 복합어입니다. 일반적인 인플레이션과 달리 경제 성장 없이 물가가 치솟아 소비자와 기업 모두에 큰 부담을 주며, 중앙은행의 통화정책 운용을 더욱 어렵게 만드는 특징이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RjA3R/btsNAPKARaZ/rvA1i9fCMKDgWtpB2lyQs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RjA3R/btsNAPKARaZ/rvA1i9fCMKDgWtpB2lyQs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RjA3R/btsNAPKARaZ/rvA1i9fCMKDgWtpB2lyQs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRjA3R%2FbtsNAPKARaZ%2FrvA1i9fCMKDgWtpB2lyQs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 스태그플레이션 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;스태그플레이션&lt;/b&gt;&amp;rdquo;은 &amp;ldquo;정체(Stagnation)&amp;rdquo;와 &amp;ldquo;인플레이션(Inflation)&amp;rdquo;의 합성어로, 경제 활동이 둔화되는 가운데 물가 수준은 지속적으로 상승하는 비정상적 경제 국면을 의미합니다. 생산량 감소, 고실업률, 소비 부진 등이 동반되어 경제 전반에 부담을 주며, 통화&amp;middot;재정 정책의 효과가 제한되는 문제가 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 경제 성장은 정체된 상태에서 물가만 상승하는 비정상적 경제 현상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 정체 인플레이션, 침체 물가 상승&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 단어&lt;/b&gt;&lt;/span&gt;: 인플레이션, 디플레이션, 경기침체&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 스태그플레이션 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;스태그플레이션&lt;/b&gt;&amp;rdquo;이라는 용어는 1960~70년대 미국과 영국에서 유래했습니다. 1973년 오일쇼크 이후 원유 가격 급등으로 비용 인상 압력이 높아지고, 경기 침체가 동시다발적으로 발생하자 경제학자들이 이를 설명하기 위해 만들어낸 합성어입니다. 당시 중앙은행은 금리 인상으로 물가를 억제하려 했으나 경기 부진을 심화시키는 악순환에 빠졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 스태그플레이션 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 글로벌 공급망 차질과 에너지 가격 급등이 복합적으로 작용하면서 각국 중앙은행과 정부는 &lt;b&gt;스태그플레이션&lt;/b&gt; 우려를 표명하고 있습니다. 물가 안정과 경기 회복 사이에서 정책 우선순위를 둘러싼 논쟁이 이어지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;에너지 비용 폭등으로 기업 투자가 위축되고, 소비 지출도 감소해 스태그플레이션 우려가 커졌다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;중앙은행은 금리 인상 기조를 유지하면서도 경기 둔화 리스크를 경계하고 있다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTLzqr/btsNAfJz98Q/tcCkcLLmxzXXKdIKi3IQbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTLzqr/btsNAfJz98Q/tcCkcLLmxzXXKdIKi3IQbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTLzqr/btsNAfJz98Q/tcCkcLLmxzXXKdIKi3IQbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTLzqr%2FbtsNAfJz98Q%2FtcCkcLLmxzXXKdIKi3IQbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;스태그플레이션&lt;/b&gt;&amp;rdquo;을 한자로 표기할 때는 직접 대응하는 단어가 없으나, &amp;ldquo;停滯物價上昇&amp;rdquo;처럼 의역하여 사용할 수 있습니다. 영어권에서는 &amp;ldquo;&lt;b&gt;stagflation&lt;/b&gt;&amp;rdquo;이라고 표기하며, 경기 침체(stagnation)와 인플레이션(inflation)의 합성어로 이해됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 停滯物價上昇&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: stagflation&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;ldquo;&lt;b&gt;스태그플레이션&lt;/b&gt;&amp;rdquo;은 물가 상승과 경기 침체라는 이중고를 의미하는 만큼, 향후 경제 정책의 중요한 화두로 자리잡을 전망입니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>경제침체</category>
      <category>디플레이션</category>
      <category>물가상승</category>
      <category>스태그플레이션</category>
      <category>인플레이션</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/664</guid>
      <comments>https://chatboy.tistory.com/664#entry664comment</comments>
      <pubDate>Sun, 27 Apr 2025 07:10:05 +0900</pubDate>
    </item>
    <item>
      <title>뉴트로, 뉴트로 뜻</title>
      <link>https://chatboy.tistory.com/663</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;는 'New'와 'Retro'의 합성어로, 과거의 유행이나 스타일을 현대적으로 재해석하여 새로운 트렌드를 만들어내는 것을 의미합니다. 이는 단순한 복고가 아니라, 옛것을 현대적인 감각으로 재창조하는 문화 현상입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buzFyI/btsNwRuvbxB/66BdbPIYNGk7YlsqdHm9v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buzFyI/btsNwRuvbxB/66BdbPIYNGk7YlsqdHm9v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buzFyI/btsNwRuvbxB/66BdbPIYNGk7YlsqdHm9v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuzFyI%2FbtsNwRuvbxB%2F66BdbPIYNGk7YlsqdHm9v1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;는 과거의 유행을 단순히 재현하는 것이 아니라, 이를 현대적인 감각으로 변형하여 새로운 트렌드로 만드는 과정을 말합니다. 이는 패션, 음악, 디자인 등 다양한 분야에서 나타나며, 과거와 현재를 연결하는 독특한 매력을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;항목&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;주요 분야&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패션, 음악, 디자인, 음식 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대표 사례&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;복고풍 의상, LP 음반의 재유행, 전통 음식의 현대적 재해석 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대중의 반응&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과거에 대한 향수와 새로운 감각의 조화로 긍정적인 반응&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문화적 의의&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세대 간의 공감대 형성과 문화의 다양성 증진&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로 관련 사례&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 패션 업계에서는 1980~1990년대 스타일의 의상과 액세서리가 다시 인기를 끌고 있습니다. 음악 분야에서는 LP 음반의 판매량이 증가하고 있으며, 음식 분야에서는 전통 음식을 현대적인 방식으로 재해석한 메뉴들이 주목받고 있습니다. 이러한 사례들은 과거의 스타일과 현대적인 감각의 조화로 새로운 소비 경험을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로에 대한 사회적 인식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;는 과거에 대한 향수를 불러일으키면서도 새로운 감각을 더해 현대인들에게 신선한 경험을 제공합니다. 이는 세대 간의 공감대를 형성하고, 문화의 다양성을 증진시키는 긍정적인 문화 현상으로 평가받고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로와 관련된 용어&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt; &lt;b&gt;용어&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; &lt;b&gt;설명&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;레트로(Retro)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과거의 유행이나 스타일을 그대로 재현하는 것&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;빈티지(Vintage)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오래된 물건이나 스타일을 의미하며, 고전적인 매력을 강조&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;힙스터(Hipster)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;독특하고 개성 있는 스타일을 추구하는 사람들을 지칭&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;뉴트로에 대한 대응 방안&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt; &lt;b&gt;방안&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt; &lt;b&gt;설명&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;문화 콘텐츠 개발&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;를 활용한 다양한 문화 콘텐츠 제작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;세대 간의 소통&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;과거와 현재를 연결하는 매개체로서의 역할 강화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;산업적 활용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;를 활용한 상품 개발 및 마케팅 전략 수립&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뉴트로&lt;/b&gt;는 과거의 유산을 현대적으로 재해석하여 새로운 가치를 창출하는 문화 현상입니다. 이는 단순한 복고가 아니라, 과거와 현재를 연결하는 다리 역할을 하며, 세대 간의 공감대 형성과 문화의 다양성을 증진시키는 데 기여하고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>뉴트로</category>
      <category>디자인</category>
      <category>레트로</category>
      <category>문화 콘텐츠</category>
      <category>문화 트렌드</category>
      <category>복고</category>
      <category>빈티지</category>
      <category>세대 공감</category>
      <category>음악</category>
      <category>패션</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/663</guid>
      <comments>https://chatboy.tistory.com/663#entry663comment</comments>
      <pubDate>Thu, 24 Apr 2025 10:30:17 +0900</pubDate>
    </item>
    <item>
      <title>무해력, 무해력 뜻</title>
      <link>https://chatboy.tistory.com/662</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무해력&lt;/b&gt;은 2025년 소비 트렌드 중 하나로, 자극적이지 않고 부드러운 영향력을 지닌 콘텐츠나 서비스가 주목받는 흐름을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnJJH8/btsNxY7e7m1/KO4pa9mpD80cEcSR2xu76k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnJJH8/btsNxY7e7m1/KO4pa9mpD80cEcSR2xu76k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnJJH8/btsNxY7e7m1/KO4pa9mpD80cEcSR2xu76k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnJJH8%2FbtsNxY7e7m1%2FKO4pa9mpD80cEcSR2xu76k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무해력&lt;/b&gt;은 공격적이거나 자극적인 요소를 지양하고, 소비자에게 편안함과 안정감을 제공하는 콘텐츠나 서비스를 지칭합니다. 이는 현대 사회에서 피로감을 느끼는 소비자들이 증가함에 따라, 부드럽고 친근한 접근 방식이 더욱 선호되는 현상을 반영합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;항목&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;주요 분야&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘텐츠 제작, 마케팅, 제품 디자인 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대표 사례&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;힐링 예능 프로그램, 파스텔 톤의 제품 디자인, 친환경 소재 사용 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대중의 반응&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스트레스 해소와 심리적 안정감을 제공하여 긍정적인 반응&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문화적 의의&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;경쟁보다는 공존을 중시하는 사회적 분위기 형성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력 관련 사례&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 방송계에서는 자극적인 요소를 배제하고, 자연과의 교감을 중심으로 한 힐링 예능 프로그램이 인기를 끌고 있습니다. 또한, 제품 디자인에서는 부드러운 색상과 친환경 소재를 활용하여 소비자에게 편안함을 제공하는 사례가 증가하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력에 대한 사회적 인식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무해력&lt;/b&gt;은 현대인들의 심리적 안정과 웰빙을 중시하는 사회적 흐름을 반영합니다. 이는 경쟁보다는 협력과 공존을 중시하는 가치관의 변화와도 연결되며, 다양한 분야에서 이러한 트렌드가 확산되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력과 관련된 용어&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;용어&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;힐링 콘텐츠&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;심리적 안정과 위안을 제공하는 콘텐츠&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;슬로우 라이프&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;느리지만 여유로운 삶을 추구하는 생활 방식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;친환경 디자인&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;환경에 미치는 영향을 최소화한 제품 디자인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;무해력에 대한 대응 방안&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;방안&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;콘텐츠 제작&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자극적 요소를 배제하고, 심리적 안정감을 주는 콘텐츠 개발&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;제품 디자인&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부드러운 색상과 친환경 소재를 활용한 제품 디자인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;마케팅 전략&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소비자와의 공감대를 형성하는 부드러운 마케팅 접근 방식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무해력&lt;/b&gt;은 현대 사회에서 소비자들의 심리적 안정과 웰빙을 중시하는 흐름을 반영하는 트렌드입니다. 이는 다양한 분야에서 자극적인 요소를 지양하고, 부드럽고 친근한 접근 방식을 통해 소비자와의 공감대를 형성하는 데 기여하고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>공존</category>
      <category>무해력</category>
      <category>부드러운 마케팅</category>
      <category>사회적 가치​</category>
      <category>슬로우 라이프</category>
      <category>심리적 안정</category>
      <category>웰빙</category>
      <category>친환경 디자인</category>
      <category>협력</category>
      <category>힐링 콘텐츠</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/662</guid>
      <comments>https://chatboy.tistory.com/662#entry662comment</comments>
      <pubDate>Thu, 24 Apr 2025 09:30:44 +0900</pubDate>
    </item>
    <item>
      <title>스마트빌딩, 스마트빌딩 뜻</title>
      <link>https://chatboy.tistory.com/661</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스마트빌딩&lt;/b&gt;은 2025년 건축 및 부동산 산업에서 주목받는 핵심 용어로, 인공지능(AI)과 사물인터넷(IoT) 기술을 활용하여 건물의 에너지 효율성과 사용자 편의성을 극대화하는 첨단 건축물을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NB1t0/btsNwYtHruU/EgLVA7PiuIP75VbJrwq2R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NB1t0/btsNwYtHruU/EgLVA7PiuIP75VbJrwq2R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NB1t0/btsNwYtHruU/EgLVA7PiuIP75VbJrwq2R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNB1t0%2FbtsNwYtHruU%2FEgLVA7PiuIP75VbJrwq2R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스마트빌딩&lt;/b&gt;은 AI와 IoT 기술을 통합하여 건물의 다양한 시스템을 자동화하고 최적화하는 지능형 건축물을 말합니다. 이를 통해 에너지 소비를 줄이고, 보안을 강화하며, 사용자에게 쾌적한 환경을 제공합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;주요 기술&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI 기반 에너지 관리, IoT 센서 네트워크, 자동화 시스템&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대표 사례&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자동 조명 및 냉난방 조절, 실시간 보안 모니터링, 스마트 주차 시스템&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대중의 반응&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에너지 절약과 편의성 향상으로 긍정적인 평가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;산업적 의의&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지속 가능한 건축물로의 전환을 촉진&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩 관련 사례&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최근 국내외에서 스마트빌딩 기술이 적용된 다양한 프로젝트가 진행되고 있습니다. 예를 들어, 건물 내 센서를 통해 실시간으로 에너지 사용을 모니터링하고, AI가 이를 분석하여 최적의 에너지 소비 패턴을 제안하는 시스템이 도입되고 있습니다. 또한, 스마트 주차 시스템을 통해 주차 공간을 효율적으로 관리하고, 보안 시스템을 강화하는 등의 사례가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩에 대한 사회적 인식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지속 가능한 발전과 에너지 효율성에 대한 관심이 높아지면서, &lt;b&gt;스마트빌딩&lt;/b&gt;은 미래 건축의 표준으로 자리 잡고 있습니다. 이는 환경 보호와 비용 절감, 사용자 편의성 향상 등 다양한 측면에서 긍정적인 영향을 미치고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩과 관련된 용어&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;용어&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그린빌딩&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;환경 친화적인 자재와 설계를 적용한 건축물&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;제로에너지빌딩&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에너지 소비량을 최소화하고, 자체적으로 에너지를 생산하는 건축물&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스마트시티&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;도시 전반에 ICT 기술을 적용하여 효율적으로 관리하는 도시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스마트빌딩에 대한 대응 방안&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt; &lt;b&gt;방안&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;기술 개발&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AI 및 IoT 기술을 활용한 스마트빌딩 솔루션 개발&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;정책 지원&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스마트빌딩 도입을 위한 정부의 정책 및 인센티브 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;교육 및 인식 개선&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #ddd; padding: 8px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스마트빌딩의 필요성과 이점에 대한 대중 교육 및 홍보&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스마트빌딩&lt;/b&gt;은 기술과 건축의 융합을 통해 지속 가능한 미래를 실현하는 핵심 요소로 부상하고 있습니다. 이는 에너지 효율성 향상, 사용자 편의성 증대, 환경 보호 등 다양한 측면에서 긍정적인 영향을 미치며, 앞으로의 건축 산업에서 중요한 역할을 할 것으로 기대됩니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI</category>
      <category>IOT</category>
      <category>그린빌딩</category>
      <category>스마트빌딩</category>
      <category>스마트시티</category>
      <category>에너지 효율성</category>
      <category>자동화 시스템</category>
      <category>제로에너지빌딩</category>
      <category>지속 가능한 건축</category>
      <category>환경 보호</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/661</guid>
      <comments>https://chatboy.tistory.com/661#entry661comment</comments>
      <pubDate>Thu, 24 Apr 2025 08:30:28 +0900</pubDate>
    </item>
    <item>
      <title>사이버 렉카, 사이버 렉카 뜻</title>
      <link>https://chatboy.tistory.com/660</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;b&gt;사이버 렉카&lt;/b&gt;어는 최근 온라인 상에서 주목받는 신조어로, 대중의 관심이 집중된 이슈나 인물에 대해 자극적인 콘텐츠를 빠르게 제작하여 조회수를 올리는 행태를 비판적으로 지칭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F920H/btsNwveLi9o/fqUkgYWKSHycCLmwz7V5k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F920H/btsNwveLi9o/fqUkgYWKSHycCLmwz7V5k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F920H/btsNwveLi9o/fqUkgYWKSHycCLmwz7V5k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF920H%2FbtsNwveLi9o%2FfqUkgYWKSHycCLmwz7V5k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'사이버 렉카'는 교통사고 현장에 빠르게 도착하는 견인차를 의미하는 '렉카(wrecker)'에서 유래한 용어입니다. 온라인에서는 사회적 이슈나 사건이 발생했을 때, 이를 빠르게 콘텐츠로 제작하여 조회수를 높이려는 유튜버나 블로거 등을 지칭합니다. 이들은 종종 자극적인 제목과 썸네일을 사용하여 대중의 관심을 끌며, 때로는 확인되지 않은 정보를 퍼뜨리기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;b&gt; 내용 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;주요 활동&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사회적 이슈나 사건에 대한 빠른 콘텐츠 제작&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조회수 증가 및 광고 수익 확보&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문제점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자극적인 표현 사용, 확인되지 않은 정보 유포, 사생활 침해 가능성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대응 방안&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘텐츠 소비자의 비판적 시각 필요, 플랫폼의 엄격한 가이드라인 적용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카 관련 사례&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사건과 관련하여 여러 유튜버들이 그의 주거지 주변에서 실시간 방송을 진행하거나 자극적인 콘텐츠를 제작하여 논란이 되기도 합니다. 이러한 행태는 피해자와 그 가족뿐만 아니라 지역 주민들에게도 불편을 초래하였으며, 사회적 비판을 받기도 합니다. 또한, 일부 유튜버들은 특정 고인의 사망 소식을 이용하여 확인되지 않은 정보를 퍼뜨리는 등 도를 넘는 콘텐츠를 제작하기도 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카에 대한 사회적 인식&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'사이버 렉카'는 정보의 신속한 전달이라는 긍정적인 측면도 있지만, 그 과정에서 발생하는 부작용으로 인해 사회적 비판의 대상이 되고 있습니다. 특히, 자극적인 콘텐츠 제작으로 인한 피해 사례가 증가하면서, 콘텐츠 제작자들의 윤리의식과 플랫폼의 책임 있는 관리가 요구되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카와 관련된 용어&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;b&gt; 용어 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;렉카(wrecker)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;교통사고 현장에 빠르게 도착하는 견인차&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;사이버 렉카&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온라인 상에서 이슈를 빠르게 콘텐츠로 제작하는 행태를 비판적으로 지칭&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;썸네일 낚시&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자극적인 썸네일로 클릭을 유도하는 행위&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;가짜 뉴스&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000; text-align: left; padding: 8px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실이 아닌 정보를 뉴스 형식으로 퍼뜨리는 행위&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사이버 렉카에 대한 대응 방안&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;b&gt; 방안 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;콘텐츠 소비자의 비판적 시각&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: left; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;정보를 수용할 때, 그 진위 여부를 판단하고 비판적으로 접근&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;플랫폼의 엄격한 가이드라인 적용&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: left; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자극적인 콘텐츠에 대한 제재 및 가이드라인 강화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;법적 대응&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: left; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;허위 정보 유포나 사생활 침해에 대한 법적 조치 강화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: center; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;교육 및 캠페인&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #000000; text-align: left; padding: 8px; height: 22px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;콘텐츠 제작자와 소비자 모두를 대상으로 한 윤리 교육 및 캠페인 진행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'사이버 렉카' 현상은 정보의 빠른 전달이라는 긍정적인 측면도 있지만, 그 과정에서 발생하는 부작용으로 인해 사회적 비판의 대상이 되고 있습니다. 콘텐츠 제작자들의 윤리의식과 플랫폼의 책임 있는 관리가 요구되며, 소비자들도 비판적인 시각으로 콘텐츠를 소비하는 자세가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>가짜 뉴스</category>
      <category>사이버 렉카</category>
      <category>사회적 이슈​</category>
      <category>썸네일 낚시</category>
      <category>온라인 윤리</category>
      <category>유튜브</category>
      <category>자극적인 콘텐츠</category>
      <category>정보 소비</category>
      <category>콘텐츠 제작</category>
      <category>플랫폼 책임</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/660</guid>
      <comments>https://chatboy.tistory.com/660#entry660comment</comments>
      <pubDate>Thu, 24 Apr 2025 07:11:43 +0900</pubDate>
    </item>
    <item>
      <title>에코페미니즘, 에코페미니즘 뜻</title>
      <link>https://chatboy.tistory.com/659</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;에코페미니즘&lt;/b&gt;(Ecofeminism)&quot;은 &lt;b&gt;환경 보호&lt;/b&gt;와 &lt;b&gt;여성주의&lt;/b&gt;를 결합한 사회운동이자 철학적 사조입니다. 이 개념은 자연과 여성이 동시에 억압의 대상이 되어왔으며, 이 두 억압이 서로 깊은 관련이 있다고 주장합니다. 자연 파괴와 여성 차별 모두 &lt;b&gt;가부장적 권력 구조&lt;/b&gt;에서 비롯되었음을 지적하며, 이를 극복하기 위한 연대와 대안을 모색합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgwyO5/btsNcZGI9dP/EEfN4Wgogq9teUlc5Qkjnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgwyO5/btsNcZGI9dP/EEfN4Wgogq9teUlc5Qkjnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgwyO5/btsNcZGI9dP/EEfN4Wgogq9teUlc5Qkjnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgwyO5%2FbtsNcZGI9dP%2FEEfN4Wgogq9teUlc5Qkjnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #dcf0e9; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 에코페미니즘 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;에코페미니즘&lt;/b&gt;은 &amp;lsquo;에코(Eco)&amp;rsquo;와 &amp;lsquo;페미니즘(Feminism)&amp;rsquo;의 합성어로, 환경문제와 여성 문제를 함께 바라보는 시각입니다. 여성과 자연은 모두 오랜 시간 동안 착취와 지배의 대상이 되어왔으며, 그 근원에는 &lt;b&gt;권력 불균형과 통제 중심적 사고&lt;/b&gt;가 있다는 주장을 담고 있습니다. 따라서 환경 보호와 여성 해방은 같은 맥락에서 실천되어야 한다는 것이 에코페미니즘의 핵심입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;자연과 여성에 대한 억압의 연관성을 밝히고, 이를 극복하려는 환경 + 여성주의 운동&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 여성환경주의, 생태여성주의, 녹색페미니즘&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 젠더정의, 지속가능성, 탈성장&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #dcf0e9; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 에코페미니즘 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;에코페미니즘&lt;/b&gt;&quot;이라는 용어는 1974년 프랑스 작가 프랑수아즈 도본(Fran&amp;ccedil;oise d&amp;rsquo;Eaubonne)이 처음 사용했습니다. 그는 산업화와 개발 중심 사회가 &lt;b&gt;자연과 여성 모두를 지배하고 착취&lt;/b&gt;해왔음을 비판하며, 여성주의적 접근을 통해 생태 위기를 극복해야 한다고 주장했습니다. 이후 전 세계 다양한 지역에서 환경운동과 여성운동이 결합된 형태로 발전하며 오늘날까지 이어지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #dcf0e9; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 에코페미니즘 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;에코페미니즘&lt;/b&gt;은 다양한 형태로 실천되고 있습니다. 생태 보호와 여성의 권익 향상을 동시에 추구하는 지역운동, 여성 농민과 환경단체의 연대, 제로웨이스트 실천 등에서 그 흐름을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e6f3ec; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;에코페미니즘은 환경운동이자 여성운동이다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;여성 농민의 권리 보장은 지속가능한 생태를 위한 첫걸음이다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;자연을 돌보는 일이 곧 나를 돌보는 일이라는 &lt;b&gt;에코페미니즘&lt;/b&gt;의 철학에 공감해요.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #dcf0e9; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 에코페미니즘 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;에코페미니즘&lt;/b&gt;은 영어 'Ecofeminism'의 음차적 표현으로, 한자로는 명확한 대응어는 없지만 의미적으로는 '생태여성주의(生態女性主義)'로 번역할 수 있습니다. 이 표현은 환경과 젠더 문제를 통합적으로 바라보는 시각을 함축합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 생태여성주의(生態女性主義)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Ecofeminism, Feminist Environmentalism, Eco-womanism&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;에코페미니즘&lt;/b&gt;&quot;은 자연과 여성이 모두 존중받는 지속가능한 세상을 위한 철학이자 행동입니다. 연대와 실천을 통해 더 나은 미래를 향한 길을 열어가고자 합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>ecofeminism</category>
      <category>녹색운동</category>
      <category>생태여성주의</category>
      <category>에코페미니즘</category>
      <category>여성환경운동</category>
      <category>젠더환경연대</category>
      <category>지속가능성</category>
      <category>친환경페미니즘</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/659</guid>
      <comments>https://chatboy.tistory.com/659#entry659comment</comments>
      <pubDate>Wed, 9 Apr 2025 08:33:11 +0900</pubDate>
    </item>
    <item>
      <title>아스널 vs 크리스털 팰리스, Arsenal vs Crystal Palace, 4월 23일</title>
      <link>https://chatboy.tistory.com/658</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아스널은 종합적인 지표에서 크리스털 팰리스를 압도하고 있어, 승리를 기대할 수 있는 경기입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 우세 (순위 2위 vs 11위, 승점 62 vs 43, 승률 54.8% vs 36.7%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.81 vs 1.3, 평균 실점 0.84 vs 1.17 &amp;rarr; 아스널이 공격과 수비 모두 안정적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 최근 3승 2무 / 팰리스는 3승 2무 &amp;rarr; 팰리스도 상승세지만, 아스널은 상위권 팀과의 경쟁 중&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 홈 10승 4무 1패 / 팰리스 원정 6승 5무 3패 &amp;rarr; 팰리스 원정도 나쁘지 않지만, 아스널 홈에서 강세&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #ee2323; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208354&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208354&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/658</guid>
      <comments>https://chatboy.tistory.com/658#entry658comment</comments>
      <pubDate>Tue, 8 Apr 2025 11:10:27 +0900</pubDate>
    </item>
    <item>
      <title>맨 시티 vs 애스턴 빌라, Manchester City vs Aston Villa, 4월 22일</title>
      <link>https://chatboy.tistory.com/657</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;맨 시티와 애스턴 빌라는 순위와 승점에서 큰 차이는 없으나, 맨 시티는 득실차, 평균 득점, 수비력에서 근소한 우세를 보이며 홈 경기에서도 강한 면모를 유지하고 있다. 다만 빌라는 최근 흐름이 좋아 접전이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨 시티 근소 우세 (순위 6위 vs 7위, 승점 52 vs 51, 승률 48.4% vs 45.2%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.84 vs 1.48, 평균 실점 1.29 vs 1.48 &amp;rarr; 맨 시티가 공수 모두 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨 시티 2승 2무 1패 / 빌라 4승 1패 &amp;rarr; 빌라가 흐름에서 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨 시티 홈 9승 3무 3패 / 빌라 원정 6승 2무 7패 &amp;rarr; 홈 강세의 맨 시티가 유리&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #ee2323; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208358&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208358&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/657</guid>
      <comments>https://chatboy.tistory.com/657#entry657comment</comments>
      <pubDate>Tue, 8 Apr 2025 10:10:46 +0900</pubDate>
    </item>
    <item>
      <title>토트넘 vs 노팅엄 포레스트, Tottenham vs Nottingham Forest, 4월 21일</title>
      <link>https://chatboy.tistory.com/656</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;노팅엄 포레스트는 순위, 승점, 수비력, 최근 흐름에서 토트넘을 앞서며 더 안정적인 경기력을 보여주고 있다. 반면 토트넘은 득점력은 뛰어나나 전체적인 흐름에서 불안 요소가 많다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 노팅엄 우세 (순위 3위 vs 14위, 승점 57 vs 37, 승률 54.8% vs 35.5%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점은 토트넘이 앞서나, 평균 실점에서 노팅엄이 더 안정적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 토트넘 최근 1승 1무 3패 / 노팅엄은 4승 1무 무패 &amp;rarr; 노팅엄 상승세 뚜렷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 토트넘 홈 6승 3무 7패 / 노팅엄 원정 8승 2무 6패 &amp;rarr; 원정에서도 노팅엄 우세 흐름&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #ee2323; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208351&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208351&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/656</guid>
      <comments>https://chatboy.tistory.com/656#entry656comment</comments>
      <pubDate>Tue, 8 Apr 2025 09:10:19 +0900</pubDate>
    </item>
    <item>
      <title>레스터 시티 vs 리버풀, Leicester vs Liverpool. 4월 20일</title>
      <link>https://chatboy.tistory.com/655</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;리버풀은 리그 최상위권의 공격력과 수비력을 바탕으로 하위권 레스터 시티를 압도하고 있으며, 최근 흐름과 홈&amp;middot;원정 성적에서도 우세가 명확해 일방적인 경기 양상이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 리버풀 압도적 우세 (순위 1위 vs 19위, 승점 73 vs 17, 승률 71.0% vs 12.9%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 2.32 vs 0.81, 평균 실점 0.97 vs 2.26 &amp;rarr; 공수 모두 리버풀이 압도&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 레스터 최근 5연패 / 리버풀 최근 4연승 &amp;rarr; 극명한 분위기 차이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 레스터 홈 2승 3무 11패 / 리버풀 원정 10승 5무 1패 &amp;rarr; 원정에서도 리버풀 완벽한 성적&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 8.50~10.00 &amp;rarr; 레스터 시티의 승리 가능성 거의 없음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 5.50~6.00 &amp;rarr; 접전 가능성도 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 1.27~1.29 &amp;rarr; 리버풀의 승리 강하게 예측&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 리버풀 승 1.29, 레스터 승 10.00 &amp;rarr; 이변 가능성 거의 배제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 5.75 &amp;rarr; 리버풀 일방 우세 전망&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 전체적으로 리버풀 쏠림 배당&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 리버풀 압도적 우세&lt;/b&gt;, 레스터의 승부 가능성은 매우 희박&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 리버풀 단독 승 베팅이 가장 안정적&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208349&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208349&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/655</guid>
      <comments>https://chatboy.tistory.com/655#entry655comment</comments>
      <pubDate>Tue, 8 Apr 2025 08:10:06 +0900</pubDate>
    </item>
    <item>
      <title>입스위치 vs 아스널, Ipswich vs Arsenal, 4월 20일</title>
      <link>https://chatboy.tistory.com/654</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;아스널은 순위, 승점, 득실, 수비력 등 모든 면에서 입스위치를 압도하고 있으며, 입스위치는 홈에서도 부진한 성적을 보여 일방적인 경기 흐름이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 압도적 우세 (순위 2위 vs 18위, 승점 62 vs 20, 승률 54.8% vs 12.9%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.81 vs 1.00, 평균 실점 0.84 vs 2.10 &amp;rarr; 공수 전력 모두 아스널 월등&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 입스위치 최근 1승 4패 / 아스널은 2승 3무 무패 &amp;rarr; 안정적인 아스널 흐름&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 입스위치 홈 1승 4무 11패 / 아스널 원정 7승 7무 2패 &amp;rarr; 원정에서도 아스널 안정적, 입스위치 홈 부진&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 7.00~7.50 &amp;rarr; 입스위치 승리 가능성 매우 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 4.50~4.75 &amp;rarr; 무승부 가능성도 제한적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 1.38~1.40 &amp;rarr; 아스널 승리 강하게 예상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 아스널 승 1.40, 입스위치 승 7.50 &amp;rarr; 전력 차 반영, 아스널 우세 뚜렷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 4.50 &amp;rarr; 접전 가능성 낮게 판단&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 아스널 승 최저 1.38 &amp;rarr; 가장 강한 신뢰 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 아스널 절대 우세&lt;/b&gt;, 이변 가능성 극히 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 아스널 단독 승 베팅 최우선&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208348&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208348&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/654</guid>
      <comments>https://chatboy.tistory.com/654#entry654comment</comments>
      <pubDate>Tue, 8 Apr 2025 07:10:54 +0900</pubDate>
    </item>
    <item>
      <title>풀럼 vs 첼시, Fulham vs Chelsea, 4월 20일</title>
      <link>https://chatboy.tistory.com/653</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;풀럼과 첼시는 순위, 승점, 득실 면에서 큰 격차는 없으나 첼시가 수비 안정성과 꾸준한 득점력을 바탕으로 근소한 우위를 점하고 있다. 최근 흐름 또한 첼시가 더 안정적이다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 첼시 근소 우세 (순위 4위 vs 8위, 승점 53 vs 48, 승률 48.4% vs 41.9%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.74 vs 1.52, 평균 실점 1.19 vs 1.35 &amp;rarr; 첼시가 공수 양면에서 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 첼시 최근 3승 1무 1패 / 풀럼은 3승 2패 &amp;rarr; 첼시가 흐름상 좀 더 안정적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 풀럼 홈 7승 5무 4패 / 첼시 원정 6승 4무 6패 &amp;rarr; 원정 성적도 나쁘지 않아 첼시 우세 지속&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.70~2.90 &amp;rarr; 풀럼의 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.25~3.70 &amp;rarr; 무승부 가능성도 적절히 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 2.30~2.40 &amp;rarr; 첼시의 우세 기대감 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 첼시 승 2.40, 풀럼 승 2.90 &amp;rarr; 원정 첼시 우세 전망&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.70 &amp;rarr; 접전 가능성도 일부 고려&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 균형 감안 시 첼시 쪽 베팅 심리 높음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 첼시 근소 우세&lt;/b&gt;, 무승부 가능성도 무시할 수 없음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 첼시 승 중심, 무승부 보완형 베팅 유효&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208347&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208347&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/653</guid>
      <comments>https://chatboy.tistory.com/653#entry653comment</comments>
      <pubDate>Tue, 8 Apr 2025 06:10:33 +0900</pubDate>
    </item>
    <item>
      <title>맨유 vs 울브스, Manchester United vs Wolves, 4월 20일</title>
      <link>https://chatboy.tistory.com/652</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;맨유와 울브스는 전체적인 성적에서 큰 차이는 없으나, 울브스가 최근 경기력에서 우위를 보이고 있다. 맨유는 홈에서의 강세가 뚜렷하지 않아 예측이 까다로운 경기다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨유 근소 우세 (순위 13위 vs 17위, 승점 38 vs 32, 승률 32.3% vs 29.0%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.19 vs 1.39, 평균 실점 1.32 vs 1.90 &amp;rarr; 울브스가 더 많은 득점, 맨유가 안정된 수비&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨유 최근 2승 2무 1패 / 울브스 최근 3승 1무 1패 &amp;rarr; 울브스 흐름 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨유 홈 6승 3무 7패 / 울브스 원정 5승 3무 8패 &amp;rarr; 원정 울브스 성적 나쁘지 않음, 홈 맨유는 불안정&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.73~1.75 &amp;rarr; 맨유 우세 반영, 단독 승리 기대&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.60~3.80 &amp;rarr; 무승부 가능성은 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 4.33~4.60 &amp;rarr; 울브스 이변 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 맨유 승 1.75, 울브스 승 4.60 &amp;rarr; 맨유 우세 뚜렷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.80 &amp;rarr; 접전 가능성 일부 고려&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 울브스 승 최저 4.33 &amp;rarr; 원정 승리 가능성 낮음 유지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 맨유 우세&lt;/b&gt;, 최근 흐름 고려 시 리스크는 존재&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 맨유 승 중심 베팅, 무승부 커버 가능&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208350&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208350&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/652</guid>
      <comments>https://chatboy.tistory.com/652#entry652comment</comments>
      <pubDate>Tue, 8 Apr 2025 05:10:03 +0900</pubDate>
    </item>
    <item>
      <title>애스턴 빌라 vs 뉴캐슬, Aston Villa vs Newcastle, 4월 19일</title>
      <link>https://chatboy.tistory.com/651</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;애스턴 빌라와 뉴캐슬은 최근 흐름과 승점에서 근소한 차이를 보이고 있으며, 양 팀 모두 좋은 경기력을 유지하고 있어 치열한 접전이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 뉴캐슬 근소 우세 (순위 5위 vs 7위, 승점 53 vs 51, 승률 53.3% vs 45.2%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.73 vs 1.48, 평균 실점 1.30 vs 1.48 &amp;rarr; 뉴캐슬이 공격&amp;middot;수비 양면에서 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 양 팀 최근 4승 1패 &amp;rarr; 상승세 유지, 분위기 비슷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 빌라 홈 8승 7무 1패 / 뉴캐슬 원정 8승 3무 5패 &amp;rarr; 빌라 홈에서 강하고 뉴캐슬 원정도 나쁘지 않음&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.25~2.30 &amp;rarr; 애스턴 빌라 근소 우세로 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.50~3.60 &amp;rarr; 무승부 가능성도 충분히 고려됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 2.88~2.90 &amp;rarr; 뉴캐슬 역시 승산 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 빌라 승 2.30, 뉴캐슬 승 2.90 &amp;rarr; 거의 대등한 접전 예측&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.60 &amp;rarr; 무승부 가능성 상대적으로 높게 봄&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 전반적인 배당 안정적 &amp;rarr; 승부 예측 난이도 높음 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 팽팽한 승부&lt;/b&gt;, 어느 쪽도 확실한 우세 없음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 무승부 포함 복수 베팅 적합, 단독 승부 베팅은 위험&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208343&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208343&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/651</guid>
      <comments>https://chatboy.tistory.com/651#entry651comment</comments>
      <pubDate>Tue, 8 Apr 2025 04:10:16 +0900</pubDate>
    </item>
    <item>
      <title>브렌트퍼드 vs 브라이턴, Brentford vs Brighton, 4월 19일</title>
      <link>https://chatboy.tistory.com/650</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;브렌트퍼드와 브라이턴은 거의 동일한 승률과 실점률을 기록하고 있으며, 최근 흐름은 브라이턴이 다소 앞선다. 순위, 승점, 전력 모두 근접해 팽팽한 승부가 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브라이턴 근소 우세 (순위 9위 vs 12위, 승점 47 vs 42, 승률 동일)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.65 vs 1.58, 평균 실점 동일 &amp;rarr; 브렌트퍼드 공격력 미세 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브렌트퍼드 최근 1승 2무 2패 / 브라이턴 2승 1무 2패 &amp;rarr; 브라이턴 흐름 소폭 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브렌트퍼드 홈 7승 4무 5패 / 브라이턴 원정 6승 5무 5패 &amp;rarr; 전반적으로 대등한 흐름&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.40~2.45 &amp;rarr; 브렌트퍼드 근소 열세 혹은 대등 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.40~3.70 &amp;rarr; 무승부 가능성 열려 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 2.62~2.70 &amp;rarr; 브라이턴 소폭 우세 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 브라이턴 승 2.62, 브렌트퍼드 승 2.45 &amp;rarr; 브라이턴 소폭 우세 시각&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.70 &amp;rarr; 박빙 경기, 무승부 가능성 상대적으로 높음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 균형 양상 &amp;rarr; 승부 예측 난도 높은 경기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 팽팽한 대결 구도&lt;/b&gt;, 브라이턴 근소 우세 속 무승부 가능성도 존재&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 무승부 포함한 복수 베팅, 단일 승부 베팅은 리스크 큼&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208344&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208344&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/650</guid>
      <comments>https://chatboy.tistory.com/650#entry650comment</comments>
      <pubDate>Tue, 8 Apr 2025 03:10:39 +0900</pubDate>
    </item>
    <item>
      <title>크리스털 팰리스 vs 본머스, Crystal Palace vs Bournemouth, 4월 19일</title>
      <link>https://chatboy.tistory.com/649</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;크리스털 팰리스와 본머스는 전체적인 성적에서 근소한 차이를 보이며, 팰리스는 최근 상승세를 타고 있는 반면 본머스는 주춤하고 있어 팽팽한 접전이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 본머스 근소 우세 (순위 10위 vs 11위, 승점 45 vs 43, 승률 38.7% vs 36.7%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.65 vs 1.3, 평균 실점 1.29 vs 1.17 &amp;rarr; 공격은 본머스, 수비는 팰리스가 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 팰리스 최근 4승 1무 / 본머스는 2무 3패 &amp;rarr; 최근 경기력은 팰리스 압도&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 팰리스 홈 5승 5무 6패 / 본머스 원정 6승 6무 4패 &amp;rarr; 원정에서도 본머스 안정감, 팽팽한 흐름&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.38~2.45 &amp;rarr; 크리스털 팰리스 근소 우세로 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.40~3.60 &amp;rarr; 무승부 가능성 열려 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 2.70~2.80 &amp;rarr; 본머스 역시 승리 가능성 충분&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 팰리스 승 2.45, 본머스 승 2.80 &amp;rarr; 약한 홈 우세지만 접전 양상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.60 &amp;rarr; 박빙 경기 예상, 무승부 가능성 상대적으로 높게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 전체 균형 &amp;rarr; 승패 예측 어려움 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 박빙의 경기&lt;/b&gt;, 양 팀 모두 승산 존재&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 무승부 포함 복수 베팅 전략 적합&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208345&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208345&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/649</guid>
      <comments>https://chatboy.tistory.com/649#entry649comment</comments>
      <pubDate>Tue, 8 Apr 2025 02:10:39 +0900</pubDate>
    </item>
    <item>
      <title>웨스트 햄	vs 사우샘프턴, West Ham vs Southampton, 4월 19일</title>
      <link>https://chatboy.tistory.com/648</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;웨스트 햄은 사우샘프턴에 비해 전력, 흐름, 홈 성적 등에서 확연한 우위를 보이고 있으며, 사우샘프턴의 극심한 부진으로 인해 승리를 기대할 수 있는 경기다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 웨스트 햄 우세 (순위 16위 vs 20위, 승점 35 vs 10, 승률 29.0% vs 6.5%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.13 vs 0.74, 평균 실점 1.68 vs 2.39 &amp;rarr; 득실 모두 웨스트 햄 우위&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 웨스트 햄 최근 1승 2무 2패 / 사우샘프턴은 1무 4패 &amp;rarr; 사우샘프턴의 부진 지속&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 웨스트 햄 홈 5승 3무 8패 / 사우샘프턴 원정 1승 2무 13패 &amp;rarr; 홈에서도 웨스트 햄 확실한 우세&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.57~1.62 &amp;rarr; 웨스트 햄 우세 반영, 신뢰도 높은 편&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.80~4.00 &amp;rarr; 무승부 가능성은 제한적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 5.00~5.50 &amp;rarr; 사우샘프턴 승리 가능성 매우 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.62, 원정 승 5.00 &amp;rarr; 웨스트 햄 우세 확실시&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 홈 승 최저 1.57 &amp;rarr; 시장 내 가장 강한 신뢰&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 무승부 3.80 &amp;rarr; 접전보다는 웨스트 햄 우세 흐름 강조&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 웨스트 햄 확실한 우세&lt;/b&gt;, 사우샘프턴 이변 가능성 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 웨스트 햄 단독 승 베팅 유리&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208352&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208352&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/648</guid>
      <comments>https://chatboy.tistory.com/648#entry648comment</comments>
      <pubDate>Tue, 8 Apr 2025 01:10:50 +0900</pubDate>
    </item>
    <item>
      <title>에버턴 vs 맨 시티, Everton vs Manchester City, 4월 19일</title>
      <link>https://chatboy.tistory.com/647</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;맨시티는 에버턴에 비해 전력, 득점력, 순위 모두에서 확실한 우위를 점하고 있으며, 원정에서도 안정적인 모습을 보여 승리에 가까운 상황이다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨시티 우세 (순위 6위 vs 15위, 승점 52 vs 35, 승률 48.4% vs 22.6%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.84 vs 1.06, 평균 실점 1.29 vs 1.23 &amp;rarr; 공격력에서 맨시티 압도&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 에버턴 최근 4무 1패 / 맨시티는 2승 2무 1패 &amp;rarr; 맨시티 상승세, 에버턴은 승리 없음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 에버턴 홈 4승 8무 4패 / 맨시티 원정 6승 4무 6패 &amp;rarr; 원정에서도 맨시티 안정감 우세&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 3.50~3.70 &amp;rarr; 에버턴 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.50~3.60 &amp;rarr; 무승부 가능성 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 1.95~2.00 &amp;rarr; 맨시티 승리 유력하게 책정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 맨시티 승 2.00, 에버턴 승 3.70 &amp;rarr; 에버턴 이변 가능성 거의 배제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.60 &amp;rarr; 접전 가능성 일부 고려&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 전체적으로 안정적 &amp;rarr; 맨시티 승 쪽에 베팅 집중&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 맨시티 우위 확실&lt;/b&gt;, 에버턴 승 가능성은 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 맨시티 승 베팅 중심, 무승부 리스크는 보완 가능&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208346&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208346&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/647</guid>
      <comments>https://chatboy.tistory.com/647#entry647comment</comments>
      <pubDate>Tue, 8 Apr 2025 00:10:52 +0900</pubDate>
    </item>
    <item>
      <title>본머스 vs 풀럼, Bournemouth vs Fulham, 4월 14일</title>
      <link>https://chatboy.tistory.com/646</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;본머스와 풀럼은 순위와 성적에서 큰 차이가 없으며, 최근 흐름에서는 풀럼이 다소 앞서지만 전체적으로 박빙의 접전이 예상되는 경기다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 풀럼 근소 우세 (순위 8위 vs 10위, 승점 48 vs 45, 승률 41.9% vs 38.7%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.65 vs 1.52, 평균 실점 1.29 vs 1.35 &amp;rarr; 본머스가 근소하게 안정적&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 본머스 최근 2무 3패 / 풀럼은 3승 2패 &amp;rarr; 최근 성적에서 풀럼이 상승세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 본머스 홈 6승 3무 6패 / 풀럼 원정 6승 4무 5패 &amp;rarr; 원정에서도 풀럼 안정적, 대등한 승부 예상&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.10~2.15 &amp;rarr; 본머스 근소 우세 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.40~3.60 &amp;rarr; 무승부 가능성 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 3.10~3.25 &amp;rarr; 풀럼의 승리 가능성도 배제되지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 2.15, 원정 승 3.20 &amp;rarr; 본머스 우세하지만 큰 차이는 아님&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 배당 밸런스 유지 &amp;rarr; 무승부 포함 접전 가능성 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 풀럼 승리 배당 최저 3.10 &amp;rarr; 원정 이변 가능성도 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 팽팽한 대결&lt;/b&gt;, 본머스 약 우세 예상되나 이변 여지 충분&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 무승부 포함한 복수 베팅 고려, 승부 예측 난도 높음&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208333&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208333&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/646</guid>
      <comments>https://chatboy.tistory.com/646#entry646comment</comments>
      <pubDate>Mon, 7 Apr 2025 23:10:24 +0900</pubDate>
    </item>
    <item>
      <title>뉴캐슬 vs 맨유, Newcastle vs Manchester United, 4월 13일</title>
      <link>https://chatboy.tistory.com/645</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;뉴캐슬은 전체적인 전력, 공격력, 최근 흐름에서 맨유를 앞서고 있으며, 홈에서도 강세를 보이고 있어 우세한 경기를 기대할 수 있다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 뉴캐슬 우세 (순위 5위 vs 13위, 승점 53 vs 38, 승률 53.3% vs 32.3%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.73 vs 1.19, 평균 실점 1.30 vs 1.32 &amp;rarr; 뉴캐슬이 확실한 공격 우위&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 뉴캐슬 최근 4승 1패 / 맨유는 2승 2무 1패 &amp;rarr; 상승세 뚜렷한 뉴캐슬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 뉴캐슬 홈 8승 2무 4패 / 맨유 원정 4승 5무 6패 &amp;rarr; 홈 성적에서도 뉴캐슬 우위&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.70~1.75 &amp;rarr; 뉴캐슬 우세 반영, 단독 승리 유력&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.80~4.10 &amp;rarr; 무승부 가능성은 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 4.33~4.40 &amp;rarr; 맨유 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.75, 무승부 3.90 &amp;rarr; 뉴캐슬 우세, 무승부 가능성도 일부 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 4.10 &amp;rarr; 가장 낮은 무승부 기대치&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 전체적으로 균형 잡힌 배당 &amp;rarr; 뉴캐슬 승리 공감대 형성&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 뉴캐슬 우세&lt;/b&gt;, 맨유의 원정 이변 가능성 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 뉴캐슬 단독 승 베팅 유리, 무승부 보험 가능&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208339&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208339&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/645</guid>
      <comments>https://chatboy.tistory.com/645#entry645comment</comments>
      <pubDate>Mon, 7 Apr 2025 22:10:22 +0900</pubDate>
    </item>
    <item>
      <title>첼시 vs 입스위치, Chelsea vs Ipswich, 4월 13일</title>
      <link>https://chatboy.tistory.com/644</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;첼시는 수비력과 홈 성적에서 압도적인 강세를 보이며, 하위권에 머무는 입스위치에 비해 전반적인 전력 격차가 뚜렷하다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 첼시 우세 (순위 4위 vs 18위, 승점 53 vs 20, 승률 48.4% vs 12.9%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.74 vs 1.00, 평균 실점 1.19 vs 2.10 &amp;rarr; 첼시가 공격력&amp;middot;수비력 모두 우위&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 첼시 최근 3승 1무 1패 / 입스위치는 1승 4패 &amp;rarr; 흐름 격차 뚜렷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 첼시 홈 9승 4무 2패 / 입스위치 원정 3승 4무 8패 &amp;rarr; 홈에서도 첼시 강세, 입스위치 원정 취약&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.33 고정 &amp;rarr; 첼시 절대 우세 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 5.25~6.00 &amp;rarr; 무승부 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 7.00~8.50 &amp;rarr; 입스위치 승리 가능성 거의 없음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 원정 승 8.50 &amp;rarr; 입스위치 이변 가능성 거의 배제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 6.00 &amp;rarr; 접전 가능성도 낮게 봄&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 전반적으로 첼시 우세에 베팅 집중&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 첼시 절대 우위&lt;/b&gt;, 이변 가능성 극히 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 첼시 단독 승 베팅이 가장 안정적&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208336&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208336&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/644</guid>
      <comments>https://chatboy.tistory.com/644#entry644comment</comments>
      <pubDate>Mon, 7 Apr 2025 21:10:42 +0900</pubDate>
    </item>
    <item>
      <title>울브스 vs 토트넘, Wolves vs Tottenham, 4월 13일</title>
      <link>https://chatboy.tistory.com/642</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;토트넘은 전체적인 공격력과 득실차에서 울브스를 앞서고 있으나, 최근 흐름과 원정 성적에서는 불안 요소가 존재해 접전이 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 토트넘 우세 (순위 14위 vs 17위, 승점 37 vs 32, 승률 35.5% vs 29.0%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.87 vs 1.39, 평균 실점 1.45 vs 1.9 &amp;rarr; 토트넘이 공격력&amp;middot;실점 모두 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 울브스 최근 3승 1무 1패 / 토트넘은 1승 4패 &amp;rarr; 최근 경기력은 울브스가 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 울브스 홈 4승 2무 9패 / 토트넘 원정 5승 1무 9패 &amp;rarr; 원정에서 토트넘도 불안, 접전 가능성 존재&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.25~2.30 &amp;rarr; 울브스 근소한 우세로 책정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.50 고정 &amp;rarr; 무승부 가능성도 꽤 있는 흐름&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 2.90~3.00 &amp;rarr; 토트넘도 승리 가능성 있는 접전&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 2.30 &amp;rarr; 울브스 약간 우세, 다만 혼전 양상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 배당 균형 유지 &amp;rarr; 무승부 가능성도 열려 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 토트넘 승 최저 2.90 &amp;rarr; 이변 가능성 소폭 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 양팀 우열 크지 않음&lt;/b&gt;, 무승부 포함한 다득점 접전 가능성&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 언더독 포함 복수 베팅, 무승부 커버 고려&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208342&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208342&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/642</guid>
      <comments>https://chatboy.tistory.com/642#entry642comment</comments>
      <pubDate>Mon, 7 Apr 2025 20:10:45 +0900</pubDate>
    </item>
    <item>
      <title>리버풀 vs 웨스트 햄, Liverpool vs West Ham, 4월 13일</title>
      <link>https://chatboy.tistory.com/643</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;리버풀은 전반적인 전력과 득점력, 수비력 모두에서 웨스트 햄을 압도하고 있으며, 홈에서도 강한 모습을 보여 확실한 우세가 예상된다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 리버풀 우세 (순위 1위 vs 16위, 승점 73 vs 35, 승률 71.0% vs 29.0%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 2.32 vs 1.13, 평균 실점 0.97 vs 1.68 &amp;rarr; 득실 양면에서 리버풀 압도&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 리버풀 최근 4승 1패 / 웨스트 햄은 1승 1무 3패 &amp;rarr; 상승세와 하락세의 대비&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 리버풀 홈 12승 2무 1패 / 웨스트 햄 원정 4승 5무 6패 &amp;rarr; 홈에서도 리버풀 뚜렷한 강세&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.30~1.33 &amp;rarr; 리버풀 절대 우세 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 5.00~5.75 &amp;rarr; 무승부 가능성 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 7.50~9.00 &amp;rarr; 웨스트 햄 승리 가능성 희박&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.33, 원정 승 9.00 &amp;rarr; 리버풀 압도적 전망&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 5.75, 원정 승 7.50 &amp;rarr; 무승부보다 원정 이변 가능성 조금 더 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 홈 승 최저 1.30 &amp;rarr; 승부 확신 가장 큼&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 리버풀 절대 우위&lt;/b&gt;, 변수 거의 없음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 리버풀 단독 승 베팅 최우선&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208337&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208337&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/643</guid>
      <comments>https://chatboy.tistory.com/643#entry643comment</comments>
      <pubDate>Mon, 7 Apr 2025 19:10:32 +0900</pubDate>
    </item>
    <item>
      <title>아스널 vs 브렌트퍼드, Arsenal vs Brentford, 4월 9일</title>
      <link>https://chatboy.tistory.com/641</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;아스널은 수비력과 안정된 홈 경기력을 바탕으로 브렌트퍼드에 우위를 점하고 있으며, 최근 흐름에서도 꾸준함을 유지하고 있다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 우세 (순위 2위 vs 12위, 승점 62 vs 42, 승률 54.8% vs 38.7%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.81 vs 1.65, 평균 실점 0.84 vs 1.52 &amp;rarr; 공격력은 유사하나 수비력에서 큰 차이&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 최근 2승 3무 / 브렌트퍼드 최근 1승 2무 2패 &amp;rarr; 아스널 꾸준함, 브렌트퍼드는 기복 있음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 아스널 홈 10승 4무 1패 / 브렌트퍼드 원정 5승 2무 8패 &amp;rarr; 홈에서도 아스널 강세&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.53~1.55 &amp;rarr; 아스널 우세 명확&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 4.20~4.50 &amp;rarr; 접전보다는 우세 흐름 예상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 5.50~5.80 &amp;rarr; 브렌트퍼드 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.55, 무승부 4.20 &amp;rarr; 아스널 승리와 리스크 균형 잡힌 전망&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 4.50 &amp;rarr; 무승부 가능성 상대적으로 낮게 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 안정적 &amp;rarr; 전체 시장에서 아스널 우세 공감대 형성&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 아스널 명확한 우세&lt;/b&gt;, 브렌트퍼드 이변 가능성 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 아스널 승 베팅 유리, 단독 승 베팅 가능&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208334&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208334&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/641</guid>
      <comments>https://chatboy.tistory.com/641#entry641comment</comments>
      <pubDate>Mon, 7 Apr 2025 18:10:48 +0900</pubDate>
    </item>
    <item>
      <title>노팅엄 포레스트 vs 에버턴, Nottingham Forest vs Everton, 4월 9일</title>
      <link>https://chatboy.tistory.com/640</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;노팅엄 포레스트는 전체적인 전력과 공격력, 홈 경기력 등에서 에버턴을 앞서며 승리에 가까운 위치에 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 노팅엄 우세 (순위 3위 vs 15위, 승점 57 vs 35, 승률 54.8% vs 22.6%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.65 vs 1.06, 평균 실점 1.19 vs 1.23 &amp;rarr; 공격력에서 확연한 차이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 노팅엄 최근 3승 1무 1패 / 에버턴은 4무 1패 &amp;rarr; 에버턴은 승리 부족&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 노팅엄 홈 9승 4무 2패 / 에버턴 원정 3승 6무 6패 &amp;rarr; 홈에서의 안정감 뚜렷&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.05~2.10 &amp;rarr; 노팅엄 포레스트 근소한 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.25~3.30 &amp;rarr; 무승부 가능성 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 3.60~3.70 &amp;rarr; 에버턴 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 2.10 &amp;rarr; 노팅엄 우세 반영, 접전 예상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.30, 원정 승 3.70 &amp;rarr; 무승부나 이변 가능성 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 전체적으로 안정적 &amp;rarr; 시장은 노팅엄 우세에 무게&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 노팅엄 포레스트 우세&lt;/b&gt;, 다만 무승부 가능성은 열려 있음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 노팅엄 승 중심, 보수적으로 무승부 복수 베팅 고려&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208340&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208340&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/640</guid>
      <comments>https://chatboy.tistory.com/640#entry640comment</comments>
      <pubDate>Mon, 7 Apr 2025 17:10:47 +0900</pubDate>
    </item>
    <item>
      <title>브라이턴	vs 레스터 시티, Brighton vs Leicester, 4월 9일</title>
      <link>https://chatboy.tistory.com/639</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;브라이턴은 안정적인 성적과 최근 반등세, 그리고 홈 경기력에서 우위를 보이며, 하위권에 머무는 레스터 시티를 상대로 유리한 경기를 펼칠 것으로 예상됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브라이턴 우세 (순위 9위 vs 19위, 승점 47 vs 17, 승률 38.7% vs 12.9%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.58 vs 0.81, 평균 실점 1.52 vs 2.26 &amp;rarr; 브라이턴이 득점력&amp;middot;수비 모두 앞섬&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브라이턴 최근 2승 1무 2패 / 레스터는 5연패 &amp;rarr; 흐름에서도 큰 차이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 브라이턴 홈 6승 6무 3패 / 레스터 원정 2승 2무 11패 &amp;rarr; 브라이턴 홈 우세 확실&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.28~1.30 &amp;rarr; 브라이턴 절대 우세 예상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 5.50~5.75 &amp;rarr; 무승부 가능성 매우 낮게 책정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 9.00~10.00 &amp;rarr; 레스터 시티 승리 가능성 극히 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.30, 원정 승 10.00 &amp;rarr; 브라이턴 완전한 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 가장 낮은 홈 승 배당 1.28 &amp;rarr; 승리에 대한 신뢰도 가장 높음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 무승부 5.75로 다소 높음 &amp;rarr; 무승부 시 수익 크지만 실현 가능성 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 브라이턴 절대 우위&lt;/b&gt;, 이변 가능성 극히 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 브라이턴 단독 승 베팅 최우선&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208335&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208335&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/639</guid>
      <comments>https://chatboy.tistory.com/639#entry639comment</comments>
      <pubDate>Mon, 7 Apr 2025 16:10:07 +0900</pubDate>
    </item>
    <item>
      <title>노팅엄 포레스트 vs 에버턴, Nottingham Forest vs Everton, 4월 9일</title>
      <link>https://chatboy.tistory.com/638</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;노팅엄 포레스트는 에버턴에 비해 전반적인 전력과 흐름에서 앞서 있으며, 홈 경기에서도 강세를 보여 유리한 흐름이 예상됩니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt; 노팅엄 우세 (순위 3위 vs 15위, 승점 57 vs 35, 승률 54.8% vs 22.6%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt; 평균 득점 1.65 vs 1.06, 평균 실점 1.19 vs 1.23 &amp;rarr; 공격력에서 확실한 차이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt; 노팅엄 최근 3승 1무 1패 / 에버턴은 4무 1패 &amp;rarr; 에버턴은 승리가 부족&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt; 노팅엄 홈 9승 4무 2패 / 에버턴 원정 3승 6무 6패 &amp;rarr; 홈 강세 vs 원정 불안&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 2.05~2.10 &amp;rarr; 노팅엄 포레스트 근소한 우세&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 3.25~3.30 &amp;rarr; 무승부 가능성 중간 수준&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 3.60~3.70 &amp;rarr; 에버턴 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 2.10 &amp;rarr; 가장 높은 수익률 제공, 접전 예상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 무승부 3.30, 원정 승 3.70 &amp;rarr; 무승부와 이변 가능성 모두 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 배당 균형 &amp;rarr; 전체적으로 노팅엄에 안정된 기대치 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 노팅엄 포레스트 우세&lt;/b&gt;, 에버턴의 역전 가능성은 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 노팅엄 승 베팅이 유리, 다만 무승부 리스크 일부 존재&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208340&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208340&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/638</guid>
      <comments>https://chatboy.tistory.com/638#entry638comment</comments>
      <pubDate>Mon, 7 Apr 2025 15:10:49 +0900</pubDate>
    </item>
    <item>
      <title>사우샘프턴 vs 애스턴 빌라, Southampton vs Aston Villa, 4월 9일</title>
      <link>https://chatboy.tistory.com/637</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;사우샘프턴은 전력, 흐름, 홈 성적 모두에서 애스턴 빌라에 크게 밀리고 있어, 이변을 기대하기 어려운 경기입니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 애스턴 빌라 우세 (순위 7위 vs 20위, 승점 51 vs 10, 승률 45.2% vs 6.5%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.48 vs 0.74, 평균 실점 1.48 vs 2.39 &amp;rarr; 사우샘프턴 수비 불안, 공격력도 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 사우샘프턴 최근 4패 1무 / 빌라 최근 4승 1패 &amp;rarr; 흐름에서 극명한 차이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 사우샘프턴 홈 1승 2무 12패 / 빌라 원정 6승 2무 7패 &amp;rarr; 원정에서도 빌라가 우위&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 텍스트로 작성합니다.&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 5.00~5.50 &amp;rarr; 사우샘프턴 승리 가능성 낮게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 4.33 고정 &amp;rarr; 무승부 가능성도 낮은 편&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 1.57 고정 &amp;rarr; 애스턴 빌라 승리 가능성 매우 높게 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 빌라 승 1.57, 사우샘프턴 승 5.00 &amp;rarr; 빌라 우세 확실시&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 홈 승 5.50로 가장 높음 &amp;rarr; 사우샘프턴 이변 시 수익 크지만 가능성 낮음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 빌라 승 1.57 고정 &amp;rarr; 시장 전체가 빌라 승 쪽으로 집중&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 기준 애스턴 빌라 명확한 우위&lt;/b&gt;, 이변 가능성 낮음&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 애스턴 빌라 단독 승 베팅 안정적&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208341&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208341&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/637</guid>
      <comments>https://chatboy.tistory.com/637#entry637comment</comments>
      <pubDate>Mon, 7 Apr 2025 14:03:37 +0900</pubDate>
    </item>
    <item>
      <title>맨 시티 vs 크리스털 팰리스, Manchester City vs Crystal Palace, 4월 9일</title>
      <link>https://chatboy.tistory.com/636</link>
      <description>&lt;p id=&quot;match-summary&quot; style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 블로그는 프리미어리그 경기의 실시간 정보를 제공합니다. 경기 일정, 팀 정보, 득점 기록, 주요 이벤트 및 배당률을 확인할 수 있으며, 실시간으로 자동 업데이트됩니다. 최신 경기 데이터를 반영하여 신속하고 정확한 정보를 제공합니다. &lt;/span&gt;&lt;/p&gt;
&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;!-- 1. 팀 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 팀 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;홈팀&lt;/th&gt;
&lt;td id=&quot;home-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;home-logo&quot; alt=&quot;홈팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;원정팀&lt;/th&gt;
&lt;td id=&quot;away-team&quot;&gt;로딩 중...&lt;/td&gt;
&lt;td&gt;&lt;img id=&quot;away-logo&quot; alt=&quot;원정팀 로고&quot; width=&quot;100&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 2. 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;경기 ID&lt;/th&gt;
&lt;td id=&quot;match-id&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;리그&lt;/th&gt;
&lt;td id=&quot;league&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 날짜&lt;/th&gt;
&lt;td id=&quot;match-date&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기장&lt;/th&gt;
&lt;td id=&quot;stadium&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;도시&lt;/th&gt;
&lt;td id=&quot;city&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;경기 상태&lt;/th&gt;
&lt;td id=&quot;match-status&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;라운드&lt;/th&gt;
&lt;td id=&quot;round&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;심판&lt;/th&gt;
&lt;td id=&quot;referee&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 3. 종합 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 종합 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table total-info&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;home-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;th id=&quot;away-rank-team&quot;&gt;로딩 중...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team-rank-table&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;font-size: 14px; color: gray; margin-top: 5px;&quot; data-ke-size=&quot;size16&quot;&gt;※ W = 승, D = 무, L = 패 (최근 5경기 성적 표시)&lt;/p&gt;
&lt;!-- 4. 경기 전 배당률 ---------------------------------- --&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #ede7f6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;맨시티는 전력 면에서 크리스털 팰리스를 앞서고 있으나, 수비 안정성은 다소 떨어져 있어 이변 가능성도 배제할 수 없습니다.&lt;/p&gt;
&lt;p style=&quot;margin-top: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;1. 전반적인 경기력 순위/승점/승률&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨시티 우세 (순위 6위 vs 11위, 승점 52 vs 43, 승률 48.4% vs 36.7%)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 평균 득점 1.84 vs 1.3, 평균 실점 1.29 vs 1.17 &amp;rarr; 맨시티가 공격은 강하지만 수비는 다소 불안&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;2. 최근 흐름&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨시티 최근 2승 2무 1패 / 팰리스는 3승 2무 &amp;rarr; 팰리스도 상승세 유지&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;✅ &lt;b&gt;3. 홈/원정 성적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; 맨시티 홈 9승 3무 3패 / 팰리스 원정 6승 5무 3패 &amp;rarr; 팰리스 원정 성적이 준수하여 접전 가능성 있음&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 4. 경기전 배당률 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. 경기 전 배당률&lt;/h3&gt;
&lt;table class=&quot;four-column&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;배팅사&lt;/th&gt;
&lt;th&gt;홈 승&lt;/th&gt;
&lt;th&gt;무승부&lt;/th&gt;
&lt;th&gt;원정 승&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;pre-match-odds&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;4&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 1. 배당 구조 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 홈 승 배당&lt;/b&gt; 1.50~1.53 &amp;rarr; 아스널의 확실한 우세 반영&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 무승부 배당&lt;/b&gt; 4.50 고정 &amp;rarr; 무승부 가능성 중간 정도로 평가&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 원정 승 배당&lt;/b&gt; 5.50~5.80 &amp;rarr; 팰리스 승리 가능성 낮게 책정&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 2. 배팅사별 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;A&lt;/b&gt;: 홈 승 1.50, 원정 승 5.80 &amp;rarr; 아스널 승에 강한 신뢰&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;B&lt;/b&gt;: 홈 승 1.53 &amp;rarr; 상대적으로 더 높은 수익 기대, 그러나 여전히 아스널 우세 판단&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;dagger; &lt;b&gt;C&lt;/b&gt;: 원정 승 5.50 &amp;rarr; 이변 가능성 거의 없음으로 판단&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #555; margin-top: 15px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 3. 종합 해석&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 배당 흐름상 아스널 명확한 우위&lt;/b&gt;, 팰리스 승리는 저평가&lt;/p&gt;
&lt;p style=&quot;font-size: 15px; color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ede7f6;&quot;&gt;&amp;dagger;&lt;/span&gt; 추천 전략: 아스널 단독 승 베팅이 안정적&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;!-- 5. 실시간 경기 정보 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 실시간 경기 정보&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;현재 점수&lt;/th&gt;
&lt;td id=&quot;live-score&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;득점 기록&lt;/th&gt;
&lt;td id=&quot;goal-record&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;주요 경기 이벤트&lt;/th&gt;
&lt;td id=&quot;match-events&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 6. 경기 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 경기 통계&lt;/h3&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th id=&quot;team1-name&quot;&gt;팀1&lt;/th&gt;
&lt;th id=&quot;team2-name&quot;&gt;팀2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;match-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;3&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 7.팀1 라인업 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 팀별 라인업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.1 팀1 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team1-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team1-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team1-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-lineup-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7.2 팀2 라인업&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;포메이션&lt;/th&gt;
&lt;td id=&quot;team2-formation&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;선발 선수&lt;/th&gt;
&lt;td id=&quot;team2-starters&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;교체 선수&lt;/th&gt;
&lt;td id=&quot;team2-substitutes&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!-- 8. 선수별 통계 ---------------------------------- --&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8. 선수별 통계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team1-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.1 팀1 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team1-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;team2-player-stats-title&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8.2 팀2 선수별 통계&lt;/b&gt;&lt;/p&gt;
&lt;table class=&quot;soccer-table&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;선수명 (포지션)&lt;/th&gt;
&lt;th&gt;통계&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody id=&quot;team2-player-stats&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;로딩 중...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;!--   **여기**에 스크립트를 넣으세요 --&gt;
&lt;script&gt;
&lt;!-- ✅ 불필요한 배당률 스크립트 제거  
document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
    let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208338&quot;; // ✅ 다른 스크립트와 공유할 전역 변수 설정
    let oddsUrl = `${baseUrl}pre_bet_${matchid}.json`; // ✅ matchid 기반 URL 설정

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; {
                if (!response.ok) throw new Error(`HTTP 오류: ${response.status}`);
                return response.json();
            })
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function updateBettingOdds() {
        let oddsTable = document.getElementById(&quot;betting-odds&quot;);
        if (!oddsTable) return;

        oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보를 불러오는 중...&lt;/td&gt;&lt;/tr&gt;`;

        fetchJson(oddsUrl).then(jsonData =&gt; {
            console.log(&quot;  배당률 JSON 데이터:&quot;, jsonData); // JSON 데이터 콘솔 출력 확인

            if (!jsonData || !Array.isArray(jsonData)) {
                oddsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;5&quot; class=&quot;bet-loading&quot;&gt;배당률 정보 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            oddsTable.innerHTML = &quot;&quot;;
            jsonData.forEach(odd =&gt; {
                if (!odd[&quot;배팅사&quot;] || !odd[&quot;승무패&quot;]) return; // 데이터 누락 방지

                let row = document.createElement(&quot;tr&quot;);
                row.classList.add(&quot;bet-row&quot;);

                let bookmakerCell = document.createElement(&quot;td&quot;);
                bookmakerCell.classList.add(&quot;bet-cell&quot;);
                bookmakerCell.textContent = odd[&quot;배팅사&quot;] || &quot;정보 없음&quot;;

                let methodCell = document.createElement(&quot;td&quot;);
                methodCell.classList.add(&quot;bet-cell&quot;);
                methodCell.textContent = &quot;승무패&quot;; // 데이터에 '방법' 없음 → 고정 값 설정

                let homeWinCell = document.createElement(&quot;td&quot;);
                homeWinCell.classList.add(&quot;bet-cell&quot;);
                homeWinCell.textContent = odd[&quot;승무패&quot;][&quot;홈&quot;] || &quot;정보 없음&quot;;

                let drawCell = document.createElement(&quot;td&quot;);
                drawCell.classList.add(&quot;bet-cell&quot;);
                drawCell.textContent = odd[&quot;승무패&quot;][&quot;무&quot;] || &quot;정보 없음&quot;;

                let awayWinCell = document.createElement(&quot;td&quot;);
                awayWinCell.classList.add(&quot;bet-cell&quot;);
                awayWinCell.textContent = odd[&quot;승무패&quot;][&quot;원정&quot;] || &quot;정보 없음&quot;;

                row.appendChild(bookmakerCell);
                row.appendChild(methodCell);
                row.appendChild(homeWinCell);
                row.appendChild(drawCell);
                row.appendChild(awayWinCell);

                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 배당률 정보 업데이트 완료&quot;);
        });
    }

    updateBettingOdds();
});
&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chatman.tistory.com/527&quot;&gt;&lt;button class=&quot;aros-button&quot;&gt;실시간 배당률 알아보기&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a id=&quot;update-button&quot; style=&quot;position: fixed; right: 20px; bottom: 20px; padding: 12px 20px; background-color: #ffc0cb; /* 옅은 분홍색 */              color: black; border: none; border-radius: 8px; font-size: 14px; font-weight: bold; text-align: center; text-decoration: none; cursor: pointer; box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2); transition: background-color 0.3s ease;&quot; href=&quot;#&quot;&gt;     실시간 경기 업데이트 &lt;/a&gt;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- script ---------------------------------- --&gt;
&lt;script&gt;

document.addEventListener(&quot;DOMContentLoaded&quot;, function () {
  	let baseUrl = &quot;https://clockmaker2020.github.io/premier/data/&quot;;
    let matchid = &quot;1208338&quot;; // ✅ 원하는 경기 ID를 변수로 설정
    let matchId = `real_live_${matchid}.json`;
    let liveDataUrl = `${baseUrl}${matchId}`;
  
    let TEAM_NAME_MAPPING = {
        &quot;Nottingham Forest&quot;: &quot;노팅엄 포레스트&quot;,
        &quot;Manchester City&quot;: &quot;맨 시티&quot;,
        &quot;Liverpool&quot;: &quot;리버풀&quot;,
        &quot;Southampton&quot;: &quot;사우샘프턴&quot;,
        &quot;Brighton&quot;: &quot;브라이턴&quot;,
        &quot;Fulham&quot;: &quot;풀럼&quot;,
        &quot;Crystal Palace&quot;: &quot;크리스털 팰리스&quot;,
        &quot;Ipswich&quot;: &quot;입스위치&quot;,
        &quot;Brentford&quot;: &quot;브렌트퍼드&quot;,
        &quot;Aston Villa&quot;: &quot;애스턴 빌라&quot;,
        &quot;Wolves&quot;: &quot;울브스&quot;,
        &quot;Everton&quot;: &quot;에버턴&quot;,
        &quot;Tottenham&quot;: &quot;토트넘&quot;,
        &quot;Bournemouth&quot;: &quot;본머스&quot;,
        &quot;Chelsea&quot;: &quot;첼시&quot;,
        &quot;Leicester&quot;: &quot;레스터 시티&quot;,
        &quot;Manchester United&quot;: &quot;맨유&quot;,
        &quot;Arsenal&quot;: &quot;아스널&quot;,
        &quot;West Ham&quot;: &quot;웨스트 햄&quot;,
        &quot;Newcastle&quot;: &quot;뉴캐슬&quot;
    };

    function translateTeamName(englishName) {
        return TEAM_NAME_MAPPING[englishName] || englishName;
    }

    function fetchJson(url) {
        return fetch(url)
            .then(response =&gt; response.ok ? response.json() : Promise.reject(`HTTP 오류: ${response.status}`))
            .catch(error =&gt; {
                console.error(`❌ JSON 로드 실패: ${url}`, error);
                return null;
            });
    }

    function setElementText(id, text) {
        let element = document.getElementById(id);
        if (element) element.innerHTML = text || &quot;정보 없음&quot;;
    }

    function setElementImage(id, src) {
        let element = document.getElementById(id);
        if (element) element.src = src || &quot;&quot;;
    }

    function loadMatchData() {
        //fetchJson(liveDataUrl).then(jsonData =&gt; {
        fetchJson(liveDataUrl).then(jsonData =&gt; {
            if (!jsonData) {
                console.warn(&quot;⚠️ 경기 데이터가 없습니다.&quot;);
                return;
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   1. 팀 정보 적용 (한글 변환 포함)
            let teams = jsonData[&quot;팀 정보&quot;];
            if (teams) {
                setElementText(&quot;home-team&quot;, translateTeamName(teams[&quot;홈팀&quot;][&quot;이름&quot;]));
                setElementText(&quot;away-team&quot;, translateTeamName(teams[&quot;원정팀&quot;][&quot;이름&quot;]));
                setElementImage(&quot;home-logo&quot;, teams[&quot;홈팀&quot;][&quot;로고&quot;]);
                setElementImage(&quot;away-logo&quot;, teams[&quot;원정팀&quot;][&quot;로고&quot;]);
            }
//////////////////////////////////////////////////////////////////////////////////////////////
            //   2. 경기 정보 적용
            setElementText(&quot;match-id&quot;, jsonData[&quot;경기 ID&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;league&quot;, jsonData[&quot;리그&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;stadium&quot;, jsonData[&quot;경기장&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;city&quot;, jsonData[&quot;도시&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;match-status&quot;, jsonData[&quot;경기 상태&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;round&quot;, jsonData[&quot;라운드&quot;] || &quot;정보 없음&quot;);
            setElementText(&quot;referee&quot;, jsonData[&quot;심판&quot;] || &quot;정보 없음&quot;);

            // ✅ 경기 시작 시간 JSON 로드
            let startTimeFile = `${baseUrl}match_${matchid}_start.json`;
            setElementText(&quot;match-date&quot;, &quot;로딩 중...&quot;);

            fetchJson(startTimeFile).then(startTimeData =&gt; {
                let matchStartTimeKST = startTimeData &amp;&amp; startTimeData[&quot;start_time_kst&quot;]
                    ? startTimeData[&quot;start_time_kst&quot;]
                    : jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;;
                setElementText(&quot;match-date&quot;, matchStartTimeKST);
            }).catch(() =&gt; {
                setElementText(&quot;match-date&quot;, jsonData[&quot;경기 날짜&quot;] || &quot;정보 없음&quot;);
            });
          
//////////////////////////////////////////////////////////////////////////////////////////////          
//////////////////////////////////////////////////////////////////////////////////////////////          
        //   3. 종합 정보 적용
        let rankData = jsonData[&quot;팀 순위&quot;];
        if (rankData &amp;&amp; rankData[&quot;홈팀&quot;] &amp;&amp; rankData[&quot;원정팀&quot;]) {
            document.getElementById(&quot;home-rank-team&quot;).textContent = translateTeamName(rankData[&quot;홈팀&quot;][&quot;팀&quot;]);
            document.getElementById(&quot;away-rank-team&quot;).textContent = translateTeamName(rankData[&quot;원정팀&quot;][&quot;팀&quot;]);

            let tbody = document.getElementById(&quot;team-rank-table&quot;);
            tbody.innerHTML = &quot;&quot;;

            function addRankRow(title, homeVal, awayVal) {
                let tr = document.createElement(&quot;tr&quot;);
                tr.innerHTML = `
                    &lt;td&gt;${title}&lt;/td&gt;
                    &lt;td&gt;${homeVal}&lt;/td&gt;
                    &lt;td&gt;${awayVal}&lt;/td&gt;
                `;
                tbody.appendChild(tr);
            }

            addRankRow(&quot;순위&quot;, rankData[&quot;홈팀&quot;][&quot;순위&quot;], rankData[&quot;원정팀&quot;][&quot;순위&quot;]);
            addRankRow(&quot;승점&quot;, rankData[&quot;홈팀&quot;][&quot;승점&quot;], rankData[&quot;원정팀&quot;][&quot;승점&quot;]);
            addRankRow(&quot;경기수&quot;, rankData[&quot;홈팀&quot;][&quot;경기수&quot;], rankData[&quot;원정팀&quot;][&quot;경기수&quot;]);
            addRankRow(&quot;승/무/패&quot;, rankData[&quot;홈팀&quot;][&quot;승/무/패&quot;], rankData[&quot;원정팀&quot;][&quot;승/무/패&quot;]);
            addRankRow(&quot;승률&quot;, rankData[&quot;홈팀&quot;][&quot;승률&quot;], rankData[&quot;원정팀&quot;][&quot;승률&quot;]);
            addRankRow(&quot;득/실&quot;, rankData[&quot;홈팀&quot;][&quot;득/실&quot;], rankData[&quot;원정팀&quot;][&quot;득/실&quot;]);
            addRankRow(&quot;득실차&quot;, rankData[&quot;홈팀&quot;][&quot;득실차&quot;], rankData[&quot;원정팀&quot;][&quot;득실차&quot;]);
            addRankRow(&quot;평균 득점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 득점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 득점&quot;]);
            addRankRow(&quot;평균 실점&quot;, rankData[&quot;홈팀&quot;][&quot;평균 실점&quot;], rankData[&quot;원정팀&quot;][&quot;평균 실점&quot;]);
            addRankRow(&quot;최근 5경기&quot;, rankData[&quot;홈팀&quot;][&quot;최근 5경기&quot;], rankData[&quot;원정팀&quot;][&quot;최근 5경기&quot;]);
            addRankRow(&quot;홈 성적&quot;, rankData[&quot;홈팀&quot;][&quot;홈 성적&quot;], rankData[&quot;원정팀&quot;][&quot;홈 성적&quot;]);
            addRankRow(&quot;원정 성적&quot;, rankData[&quot;홈팀&quot;][&quot;원정 성적&quot;], rankData[&quot;원정팀&quot;][&quot;원정 성적&quot;]);
        }

        //   4. 경기 전 배당률 적용
        let preOddsUrl = `${baseUrl}pre_bet_${matchid}.json`;
        fetchJson(preOddsUrl).then(preOddsData =&gt; {
            let oddsTable = document.getElementById(&quot;pre-match-odds&quot;);
            if (!oddsTable || !Array.isArray(preOddsData)) return;

            oddsTable.innerHTML = &quot;&quot;;

            preOddsData.forEach(item =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                const bookmakerNameMap = {
                    &quot;William Hill&quot;: &quot;A&quot;,
                    &quot;Bet365&quot;: &quot;B&quot;,
                    &quot;Betway&quot;: &quot;C&quot;
                };
                let bookmakerName = bookmakerNameMap[item[&quot;배팅사&quot;]] || item[&quot;배팅사&quot;] || &quot;-&quot;;

                row.innerHTML = `
                    &lt;td&gt;${bookmakerName}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;홈&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;무&quot;] || &quot;-&quot;}&lt;/td&gt;
                    &lt;td&gt;${item[&quot;승무패&quot;]?.[&quot;원정&quot;] || &quot;-&quot;}&lt;/td&gt;
                `;
                oddsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 전 배당률이 성공적으로 로드되었습니다.&quot;);
        });          
          
          
//////////////////////////////////////////////////////////////////////////////////////////////
            //   3. 실시간 경기 정보 적용
            fetch(`${baseUrl}real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                function translateTeamName(englishName) {
                  return TEAM_NAME_MAPPING[englishName] || englishName;
                }

                // ✅ 현재 점수 적용
                let liveScore = document.getElementById(&quot;live-score&quot;);
                if (liveScore) {
                  liveScore.textContent = data[&quot;현재 점수&quot;] !== undefined ? data[&quot;현재 점수&quot;] : &quot;정보 없음&quot;;
                }

                // ✅ 득점 기록 적용
                let goalRecord = document.getElementById(&quot;goal-record&quot;);
                if (goalRecord) {
                  let goals = data[&quot;득점 기록&quot;];
                  if (Array.isArray(goals) &amp;&amp; goals.length &gt; 0) {
                    goalRecord.innerHTML = goals
                      .map(g =&gt; `${g[&quot;시간&quot;] || &quot;??&quot;}분 - ${g[&quot;선수&quot;] || &quot;알 수 없음&quot;} (${translateTeamName(g[&quot;팀&quot;])})`)
                      .join(&quot;&lt;br&gt;&quot;);
                  } else {
                    goalRecord.textContent = &quot;득점 정보 없음&quot;;
                  }
                }

                // ✅ 주요 경기 이벤트 적용
                let eventTable = document.getElementById(&quot;match-events&quot;);
                if (!eventTable) {
                  console.error(&quot;❌ 'match-events' 요소를 찾을 수 없습니다.&quot;);
                  return;
                }

                eventTable.innerHTML = &quot;&quot;; // 기존 데이터 초기화

                let events = data[&quot;경기 이벤트&quot;];
                if (!Array.isArray(events) || events.length === 0) {
                  eventTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;4&quot;&gt;경기 이벤트 없음&lt;/td&gt;&lt;/tr&gt;`;
                  return;
                }

                events.forEach(event =&gt; {
                  let row = document.createElement(&quot;tr&quot;);

                  let timeCell = document.createElement(&quot;td&quot;);
                  timeCell.textContent = `${event[&quot;시간&quot;] || &quot;??&quot;}분`;

                  let typeCell = document.createElement(&quot;td&quot;);
                  typeCell.textContent = event[&quot;이벤트 종류&quot;] || &quot;알 수 없음&quot;;

                  let playerCell = document.createElement(&quot;td&quot;);
                  playerCell.textContent = event[&quot;선수&quot;] || &quot;알 수 없음&quot;;

                  let teamCell = document.createElement(&quot;td&quot;);
                  teamCell.textContent = translateTeamName(event[&quot;팀&quot;] || &quot;알 수 없음&quot;);

                  row.appendChild(timeCell);
                  row.appendChild(typeCell);
                  row.appendChild(playerCell);
                  row.appendChild(teamCell);

                  eventTable.appendChild(row);
                });

                console.log(&quot;✅ 경기 이벤트 및 점수, 득점 기록이 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 경기 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////////////////////////////////////////
            //   4. 경기 진행 상태 적용
            // ✅ 경기 통계 항목 영어 → 한국어 매핑
            let STAT_NAME_MAPPING = {
                &quot;Shots on Goal&quot;: &quot;유효 슈팅&quot;,
                &quot;Shots off Goal&quot;: &quot;빗나간 슈팅&quot;,
                &quot;Total Shots&quot;: &quot;총 슈팅&quot;,
                &quot;Blocked Shots&quot;: &quot;막힌 슈팅&quot;,
                &quot;Shots insidebox&quot;: &quot;박스 안 슈팅&quot;,
                &quot;Shots outsidebox&quot;: &quot;박스 밖 슈팅&quot;,
                &quot;Fouls&quot;: &quot;반칙&quot;,
                &quot;Corner Kicks&quot;: &quot;코너킥&quot;,
                &quot;Offsides&quot;: &quot;오프사이드&quot;,
                &quot;Ball Possession&quot;: &quot;볼 점유율&quot;,
                &quot;Yellow Cards&quot;: &quot;경고&quot;,
                &quot;Red Cards&quot;: &quot;퇴장&quot;,
                &quot;Goalkeeper Saves&quot;: &quot;골키퍼 선방&quot;,
                &quot;Total passes&quot;: &quot;총 패스&quot;,
                &quot;Passes accurate&quot;: &quot;정확한 패스&quot;,
                &quot;Passes %&quot;: &quot;패스 성공률&quot;,
                &quot;expected_goals&quot;: &quot;예상 득점(xG)&quot;,
                &quot;goals_prevented&quot;: &quot;실점 방지&quot;
            };

            // ✅ 팀명 영어 → 한글 변환
            function translateTeamName(englishName) {
                return TEAM_NAME_MAPPING[englishName] || englishName;
            }

            // ✅ 경기 통계 테이블 가져오기
            let statsTable = document.getElementById(&quot;match-stats&quot;);
            if (!statsTable) return;

            // ✅ 경기 통계 데이터 가져오기
            let matchStats = jsonData[&quot;경기 통계&quot;];
            if (!Array.isArray(matchStats) || matchStats.length === 0) {
                statsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;3&quot;&gt;경기 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                return;
            }

            // ✅ 홈팀, 원정팀 이름 설정
            let team1 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;][&quot;이름&quot;]);
            let team2 = translateTeamName(jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;][&quot;이름&quot;]);

            document.getElementById(&quot;team1-name&quot;).textContent = team1;
            document.getElementById(&quot;team2-name&quot;).textContent = team2;

            // ✅ 기존 내용 초기화
            statsTable.innerHTML = &quot;&quot;;

            // ✅ 항목별 팀별 데이터 정리
            let statsMap = {};
            matchStats.forEach(stat =&gt; {
                let statName = STAT_NAME_MAPPING[stat[&quot;항목&quot;]] || stat[&quot;항목&quot;];
                let team = translateTeamName(stat[&quot;팀&quot;]);

                if (!statsMap[statName]) statsMap[statName] = {};
                statsMap[statName][team] = stat[&quot;수치&quot;] !== undefined ? stat[&quot;수치&quot;] : &quot;-&quot;;
            });

            // ✅ 테이블에 적용
            Object.keys(statsMap).forEach(statName =&gt; {
                let row = document.createElement(&quot;tr&quot;);

                let typeCell = document.createElement(&quot;td&quot;);
                typeCell.textContent = statName;

                let team1Cell = document.createElement(&quot;td&quot;);
                team1Cell.textContent = statsMap[statName][team1] || &quot;-&quot;;

                let team2Cell = document.createElement(&quot;td&quot;);
                team2Cell.textContent = statsMap[statName][team2] || &quot;-&quot;;

                row.appendChild(typeCell);
                row.appendChild(team1Cell);
                row.appendChild(team2Cell);

                statsTable.appendChild(row);
            });

            console.log(&quot;✅ 경기 통계 테이블이 업데이트되었습니다.&quot;);
//////////////////////////////////////////////////////////
            // ✅ 5. 라인업 적용
            fetch(`https://clockmaker2020.github.io/premier/data/real_live_${matchid}.json`)
              .then(response =&gt; response.json())
              .then(data =&gt; {
                  if (!data[&quot;라인업&quot;] || data[&quot;라인업&quot;].length &lt; 2) {
                      console.warn(&quot;⚠️ 라인업 데이터가 부족하거나 존재하지 않습니다.&quot;);
                      return;
                  }

                  let team1 = data[&quot;라인업&quot;][0] || {};
                  let team2 = data[&quot;라인업&quot;][1] || {};

                  let team1Name = TEAM_NAME_MAPPING[team1[&quot;팀&quot;]] || team1[&quot;팀&quot;] || &quot;알 수 없음&quot;;
                  let team2Name = TEAM_NAME_MAPPING[team2[&quot;팀&quot;]] || team2[&quot;팀&quot;] || &quot;알 수 없음&quot;;

                  // ✅ 요소가 존재할 경우에만 업데이트
                  let team1Title = document.getElementById(&quot;team1-lineup-title&quot;);
                  let team2Title = document.getElementById(&quot;team2-lineup-title&quot;);
                  let team1Formation = document.getElementById(&quot;team1-formation&quot;);
                  let team2Formation = document.getElementById(&quot;team2-formation&quot;);
                  let team1Starters = document.getElementById(&quot;team1-starters&quot;);
                  let team2Starters = document.getElementById(&quot;team2-starters&quot;);
                  let team1Substitutes = document.getElementById(&quot;team1-substitutes&quot;);
                  let team2Substitutes = document.getElementById(&quot;team2-substitutes&quot;);

                  if (team1Title) team1Title.textContent = `5.1 ${team1Name} 라인업`;
                  if (team2Title) team2Title.textContent = `5.2 ${team2Name} 라인업`;

                  if (team1Formation) team1Formation.textContent = team1[&quot;포메이션&quot;] || &quot;정보 없음&quot;;
                  if (team2Formation) team2Formation.textContent = team2[&quot;포메이션&quot;] || &quot;정보 없음&quot;;

                  if (team1Starters) team1Starters.textContent = Array.isArray(team1[&quot;선발 선수&quot;]) ? team1[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Starters) team2Starters.textContent = Array.isArray(team2[&quot;선발 선수&quot;]) ? team2[&quot;선발 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  if (team1Substitutes) team1Substitutes.textContent = Array.isArray(team1[&quot;교체 선수&quot;]) ? team1[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;
                  if (team2Substitutes) team2Substitutes.textContent = Array.isArray(team2[&quot;교체 선수&quot;]) ? team2[&quot;교체 선수&quot;].join(&quot;, &quot;) : &quot;정보 없음&quot;;

                  console.log(&quot;✅ 라인업 데이터가 성공적으로 업데이트되었습니다.&quot;);
              })
              .catch(error =&gt; console.error(&quot;❌ 라인업 데이터 로드 실패:&quot;, error));
//////////////////////////////////////////////////////////
            //   6. 선수별 통계 적용 (한글 팀명 적용)

            // ✅ 데이터가 제대로 로드되었는지 확인
            if (!jsonData || !jsonData[&quot;선수별 통계&quot;]) {
                console.error(&quot;❌ 선수별 통계를 불러올 수 없습니다. 데이터 확인 필요&quot;);
                return;
            }

            try {
                // ✅ 팀명 가져오기
                let team1 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;홈팀&quot;] : {};
                let team2 = jsonData[&quot;팀 정보&quot;] &amp;&amp; jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] ? jsonData[&quot;팀 정보&quot;][&quot;원정팀&quot;] : {};

                let team1Name = TEAM_NAME_MAPPING[team1[&quot;이름&quot;]] || team1[&quot;이름&quot;] || &quot;알 수 없음&quot;;
                let team2Name = TEAM_NAME_MAPPING[team2[&quot;이름&quot;]] || team2[&quot;이름&quot;] || &quot;알 수 없음&quot;;

                // ✅ 요소 가져오기
                let team1Title = document.getElementById(&quot;team1-player-stats-title&quot;);
                let team2Title = document.getElementById(&quot;team2-player-stats-title&quot;);
                let team1StatsTable = document.getElementById(&quot;team1-player-stats&quot;);
                let team2StatsTable = document.getElementById(&quot;team2-player-stats&quot;);

                // ✅ 제목 변경 (5번 방식과 동일하게 textContent 변경)
                if (team1Title) team1Title.textContent = `6.1 ${team1Name} 선수별 통계`;
                if (team2Title) team2Title.textContent = `6.2 ${team2Name} 선수별 통계`;

                // ✅ 선수별 통계 데이터 확인
                let playerStats = Array.isArray(jsonData[&quot;선수별 통계&quot;]) ? jsonData[&quot;선수별 통계&quot;] : [];
                if (playerStats.length === 0) {
                    console.warn(&quot;⚠️ 선수별 통계 데이터 없음&quot;);
                    team1StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    team2StatsTable.innerHTML = `&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;선수별 통계 없음&lt;/td&gt;&lt;/tr&gt;`;
                    return;
                }

                // ✅ 기존 내용 초기화
                team1StatsTable.innerHTML = &quot;&quot;;
                team2StatsTable.innerHTML = &quot;&quot;;

                // ✅ 선수별 통계 적용 (5번과 동일한 방식)
                playerStats.forEach(player =&gt; {
                    let row = document.createElement(&quot;tr&quot;);
                    let nameCell = document.createElement(&quot;td&quot;);
                    nameCell.textContent = `${player[&quot;선수&quot;] || &quot;이름 없음&quot;} (${player[&quot;포지션&quot;] || &quot;?&quot;})`;

                    let statsText = [];
                    let stats = player[&quot;스탯&quot;] &amp;&amp; Array.isArray(player[&quot;스탯&quot;]) &amp;&amp; player[&quot;스탯&quot;].length &gt; 0 ? player[&quot;스탯&quot;][0] : null;

                    if (!stats) {
                        statsText.push(&quot;통계 없음&quot;);
                    } else {
                        if (stats[&quot;games&quot;]) {
                            let minutes = (stats[&quot;games&quot;][&quot;minutes&quot;] !== null) ? `${stats[&quot;games&quot;][&quot;minutes&quot;]}분` : &quot;출전 기록 없음&quot;;  // ✅ 수정
                            let rating = (stats[&quot;games&quot;][&quot;rating&quot;] !== null) ? stats[&quot;games&quot;][&quot;rating&quot;] : &quot;통계 없음&quot;;  // ✅ 수정

                            statsText.push(`출전 시간: ${minutes}`);
                            statsText.push(`평점: ${rating}`);
                        }

                        if (stats[&quot;goals&quot;]) {
                            if (stats[&quot;goals&quot;][&quot;total&quot;]) statsText.push(`득점: ${stats[&quot;goals&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;assists&quot;]) statsText.push(`도움: ${stats[&quot;goals&quot;][&quot;assists&quot;]}`);
                            if (stats[&quot;goals&quot;][&quot;saves&quot;]) statsText.push(`세이브: ${stats[&quot;goals&quot;][&quot;saves&quot;]}`);
                        }

                        if (stats[&quot;passes&quot;]) {
                            if (stats[&quot;passes&quot;][&quot;total&quot;]) statsText.push(`패스: ${stats[&quot;passes&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;passes&quot;][&quot;accuracy&quot;]) statsText.push(`패스 정확도: ${stats[&quot;passes&quot;][&quot;accuracy&quot;]}%`);
                        }

                        if (stats[&quot;tackles&quot;]) {
                            if (stats[&quot;tackles&quot;][&quot;total&quot;]) statsText.push(`태클: ${stats[&quot;tackles&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;tackles&quot;][&quot;interceptions&quot;]) statsText.push(`인터셉트: ${stats[&quot;tackles&quot;][&quot;interceptions&quot;]}`);
                        }

                        if (stats[&quot;duels&quot;]) {
                            if (stats[&quot;duels&quot;][&quot;total&quot;]) statsText.push(`경합: ${stats[&quot;duels&quot;][&quot;total&quot;]}`);
                            if (stats[&quot;duels&quot;][&quot;won&quot;]) statsText.push(`경합 승리: ${stats[&quot;duels&quot;][&quot;won&quot;]}`);
                        }

                        if (stats[&quot;fouls&quot;]) {
                            if (stats[&quot;fouls&quot;][&quot;drawn&quot;]) statsText.push(`파울 유도: ${stats[&quot;fouls&quot;][&quot;drawn&quot;]}`);
                            if (stats[&quot;fouls&quot;][&quot;committed&quot;]) statsText.push(`파울: ${stats[&quot;fouls&quot;][&quot;committed&quot;]}`);
                        }

                        if (stats[&quot;cards&quot;]) {
                            if (stats[&quot;cards&quot;][&quot;yellow&quot;]) statsText.push(`경고: ${stats[&quot;cards&quot;][&quot;yellow&quot;]}`);
                            if (stats[&quot;cards&quot;][&quot;red&quot;]) statsText.push(`퇴장: ${stats[&quot;cards&quot;][&quot;red&quot;]}`);
                        }
                    }

                    let statCell = document.createElement(&quot;td&quot;);
                    statCell.innerHTML = statsText.length ? statsText.join(&quot;&lt;br&gt;&quot;) : &quot;통계 없음&quot;;

                    row.appendChild(nameCell);
                    row.appendChild(statCell);

                    // ✅ 한글 팀명 기준으로 팀 구분
                    let playerTeam = TEAM_NAME_MAPPING[player[&quot;팀&quot;]] || player[&quot;팀&quot;];

                    if (playerTeam === team1Name) {
                        team1StatsTable.appendChild(row);
                    } else if (playerTeam === team2Name) {
                        team2StatsTable.appendChild(row);
                    }
                });


                console.log(&quot;✅ 선수별 통계 제목 및 테이블 업데이트 완료&quot;);
            } catch (error) {
                console.error(&quot;❌ 선수별 통계 업데이트 중 오류 발생:&quot;, error);
            }

//////////////////////////////////////////////////////////          

        });
    }

    // ✅ 페이지 로드 시 데이터 불러오기
    loadMatchData();

    // ✅ 업데이트 버튼 클릭 시 데이터 새로고침
    document.getElementById(&quot;update-button&quot;).addEventListener(&quot;click&quot;, function () {
        loadMatchData();
        let updateButton = document.getElementById(&quot;update-button&quot;);
        updateButton.style.backgroundColor = &quot;#90EE90&quot;; // 옅은 녹색
        setTimeout(() =&gt; updateButton.style.backgroundColor = &quot;#FFC0CB&quot;, 3000);
    });
});


&lt;/script&gt;</description>
      <category>manchester city vs crystal palac</category>
      <category>맨 시티 vs 크리스털 팰리스</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/636</guid>
      <comments>https://chatboy.tistory.com/636#entry636comment</comments>
      <pubDate>Mon, 7 Apr 2025 11:41:03 +0900</pubDate>
    </item>
    <item>
      <title>뇌절, 뇌절 뜻</title>
      <link>https://chatboy.tistory.com/635</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;뇌절&lt;/b&gt;&quot;은 똑같은 말이나 행동을 집착적으로 반복하여 상대를 피곤하게 만들거나 질리게 하는 상황을 &lt;b&gt;부정적으로&lt;/b&gt; 표현한 신조어입니다. 원래는 게임 용어에서 &amp;lsquo;승산이 없음에도 계속 진행하는 플레이&amp;rsquo;를 비판할 때 사용되었지만, 지금은 일상 대화나 온라인 커뮤니티 등에서 &lt;b&gt;분위기를 망치거나 과하게 나서는 행동&lt;/b&gt;을 꼬집는 말로 쓰이고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N2Rxv/btsM9VSwlyh/Tqk5hJAJmyUIjjUGAFJVKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N2Rxv/btsM9VSwlyh/Tqk5hJAJmyUIjjUGAFJVKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N2Rxv/btsM9VSwlyh/Tqk5hJAJmyUIjjUGAFJVKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN2Rxv%2FbtsM9VSwlyh%2FTqk5hJAJmyUIjjUGAFJVKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d9ead3; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 뇌절 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뇌절&lt;/b&gt;은 상황을 파악하지 못하고 과하게 말하거나 행동해, 처음엔 웃기거나 흥미롭던 것도 나중에는 피로감을 유발하게 만드는 것을 뜻합니다. 특히 온라인에서는 댓글이나 드립을 반복해 분위기를 망치는 경우에 자주 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 같은 말이나 행동을 지나치게 반복해 상대를 질리게 하거나 분위기를 망치는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 오버, 과몰입, 도를 넘다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: TMI, 진지충, 갑분싸&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d9ead3; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 뇌절 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;뇌절&lt;/b&gt;&quot;은 본래 게임 커뮤니티에서 유래한 용어로, &amp;lsquo;뇌가 멈췄다&amp;rsquo;는 의미에서 &lt;b&gt;판단력을 잃은 상태에서 계속 행동하는 것&lt;/b&gt;을 비유한 말입니다. 이후 유튜브, 트위터, 디시인사이드 등 온라인 커뮤니티에서 유머 코드나 말장난을 과하게 반복할 때 쓰이면서 신조어로 자리 잡았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt; (adsbygoogle = window.adsbygoogle || []).push({}); &lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d9ead3; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 뇌절 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뇌절&lt;/b&gt;이라는 표현은 일상 대화에서도 흔히 볼 수 있습니다. 가볍게 던진 농담을 반복하거나 분위기를 깨는 행동을 할 때 &amp;ldquo;그건 좀 &lt;b&gt;뇌절&lt;/b&gt;이야&amp;rdquo;라고 말하기도 하지요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;처음엔 재밌었는데 세 번쯤 하니까 &lt;b&gt;뇌절&lt;/b&gt; 느낌 났어.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;분위기 좋은데 갑자기 뜬금없는 얘기해서 &lt;b&gt;뇌절&lt;/b&gt;됐음.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5AVXK/btsM9VruVUc/ApQyEjkwtQE1aradKNlLz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5AVXK/btsM9VruVUc/ApQyEjkwtQE1aradKNlLz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5AVXK/btsM9VruVUc/ApQyEjkwtQE1aradKNlLz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5AVXK%2FbtsM9VruVUc%2FApQyEjkwtQE1aradKNlLz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d9ead3; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 뇌절 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뇌절&lt;/b&gt;은 신조어이기 때문에 정해진 한자는 없지만, 의미상 &amp;lsquo;생각을 멈춘 상태&amp;rsquo; 또는 &amp;lsquo;판단력 상실&amp;rsquo;로 볼 수 있습니다. 영어로는 상황에 따라 &lt;b&gt;overdoing&lt;/b&gt;, &lt;b&gt;cringe&lt;/b&gt;, &lt;b&gt;killing the vibe&lt;/b&gt;, 또는 &lt;b&gt;beating a dead horse&lt;/b&gt; 같은 표현이 유사하게 쓰입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: (해당 없음) ※ 의미상: 사고정지(思考停止), 과유불급(過猶不及)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: overdoing it, cringe, beating a dead horse, killing the vibe&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;뇌절&lt;/b&gt;&quot;은 처음엔 웃기거나 흥미로웠던 것도 반복되고 집착적으로 이어질 경우 상대에게 불편함을 주는 것을 경계하는 표현입니다. 적당한 선에서 멈추는 센스가 더 중요한 시대입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>TMI</category>
      <category>과몰입 표현</category>
      <category>뇌절 뜻</category>
      <category>뇌절 신조어</category>
      <category>뇌절 유래</category>
      <category>뇌절 의미</category>
      <category>분위기 망치기</category>
      <category>신조어 순화</category>
      <category>오버 행동</category>
      <category>진지충</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/635</guid>
      <comments>https://chatboy.tistory.com/635#entry635comment</comments>
      <pubDate>Sun, 6 Apr 2025 21:57:05 +0900</pubDate>
    </item>
    <item>
      <title>베타남, 알파남</title>
      <link>https://chatboy.tistory.com/634</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;베타남(Beta Male)&lt;/b&gt;&quot;과 &quot;&lt;b&gt;알파남(Alpha Male)&lt;/b&gt;&quot;은 사회적 관계나 성격 유형을 설명할 때 사용되는 개념으로, 특히 &lt;b&gt;남성의 리더십, 자신감, 사회적 위계&lt;/b&gt;를 표현할 때 주로 언급됩니다. 이 용어들은 원래 동물 사회의 서열 구조에서 비롯되었으며, 인간 사회에 적용되어 다양한 논란과 함께 젠더 및 사회 인식의 일부로 활용되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEUX1x/btsNaJi08F3/0B9IohFfMq6H8r30KsEnm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEUX1x/btsNaJi08F3/0B9IohFfMq6H8r30KsEnm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEUX1x/btsNaJi08F3/0B9IohFfMq6H8r30KsEnm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEUX1x%2FbtsNaJi08F3%2F0B9IohFfMq6H8r30KsEnm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fddede; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 베타남 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;베타남(Beta Male)&lt;/b&gt;&quot;은 &lt;b&gt;알파남&lt;/b&gt;과 대비되는 개념으로, 리더보다는 조력자 역할에 더 가까운 남성을 지칭합니다. 흔히 &lt;b&gt;온순하고, 배려심 있으며, 경쟁보다는 협력을 선호하는 성향&lt;/b&gt;을 가진 남성을 일컫습니다. 일부 문화에서는 이를 '비주류' 또는 '매력도가 낮은 남성'으로 인식하기도 하지만, 최근에는 배려와 유연함을 갖춘 긍정적인 이미지로 재해석되기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;조용하고 배려 깊으며 협력적인 성향의 남성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 서브 남주, 부드러운 남자, 순한 남성상&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 그린라이트남, 키다리 아저씨, 감성남&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fddede; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 알파남 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;알파남(Alpha Male)&lt;/b&gt;&quot;은 집단 내에서 &lt;b&gt;리더십, 자신감, 매력&lt;/b&gt;을 갖춘 최상위 남성을 지칭하는 말입니다. 흔히 &lt;b&gt;주도적이고 경쟁심이 강하며, 성공지향적인 성격&lt;/b&gt;으로 묘사되며, 일부 대중문화에서는 &amp;lsquo;남성다움&amp;rsquo;의 전형으로 그려지기도 합니다. 하지만 이런 이미지가 과도하게 이상화되면서 &lt;b&gt;독선적이거나 독단적인 성향&lt;/b&gt;으로 비판받는 경우도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;자신감 있고 리더십이 뛰어난 상위 남성상&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 상남자, 리더형, 추진력 있는 남자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 핵인싸, 카리스마남, 주도형&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fddede; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 베타남 vs 알파남 비교&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;베타남&lt;/b&gt;과 &lt;b&gt;알파남&lt;/b&gt;은 서로 상반된 성격과 사회적 위치를 나타내지만, 최근에는 이분법적 구분보다는 다양성과 개성을 중시하는 시각이 강조되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fff7e6; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; height: 97px;&quot; data-ke-style=&quot;style10&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #fff7e6; text-align: left;&quot;&gt;구분&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #fff7e6; text-align: left;&quot;&gt;알파남&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 16px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #fff7e6; text-align: left;&quot;&gt;베타남&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;성격&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자신감 있고 주도적&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;온화하고 배려심 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;대인 관계&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;리더, 중심 인물&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서포터, 조력자&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이미지&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;카리스마, 도전적&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;border: 1px solid #dddddd; padding: 8px; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;부드럽고 안정적&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;베타남&lt;/b&gt;&quot;과 &quot;&lt;b&gt;알파남&lt;/b&gt;&quot;은 단순한 우열이 아닌, 각각의 &lt;b&gt;성향과 매력&lt;/b&gt;을 갖고 있는 존재로 이해될 필요가 있습니다. 시대가 변하면서 전통적인 남성상에 대한 고정관념도 점차 다양화되고 있는 추세입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>남성상</category>
      <category>남자 성향</category>
      <category>배려형</category>
      <category>베타남</category>
      <category>사회적 위계</category>
      <category>성격 비교</category>
      <category>성격 유형</category>
      <category>신조어</category>
      <category>알파남</category>
      <category>주도형</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/634</guid>
      <comments>https://chatboy.tistory.com/634#entry634comment</comments>
      <pubDate>Sun, 6 Apr 2025 07:38:09 +0900</pubDate>
    </item>
    <item>
      <title>OOTD, OOTD 뜻</title>
      <link>https://chatboy.tistory.com/633</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;OOTD&lt;/b&gt;&quot;는 &quot;&lt;b&gt;Outfit Of The Day&lt;/b&gt;&quot;의 줄임말로, &lt;b&gt;오늘의 옷차림&lt;/b&gt;을 의미하는 신조어입니다. 이는 자신이 당일 입은 패션 스타일을 사진으로 찍어 SNS 등에 공유하며 해시태그 &lt;b&gt;#OOTD&lt;/b&gt;와 함께 올리는 행위를 말합니다. 연예인이나 인플루언서의 사복 패션이 화제가 되며 일반 대중에게도 퍼졌고, 지금은 하나의 패션 커뮤니케이션 문화로 자리 잡았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdew8w/btsM885Ae66/HjiOW7KtcR44t5f1Rpwco1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdew8w/btsM885Ae66/HjiOW7KtcR44t5f1Rpwco1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdew8w/btsM885Ae66/HjiOW7KtcR44t5f1Rpwco1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdew8w%2FbtsM885Ae66%2FHjiOW7KtcR44t5f1Rpwco1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e3e4fa; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. OOTD 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;OOTD&lt;/b&gt;&quot;는 당일 입은 자신의 &lt;b&gt;패션 스타일&lt;/b&gt;을 보여주기 위한 방식으로, 주로 전신 사진이나 거울 셀카 형태로 촬영하여 인스타그램 등 SNS에 올리는 것이 일반적입니다. 이러한 활동은 단순한 사진 공유를 넘어, 자신의 스타일을 표현하고 기록하는 자기 표현 수단이자, 패션 트렌드를 형성하는 하나의 요소로 작용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #deddfc;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;: 오늘의 옷차림을 의미하며, 당일의 패션 스타일을 공유하는 행위&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffd8e1;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 오늘의 룩, 데일리룩, 착장샷&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #d9ead3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 셀피, 스타일링샷, 패피(패션 피플)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e3e4fa; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. OOTD 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;OOTD&lt;/b&gt;&quot;는 SNS와 스마트폰 카메라의 발달과 함께 자연스럽게 유행하게 된 문화입니다. 특히 유명 셀럽들의 &amp;lsquo;사복 패션&amp;rsquo;이 대중의 관심을 끌며, 일반인들도 자신만의 스타일을 기록하고 공유하기 위해 &lt;b&gt;#OOTD&lt;/b&gt; 해시태그를 달기 시작했습니다. 오늘의 패션을 시각적으로 기록하고 공유함으로써, 개인의 취향과 감성을 표현하는 수단으로 자리 잡게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e3e4fa; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. OOTD 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;OOTD&lt;/b&gt;는 패션에 관심 있는 사람들 사이에서 매우 자주 사용되는 해시태그로, 특히 인스타그램에서는 일상적인 의상 기록은 물론 패션 스타일링을 공유하는 수단으로 활발하게 활용됩니다. 아래는 OOTD 관련 예시입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f4f1ff; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;오늘 OOTD는 봄 분위기 나는 화이트 셔츠 + 베이지 팬츠 룩!&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;OOTD 찍느라 거울청소부터 했네 ㅎㅎ&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;오늘도 OOTD 업로드 완료! 데일리룩 공유는 이제 일상이야.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P4YpK/btsNaki8xzW/LviZhDsOaPo2dTJgKZBgzK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P4YpK/btsNaki8xzW/LviZhDsOaPo2dTJgKZBgzK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P4YpK/btsNaki8xzW/LviZhDsOaPo2dTJgKZBgzK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP4YpK%2FbtsNaki8xzW%2FLviZhDsOaPo2dTJgKZBgzK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e3e4fa; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. OOTD 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;OOTD&lt;/b&gt;는 영어 &quot;&lt;b&gt;Outfit Of The Day&lt;/b&gt;&quot;의 이니셜 약어로, 직역하면 &amp;lsquo;오늘의 복장&amp;rsquo; 정도로 해석됩니다. 한자로 표현하자면 &amp;lsquo;금일 착장(日之服裝)&amp;rsquo; 혹은 &amp;lsquo;일상 복장(日常服裝)&amp;rsquo;과 같은 의미로 해석할 수 있습니다. 전 세계적으로 SNS 사용자라면 알아볼 수 있는 국제적인 해시태그이기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fff3cd;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 금일 착장(日之服裝), 일상 복장(日常服裝)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #e1f5fe;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Outfit Of The Day, Today&amp;rsquo;s Look&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;OOTD&lt;/b&gt;&quot;는 단순한 패션 자랑이 아닌, 나의 감정과 스타일, 그리고 일상을 공유하는 하나의 문화입니다. 이제는 누구나 자신의 스타일을 당당히 표현하는 시대, 여러분의 오늘의 룩은 어떤가요?&lt;/span&gt;&lt;/p&gt;</description>
      <category>ootd</category>
      <category>데일리룩</category>
      <category>셀피</category>
      <category>스타일링</category>
      <category>오늘의 패션</category>
      <category>인스타패션</category>
      <category>착장샷</category>
      <category>해시태그 문화</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/633</guid>
      <comments>https://chatboy.tistory.com/633#entry633comment</comments>
      <pubDate>Fri, 4 Apr 2025 20:28:50 +0900</pubDate>
    </item>
    <item>
      <title>입덕, 탈덕, 휴덕, 성덕, 덕계못</title>
      <link>https://chatboy.tistory.com/632</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;덕질&lt;/b&gt;&quot;이라는 단어를 중심으로 파생된 다양한 신조어들은 MZ세대뿐 아니라 전 세대를 아우르며 대중문화 속 중요한 언어적 흐름으로 자리 잡고 있습니다. 누군가를 좋아하고, 그 애정을 표현하는 방식은 시대에 따라 변하지만, 그 감정의 진심은 항상 같기에 이러한 신조어들은 공감과 소통의 도구가 되기도 합니다. 이번 포스팅에서는 &lt;b&gt;오덕후&lt;/b&gt;부터 &lt;b&gt;성덕&lt;/b&gt;, &lt;b&gt;덕계못&lt;/b&gt;까지, '덕질' 세계에서 자주 쓰이는 신조어들을 정리해보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX0bkm/btsM6JdyBTO/iAyJ2KZjAkanUSHOb4E9A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX0bkm/btsM6JdyBTO/iAyJ2KZjAkanUSHOb4E9A0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX0bkm/btsM6JdyBTO/iAyJ2KZjAkanUSHOb4E9A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX0bkm%2FbtsM6JdyBTO%2FiAyJ2KZjAkanUSHOb4E9A0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e5ddfb; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 오덕후(덕후) 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;오덕후&lt;/b&gt;&quot; 또는 줄여서 &quot;&lt;b&gt;덕후&lt;/b&gt;&quot;는 일본어 '오타쿠(オタク)'에서 비롯된 표현으로, &lt;b&gt;특정 분야에 깊이 빠져 있는 사람&lt;/b&gt;을 뜻합니다. 애니메이션, 아이돌, 영화, 게임, 스포츠 등 다양한 분야에 존재하며, 최근에는 부정적 이미지보다는 한 분야에 대한 열정과 전문성을 가진 사람으로 긍정적인 인식이 많아지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e5ddfb; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 덕질 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;덕질&lt;/b&gt;&quot;은 자신이 좋아하는 대상에 대해 적극적으로 &lt;b&gt;애정을 표현하고 몰두하는 행위&lt;/b&gt;를 말합니다. 콘서트에 가거나 굿즈를 모으는 행동뿐 아니라, SNS에 팬아트를 올리거나 관련 콘텐츠를 소비하는 것도 모두 덕질의 일환입니다. 단순한 취미가 아닌, 자아를 표현하는 하나의 문화로 자리잡고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e5ddfb; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 입덕&amp;middot;탈덕&amp;middot;휴덕의 의미&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;입덕&lt;/b&gt;은 특정 인물이나 분야에 &lt;b&gt;처음으로 관심을 갖고 좋아하게 되는 순간&lt;/b&gt;을 말합니다. 예를 들어 &amp;ldquo;드라마 보고 입덕했다&amp;rdquo;처럼 사용됩니다. 반면, &lt;b&gt;탈덕&lt;/b&gt;은 더 이상 팬 활동을 하지 않겠다는 선언이며, &lt;b&gt;휴덕&lt;/b&gt;은 팬 활동을 &lt;b&gt;일시적으로 중단하는 상태&lt;/b&gt;를 의미합니다. 각 단어는 팬들의 감정과 애정의 흐름을 섬세하게 표현해주는 용어로 사용되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e5ddfb; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 성덕과 덕계못&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;성덕&lt;/b&gt;은 &amp;lsquo;성공한 덕후&amp;rsquo;의 줄임말로, 좋아하는 대상과 &lt;b&gt;실제 만남이나 교류를 하게 된 팬&lt;/b&gt;을 뜻합니다. 예: &amp;ldquo;블랙핑크 콘서트 백스테이지 초대받았어! 나 성덕이야!&amp;rdquo; 반대로 &lt;b&gt;덕계못&lt;/b&gt;은 &amp;lsquo;덕후는 계(운)을 못 탄다&amp;rsquo;는 말로, &lt;b&gt;열심히 덕질해도 직접적인 기회를 잡지 못할 때&lt;/b&gt;의 아쉬움을 유머러스하게 표현한 말입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f7f5ff; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #d1c4e9;&quot;&gt;&lt;b&gt;관련 용어 정리&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;dagger; 입덕&lt;/b&gt;: 입문하다 (팬이 되다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&amp;dagger;&lt;/b&gt; 탈덕&lt;/b&gt;: 떠나다 (덕질을 그만두다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&amp;dagger;&lt;/b&gt; 휴덕&lt;/b&gt;: 잠시 쉬다 (팬 활동을 중단하다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&amp;dagger;&lt;/b&gt; 성덕&lt;/b&gt;: 성덕(성공한 덕후), 현실에서 보람을 느낀 팬&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;&amp;dagger;&lt;/b&gt; 덕계못&lt;/b&gt;: 계를 못 탄 덕후, 기회를 얻지 못한 아쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVZuSu/btsM8HeeFtM/a12aV2A98CNNlLkxYpK941/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVZuSu/btsM8HeeFtM/a12aV2A98CNNlLkxYpK941/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVZuSu/btsM8HeeFtM/a12aV2A98CNNlLkxYpK941/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVZuSu%2FbtsM8HeeFtM%2Fa12aV2A98CNNlLkxYpK941%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #e5ddfb; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 마무리 &amp;ndash; 덕질은 자아 표현의 언어&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이제 &amp;lsquo;덕후&amp;rsquo;는 그저 누군가를 좋아하는 단계를 넘어서, &lt;b&gt;자신의 취향을 표현하고, 감정을 공유하며, 삶의 활력을 얻는 활동&lt;/b&gt;으로 진화했습니다. 세대 간 소통에서도 이러한 신조어를 알고 이해하는 것은 단순한 유행어 학습이 아니라 &lt;b&gt;감정의 언어를 나누는 연결고리&lt;/b&gt;가 될 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>MZ세대</category>
      <category>덕계못</category>
      <category>덕질</category>
      <category>성덕</category>
      <category>신조어</category>
      <category>오덕후</category>
      <category>입덕</category>
      <category>탈덕</category>
      <category>팬문화</category>
      <category>휴덕</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/632</guid>
      <comments>https://chatboy.tistory.com/632#entry632comment</comments>
      <pubDate>Fri, 4 Apr 2025 08:18:26 +0900</pubDate>
    </item>
    <item>
      <title>칩플레이션, 칩플레이션 뜻</title>
      <link>https://chatboy.tistory.com/631</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;칩플레이션&lt;/b&gt;&quot;은 저가 상품의 가격이 상대적으로 고가 상품보다 더 큰 폭으로 상승하는 경제 현상을 의미합니다. 일반적으로 인플레이션이 전체적인 물가 상승을 나타낸다면, 칩플레이션은 특히 &lt;b&gt;저가 상품&lt;/b&gt;에 집중되어 있는 물가 상승 현상으로, 저소득층에게 더 큰 타격을 줄 수 있다는 점에서 사회적 관심이 높아지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkHhtj/btsM6tIp4j9/AP2u6ZziUFXAbxFJV7TME0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkHhtj/btsM6tIp4j9/AP2u6ZziUFXAbxFJV7TME0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkHhtj/btsM6tIp4j9/AP2u6ZziUFXAbxFJV7TME0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkHhtj%2FbtsM6tIp4j9%2FAP2u6ZziUFXAbxFJV7TME0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff2cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 칩플레이션 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;칩플레이션&lt;/b&gt;(Cheapflation)&quot;은 &quot;&lt;b&gt;Cheap&lt;/b&gt;(저렴한) + &lt;b&gt;Inflation&lt;/b&gt;(인플레이션)&quot;의 합성어로, 상대적으로 저렴한 상품군의 가격이 고급 제품보다 더 빠르게 상승하는 현상을 가리킵니다. 이는 서민 생활에 밀접한 품목의 가격 상승이 더 두드러지며, 소비자의 체감 물가를 더욱 심각하게 만드는 요인으로 지적되고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;저가 상품군의 물가가 고가 상품군보다 더 많이 오르는 현상&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 체감 인플레이션, 필수재 가격 상승, 생활물가 급등&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 슈링크플레이션, 그리드플레이션, 스텔스 인플레이션&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff2cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 칩플레이션 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;칩플레이션&lt;/b&gt;&quot;은 코로나19 팬데믹 이후 세계적인 공급망 불안과 원자재 가격 상승, 그리고 인건비 증가 등 다양한 요인이 복합적으로 작용하면서 나타난 현상입니다. 특히 대량 생산되는 &lt;b&gt;저가 식료품&lt;/b&gt;과 &lt;b&gt;생필품&lt;/b&gt;의 가격 상승률이 높아졌고, 고가의 프리미엄 제품은 상대적으로 가격 인상이 덜하면서 두드러지게 부각되었습니다. 이런 추세는 특히 저소득층과 청년층에 경제적 부담을 가중시키고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff2cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 칩플레이션 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;칩플레이션&lt;/b&gt;은 우리의 일상 속에서도 쉽게 체감할 수 있는 현상입니다. 과거 1,000원이면 사 먹던 과자가 1,500원이 되는 동안, 고급 디저트의 가격은 거의 변화가 없거나 미미한 상승에 그치는 경우도 많습니다. 이러한 차이는 소비자에게 불공정한 부담으로 인식되며 사회적 논의로도 이어지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;과자 한 봉지 1,800원? &lt;b&gt;칩플레이션&lt;/b&gt; 심하네...&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;마트 PB 생수는 30% 올랐는데, 수입 프리미엄 워터는 그대로네?&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;컵라면은 올랐는데, 비싼 라멘집 가격은 그대로야&amp;hellip; 이게 바로 &lt;b&gt;칩플레이션&lt;/b&gt;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff2cc; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 칩플레이션 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;칩플레이션&lt;/b&gt;&quot;은 한자 표현으로 명확한 대응어는 없으나, 경제적 양극화를 뜻하는 단어들과 조합해 표현할 수 있습니다. 영어로는 &quot;&lt;b&gt;Cheapflation&lt;/b&gt;&quot;이라는 신조어 그대로 사용되며, 경제 전문 매체나 보고서에서 점차 사용 빈도가 늘고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 저가물가상승(低價物價上昇), 생필물가불균형(生活物價不均衡)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Cheapflation, Asymmetric inflation, Essential goods inflation&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;칩플레이션&lt;/b&gt;&quot;은 사회적 불평등과 밀접하게 연결된 경제 현상으로, 소비자들의 체감 경기와 실생활에 큰 영향을 미치고 있는 만큼 향후 정책적 대응이 필요한 주제로 주목받고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>cheapflation</category>
      <category>물가상승</category>
      <category>생활물가</category>
      <category>서민물가</category>
      <category>소비경제</category>
      <category>슈링크플레이션</category>
      <category>인플레이션</category>
      <category>저가품목</category>
      <category>칩플레이션</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/631</guid>
      <comments>https://chatboy.tistory.com/631#entry631comment</comments>
      <pubDate>Thu, 3 Apr 2025 18:58:03 +0900</pubDate>
    </item>
    <item>
      <title>을호비상, 을호비상 뜻</title>
      <link>https://chatboy.tistory.com/630</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;을호비상&lt;/b&gt;&quot;은 경찰의 비상근무 체계 중 두 번째로 높은 단계로, 심각한 사회적 혼란이나 대규모 집회, 충돌 가능성이 있을 경우 발령됩니다. 2025년 4월 3일, &lt;b&gt;윤석열 대통령 탄핵심판 선고&lt;/b&gt;를 하루 앞두고 서울 도심에서 찬반 진영의 대규모 집회가 예고되면서, 경찰은 오전 9시를 기해 서울에 &lt;b&gt;을호비상&lt;/b&gt;을 발령했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zDoEp/btsM4Y9JPXr/XJdlWGk9s7KNmqRDicpEbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zDoEp/btsM4Y9JPXr/XJdlWGk9s7KNmqRDicpEbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zDoEp/btsM4Y9JPXr/XJdlWGk9s7KNmqRDicpEbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzDoEp%2FbtsM4Y9JPXr%2FXJdlWGk9s7KNmqRDicpEbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe082; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 을호비상이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;을호비상&lt;/b&gt;은 경찰의 비상 대응 단계 중 하나로, &lt;b&gt;전체 경찰 병력의 50%&lt;/b&gt;를 동원하는 체제입니다. &amp;lsquo;갑호비상&amp;rsquo; 다음으로 높은 단계이며, 다중 집회, 국가 안보 위협, 정치적 충돌 우려가 높은 시기에 발령됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9fbe7; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;지시 단계&lt;/b&gt;&lt;/span&gt;: 비상근무 체계 중 2단계 (갑호 &amp;gt; &lt;b&gt;을호&lt;/b&gt; &amp;gt; 병호)&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;동원 범위&lt;/b&gt;&lt;/span&gt;: 경찰 병력의 50% 동원&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;발령 조건&lt;/b&gt;&lt;/span&gt;: 다중 집회 충돌 우려, 사회 불안 조짐, 주요 사법 판결 전후&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe082; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 2025년 4월 3일 서울 &amp;lsquo;을호비상&amp;rsquo; 발령 배경&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2025년 4월 4일은 &lt;b&gt;윤석열 대통령 탄핵심판 선고일&lt;/b&gt;입니다. 이를 하루 앞둔 4월 3일, 찬반 진영은 헌법재판소를 비롯한 서울 주요 지역에서 &lt;b&gt;대규모 집회와 행진, 철야농성&lt;/b&gt;을 예고했습니다. 경찰은 충돌 가능성과 사회 불안에 대비해 오전 9시 서울에 &lt;b&gt;을호비상&lt;/b&gt;을 발령했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe082; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 경찰 대응 계획&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;을호비상&lt;/b&gt; 발령에 따라, 서울경찰청은 기동대, 형사기동대, 대화경찰, 경찰특공대 등을 포함한 &lt;b&gt;전체 인력의 절반을 도심에 배치&lt;/b&gt;했습니다. 특히 종로구 헌법재판소 일대, 강남, 광화문, 용산 대통령실, 한남동 관저 등 주요 지점에 병력을 집중 배치해 충돌과 테러에 대비하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fff3e0; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;총 동원 인력: 전국 210개 기동대 약 1만4천명&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;투입 지역: 헌재, 경복궁, 광화문, 강남역, 대검찰청 등&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;예비 계획: 선고일(4월 4일)에는 &lt;b&gt;갑호비상&lt;/b&gt; 발령 예정&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe082; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 갑호비상과의 차이점&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lsquo;&lt;b&gt;갑호비상&lt;/b&gt;&amp;rsquo;은 경찰의 비상단계 중 &lt;b&gt;가장 높은 수위&lt;/b&gt;로, 전 병력을 동원합니다. 현재 발령된 &amp;lsquo;&lt;b&gt;을호비상&lt;/b&gt;&amp;rsquo;은 그보다 한 단계 낮지만, &lt;b&gt;선고 당일&lt;/b&gt;에는 갑호비상으로 격상되어 &lt;b&gt;전국적 통제 및 경비 강화&lt;/b&gt;가 이뤄질 예정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;향후 &lt;b&gt;헌재의 탄핵 판결&lt;/b&gt;에 따라 상황이 어떻게 전개될지는 불확실하지만, &lt;b&gt;경찰의 비상대응 체계는 최고 수위&lt;/b&gt;로 운영되고 있으며, 시민들의 각별한 주의와 협조가 필요합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>갑호비상</category>
      <category>경찰 대응</category>
      <category>기동대</category>
      <category>비상근무</category>
      <category>사회불안</category>
      <category>서울 집회</category>
      <category>윤석열</category>
      <category>을호비상</category>
      <category>탄핵심판</category>
      <category>헌법재판소</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/630</guid>
      <comments>https://chatboy.tistory.com/630#entry630comment</comments>
      <pubDate>Thu, 3 Apr 2025 12:50:23 +0900</pubDate>
    </item>
    <item>
      <title>미닝아웃, 미닝아웃 뜻</title>
      <link>https://chatboy.tistory.com/629</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;미닝아웃&lt;/b&gt;&quot;은 자신의 사회적&amp;middot;정치적 신념을 소비로 표현하는 트렌드입니다. 단순한 상품 구매를 넘어, 개인의 가치관을 드러내는 행위로 인식되며, 소비 자체가 하나의 메시지로 기능합니다. 이러한 흐름은 환경, 동물복지, 젠더, 정치 등 다양한 분야로 확산되고 있으며, 브랜드 또한 이들의 신념에 맞춰 변화하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHhgti/btsM5rw2Nba/v6yaBCzMUhzf4EViWxMEUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHhgti/btsM5rw2Nba/v6yaBCzMUhzf4EViWxMEUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHhgti/btsM5rw2Nba/v6yaBCzMUhzf4EViWxMEUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHhgti%2FbtsM5rw2Nba%2Fv6yaBCzMUhzf4EViWxMEUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe0b2; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 미닝아웃 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미닝아웃&lt;/b&gt;&quot;은 자신의 &lt;b&gt;신념이나 가치관&lt;/b&gt;을 사회적으로 드러내기 위한 소비 형태를 말합니다. 단순히 제품을 구매하는 것이 아닌, &lt;b&gt;의미 있는 소비&lt;/b&gt;를 통해 자신의 입장을 표현하고자 하는 행위로, 최근 젊은 세대에서 특히 두드러지게 나타나고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;정치적&amp;middot;사회적 신념을 소비를 통해 표현하는 행위&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 가치소비, 착한소비, 사회적 소비&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 플로깅, 채식주의, 공정무역&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe0b2; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 미닝아웃 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미닝아웃&lt;/b&gt;&quot;은 &amp;lsquo;&lt;b&gt;커밍아웃(Coming out)&lt;/b&gt;&amp;rsquo;과 &amp;lsquo;&lt;b&gt;의미(Meaning)&lt;/b&gt;&amp;rsquo;의 합성으로, 자신의 신념이나 철학을 외부에 공개하는 것에서 유래했습니다. 특히 SNS와 온라인 커뮤니티가 발달하면서 자신이 지지하는 브랜드나 운동을 적극적으로 소비하고 공유하는 방식으로 발전하게 되었으며, 기업들도 이 흐름을 마케팅 전략에 반영하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe0b2; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 미닝아웃 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;미닝아웃&lt;/b&gt;은 환경, 동물 보호, 인권 등 다양한 분야에서 실제 소비와 행동으로 이어집니다. 소비자는 단지 물건을 사는 것이 아니라, 그 안에 담긴 가치와 철학을 함께 선택하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;동물 실험을 하지 않는 브랜드의 화장품만 구매하는 소비자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;환경보호를 위해 텀블러와 에코백을 사용하는 습관&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;성소수자 인권을 지지하는 브랜드 제품 구매와 SNS 공유&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwTuox/btsM4SIp8WB/broZgHKsijwsMkpRanhZfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwTuox/btsM4SIp8WB/broZgHKsijwsMkpRanhZfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwTuox/btsM4SIp8WB/broZgHKsijwsMkpRanhZfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwTuox%2FbtsM4SIp8WB%2FbroZgHKsijwsMkpRanhZfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;300&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ffe0b2; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 미닝아웃 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;미닝아웃&lt;/b&gt;은 한자로 명확하게 정의된 표현은 없지만, 의미 있는 소비(有意味 消費) 또는 신념 소비(信念 消費)로 해석할 수 있습니다. 영어 표현으로는 &quot;&lt;b&gt;Meaning Out&lt;/b&gt;&quot; 외에도 &quot;&lt;b&gt;Value-based consumption&lt;/b&gt;&quot;이나 &quot;&lt;b&gt;Ethical consumerism&lt;/b&gt;&quot;이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 有意味 消費(의미 있는 소비), 信念 消費(신념에 따른 소비)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Meaning Out, Value-based consumption, Ethical consumerism&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미닝아웃&lt;/b&gt;&quot;은 이제 단순한 유행을 넘어, 소비를 통해 사회적 메시지를 전달하고 변화를 이끌어내는 실질적인 영향력을 가진 현상으로 자리 잡았습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>가치소비</category>
      <category>미닝아웃</category>
      <category>브랜드윤리</category>
      <category>사회적 가치</category>
      <category>소비자운동</category>
      <category>소비트렌드</category>
      <category>신념 소비</category>
      <category>에코소비</category>
      <category>의미 있는 소비</category>
      <category>착한소비</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/629</guid>
      <comments>https://chatboy.tistory.com/629#entry629comment</comments>
      <pubDate>Thu, 3 Apr 2025 10:50:18 +0900</pubDate>
    </item>
    <item>
      <title>배트맨,  BATMMAAN, 배트맨 뜻</title>
      <link>https://chatboy.tistory.com/628</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BATMMAAN&lt;/b&gt;&lt;span style=&quot;color: #000000; text-align: justify;&quot;&gt;이라는 신조어는 미국 기술주 중심의 투자 흐름을 반영하여, 기존의 '&lt;b&gt;매그니피센트 7&lt;/b&gt;(Magnificent 7)'에 브로드컴(Broadcom)을 추가하면서 탄생하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b06fII/btsM5thdvqs/5v23LFkk2VL9d9RKorPpz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b06fII/btsM5thdvqs/5v23LFkk2VL9d9RKorPpz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b06fII/btsM5thdvqs/5v23LFkk2VL9d9RKorPpz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb06fII%2FbtsM5thdvqs%2F5v23LFkk2VL9d9RKorPpz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;400&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 배트맨의 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;BATMMAAN&lt;/b&gt;은 브로드컴(Broadcom), 애플(Apple), 테슬라(Tesla), 마이크로소프트(Microsoft), 메타(Meta), 알파벳(Alphabet), 아마존(Amazon), 엔비디아(NVIDIA)로 구성된 기술주 그룹을 의미합니다. 이는 기존의 '매그니피센트 7'에 브로드컴을 추가한 표현입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;미국 주식시장 내 주요 기술주 8개 기업을 지칭하는 표현&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 매그니피센트 7, 빅테크 그룹&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 팡(FANG), 빅테크(Big Tech)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;BATMMAAN&lt;/b&gt;을 구성하는 8개 기업의 주요 특징을 간결하게 요약하면 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Broadcom&lt;/b&gt;: 반도체 설계 및 통신 칩 분야 강자. 애플과 통신칩 계약, 인프라&amp;middot;서버용 고속칩 공급 확대 중.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Apple&lt;/b&gt;: 아이폰, 맥 등 혁신적 소비자 제품으로 세계 시장을 주도. 자체 칩(M 시리즈)과 서비스 사업 강화 중.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Tesla&lt;/b&gt;: 전기차 시장의 선두주자. 자율주행, 에너지 저장, AI 슈퍼컴퓨터 등 신기술 개발에 적극 투자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Microsoft&lt;/b&gt;: 클라우드 서비스(Azure), 오피스, AI 협업툴에 집중. OpenAI와 협력으로 AI 생태계 강화.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Meta&lt;/b&gt;: 페이스북, 인스타그램 운영. 메타버스(Reality Labs) 및 AI 기술에 대규모 투자 중.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Alphabet&lt;/b&gt;: 구글 모회사. 검색, 유튜브, 안드로이드, AI(Gemini) 등 디지털 전반에 걸친 지배적 영향력.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Amazon&lt;/b&gt;: 전자상거래와 클라우드(AWS) 시장 주도. 물류 자동화와 AI 기반 추천 기술에 강점.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NVIDIA&lt;/b&gt;: AI 연산을 위한 GPU 분야 독보적 1위. 데이터센터, 자율주행, 생성형 AI용 칩 수요 급증.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PpgMn/btsM7XU27LY/tBxLCLsOFKaSxKwTrampOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PpgMn/btsM7XU27LY/tBxLCLsOFKaSxKwTrampOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PpgMn/btsM7XU27LY/tBxLCLsOFKaSxKwTrampOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPpgMn%2FbtsM7XU27LY%2FtBxLCLsOFKaSxKwTrampOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;200&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 8개 기업은 기술, 인프라, AI, 소비자 플랫폼을 아우르며 글로벌 경제와 시장을 주도하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 배트맨의 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존에 기술주를 대표하던 '매그니피센트 7(Magnificent 7)'에 브로드컴을 추가한 것이 &lt;b&gt;BATMMAAN&lt;/b&gt;이라는 표현의 시작입니다. 최근 투자은행 및 증권사들이 시장을 분석할 때 이 용어를 자주 활용하면서 주목받고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 배트맨의 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;BATMMAAN&lt;/b&gt;은 미국 증시에서 투자자들의 관심을 받는 기술주 그룹을 지칭하며, 포트폴리오 구성이나 기술주 흐름을 파악할 때 활용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;BATMMAAN 종목 위주로 기술주 ETF 비중 조절해야겠네.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;이번 실적 발표는 BATMMAAN 기업에 달렸다!&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;기존 빅테크보다 BATMMAAN 중심 분석이 유의미해졌어.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. BATMMAAN의 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본래 미국 증시에서 주목받는 7대 기술주를 지칭하는 &quot;&lt;b&gt;매그니피센트 7&lt;/b&gt;&quot;이라는 표현이 널리 사용되었으나, 최근 들어 반도체&amp;middot;AI 분야에서 두각을 나타낸 &lt;b&gt;브로드컴(Broadcom)&lt;/b&gt;이 포함되며 새로운 조합인 &lt;b&gt;BATMMAAN&lt;/b&gt;이 등장하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 신조어는 해당 기업들의 이니셜을 조합한 것으로, 증권사와 투자 리서치 기관들이 기술주 트렌드를 분석할 때 사용하면서 본격적으로 퍼지기 시작했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특히 AI, 클라우드, 반도체, 플랫폼 산업의 성장을 주도하는 주요 기업들을 하나로 묶어 이해하려는 흐름 속에서 &lt;b&gt;BATMMAAN&lt;/b&gt;은 하나의 트렌드 지표로 자리잡게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;형성 배경&lt;/b&gt;&lt;/span&gt;: 매그니피센트 7에 브로드컴 추가 &amp;rarr; BATMMAAN&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;등장 시기&lt;/b&gt;&lt;/span&gt;: 2024년 말~2025년 초, 투자 리서치 보고서 및 증권사 중심 확산&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;등장 이유&lt;/b&gt;&lt;/span&gt;: AI&amp;middot;반도체 시장의 급부상, 기술주 중심의 새로운 시장 대표성 필요&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BATMMAAN은 단순한 주식 용어를 넘어, 2020년대 중반 이후 글로벌 경제를 이끄는 기업군을 대표하는 &lt;b&gt;시장 신호어&lt;/b&gt;로 주목받고 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Alphabet</category>
      <category>Amazon</category>
      <category>Apple</category>
      <category>Broadcom</category>
      <category>meta</category>
      <category>Microsoft</category>
      <category>nVidia</category>
      <category>Tesla</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/628</guid>
      <comments>https://chatboy.tistory.com/628#entry628comment</comments>
      <pubDate>Thu, 3 Apr 2025 09:50:57 +0900</pubDate>
    </item>
    <item>
      <title>그린메일, 그린메일 뜻</title>
      <link>https://chatboy.tistory.com/626</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 특정 기업의 &lt;b&gt;경영권이 불안정한 틈&lt;/b&gt;을 노리고 &lt;b&gt;일부 투자자나 세력이 해당 기업의 지분을 대량 매입&lt;/b&gt;한 후, 이를 빌미로 &lt;b&gt;경영 간섭 또는 주가 조작에 나서거나 지분을 고가에 되팔도록 압박하는 행위&lt;/b&gt;를 의미합니다. 'Greenmail'이라는 단어는 &lt;b&gt;Greenback(미국 달러 지폐)&lt;/b&gt;와 &lt;b&gt;Blackmail(협박)&lt;/b&gt;을 합성한 조어로, 1980년대 미국에서 유래한 금융 용어입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lbGQT/btsM3Ews93v/UiFYA5MRE7eAcuScXU3WwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lbGQT/btsM3Ews93v/UiFYA5MRE7eAcuScXU3WwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lbGQT/btsM3Ews93v/UiFYA5MRE7eAcuScXU3WwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlbGQT%2FbtsM3Ews93v%2FUiFYA5MRE7eAcuScXU3WwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ede7f6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 그린메일 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 &lt;b&gt;투기적 자본&lt;/b&gt;이 의도적으로 특정 기업의 지분을 매입한 후, &lt;b&gt;경영권 위협 또는 적대적 M&amp;amp;A 시도&lt;/b&gt;를 무기로 &lt;b&gt;고가에 지분을 되팔아 차익을 실현&lt;/b&gt;하는 전략입니다. 공격자는 실질적인 경영 의지가 없으며, 기업은 &lt;b&gt;경영 안정화를 위해 어쩔 수 없이&lt;/b&gt; 프리미엄을 얹어 주식을 되사는 경우가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;지분 매입 후 경영 압박을 통해 고가에 주식을 되팔도록 하는 전략적 협박&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 적대적 M&amp;amp;A, 경영권 위협, 투기자본 공격&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 백기사, 황금낙하산, 포이즌필&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ede7f6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 그린메일 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;이라는 용어는 &lt;b&gt;1980년대 미국에서 기업 사냥꾼(Corporate Raider)들이&lt;/b&gt; 지분 인수를 통해 기업을 협박하고 &lt;b&gt;차익을 챙기면서 등장&lt;/b&gt;했습니다. 그린(Green)은 미국 달러를, 메일(Mail)은 협박을 상징하며, 이는 &lt;b&gt;공정한 거래가 아닌 압박성 전략&lt;/b&gt;이라는 점에서 비윤리적이라는 비판을 받습니다. 현재는 &lt;b&gt;상법, 자본시장법 등에서 규제&lt;/b&gt; 대상이 되기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ede7f6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 그린메일 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그린메일&lt;/b&gt;은 실제 국내외 기업 사례에서 종종 발견되며, 경영권 방어를 위한 다양한 대응 전략(백기사 유치, 우호지분 확보 등)과 함께 거론됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;미국의 테이크오버 전문 투자자가 A사 지분을 10% 확보 후 경영권 요구 &amp;rarr; A사가 프리미엄 주고 주식 되매입&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;국내 모 기업, 투기세력의 고의적 지분 매입으로 경영권 방어 위해 자사주 매입 후 주가 하락&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;공격자는 경영에 참여하지 않고 오직 매각 차익만 노리는 구조&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB6nCH/btsM4JReUOj/IKRKJy0hK7i6etL6o3jtE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB6nCH/btsM4JReUOj/IKRKJy0hK7i6etL6o3jtE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB6nCH/btsM4JReUOj/IKRKJy0hK7i6etL6o3jtE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB6nCH%2FbtsM4JReUOj%2FIKRKJy0hK7i6etL6o3jtE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;348&quot; height=&quot;340&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #ede7f6; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 그린메일 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;그린메일&lt;/b&gt;은 영어로 &lt;b&gt;Greenmail&lt;/b&gt;이라 쓰며, 공식 한자 표기는 없으나 의미상으로는 &lt;b&gt;經營脅迫的收買要求&lt;/b&gt; 또는 &lt;b&gt;資本威脅賣却&lt;/b&gt; 등으로 해석할 수 있습니다. 비슷한 개념으로 &amp;lsquo;백기사(White Knight)&amp;rsquo;, &amp;lsquo;포이즌 필(Poison Pill)&amp;rsquo; 같은 방어 전략이 함께 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 經營脅迫, 資本收買威脅, 資本策略賣却&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: &quot;Greenmail&quot;, &quot;Corporate blackmail&quot;, &quot;Strategic buyout threat&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;그린메일&lt;/b&gt;&quot;은 자본을 무기로 경영권을 흔들고 기업가치를 훼손할 수 있다는 점에서, 기업 지배구조의 건전성을 해치는 행위로 간주되며 세계적으로도 규제 논의가 활발한 분야입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>경영권위협</category>
      <category>경영방어</category>
      <category>그린메일</category>
      <category>기업사냥꾼</category>
      <category>백기사</category>
      <category>자본시장규제</category>
      <category>자사주매입</category>
      <category>적대적M&amp;amp;A</category>
      <category>투자자압박</category>
      <category>프리미엄매각</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/626</guid>
      <comments>https://chatboy.tistory.com/626#entry626comment</comments>
      <pubDate>Wed, 2 Apr 2025 08:30:10 +0900</pubDate>
    </item>
    <item>
      <title>미룬이, 미룬이 뜻</title>
      <link>https://chatboy.tistory.com/625</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &quot;&lt;b&gt;미룬이&lt;/b&gt;&quot;는 어떤 일을 &lt;b&gt;계속해서 미루는 사람&lt;/b&gt;을 가리키는 신조어입니다. '미루다'라는 동사에 사람을 뜻하는 '~이'를 붙여 만들어졌으며, 해야 할 일을 계획해놓고도 계속 미루는 성향이나 행동을 유머스럽게 지칭할 때 사용됩니다. 주로 MZ세대 사이에서 &lt;b&gt;자기 표현&lt;/b&gt;이나 &lt;b&gt;셀프 디스&lt;/b&gt; 용도로 쓰이며, &quot;오늘도 미룬이 출근합니다&quot;, &quot;나 완전 미룬이야&quot; 같은 말에서 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l78hX/btsM5BSrZ7x/NwzblqwiN1z1950d5MyCF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l78hX/btsM5BSrZ7x/NwzblqwiN1z1950d5MyCF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l78hX/btsM5BSrZ7x/NwzblqwiN1z1950d5MyCF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl78hX%2FbtsM5BSrZ7x%2FNwzblqwiN1z1950d5MyCF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff9c4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 미룬이 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미룬이&lt;/b&gt;&quot;는 &amp;lsquo;일을 미루는 사람&amp;rsquo;을 의미하는 신조어로, &lt;b&gt;스스로의 게으름을 자조하거나 농담으로 표현&lt;/b&gt;할 때 많이 쓰입니다. 특히 온라인 커뮤니티나 SNS에서 자주 보이며, &lt;b&gt;자기 관리 부족&lt;/b&gt;을 유쾌하게 공유하는 트렌드의 일환입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;계획한 일을 계속 미루는 사람을 가리키는 신조어&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 게으른이, 미루러, 미루깡&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 갓생, 벼락치기, 아 오늘은 진짜!&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff9c4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 미룬이 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미룬이&lt;/b&gt;&quot;라는 표현은 2023년 하반기부터 온라인 커뮤니티와 SNS에서 자주 쓰이기 시작한 신조어입니다. &amp;lsquo;미루다&amp;rsquo;라는 평범한 동사에 사람을 나타내는 '~이'를 붙이는 &lt;b&gt;MZ식 언어유희&lt;/b&gt;에서 비롯되었으며, '행복이', '게으른이', '화난이'처럼 감정이나 상태를 사람화하여 표현하는 트렌드의 일환으로 등장했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff9c4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 미룬이 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;미룬이&lt;/b&gt;는 현실 속 게으름을 인정하면서도 유머러스하게 받아들이는 MZ세대 특유의 자기 표현 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;일주일째 방 청소 미룬이 출근 완료&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;할 일은 많은데 넷플릭스부터 켠 나, 진정한 미룬이&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;계획은 다 짜놓고 미룬이처럼 하루를 끝내는 중&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DKeUC/btsM5EaBO7c/GEnLdXrE3q4mInG4gpdiI0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DKeUC/btsM5EaBO7c/GEnLdXrE3q4mInG4gpdiI0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DKeUC/btsM5EaBO7c/GEnLdXrE3q4mInG4gpdiI0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDKeUC%2FbtsM5EaBO7c%2FGEnLdXrE3q4mInG4gpdiI0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;300&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fff9c4; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 미룬이 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;미룬이&lt;/b&gt;는 순우리말 조어이기 때문에 공식적인 한자 표기는 없지만, 의미상으로는 '지연인(遲延人)', '게으른 자(懶人)' 등으로 표현할 수 있습니다. 영어로는 &lt;b&gt;&quot;The Procrastinator&quot;&lt;/b&gt;, 또는 &lt;b&gt;&quot;Delay master&quot;&lt;/b&gt; 등의 유머 표현이 유사한 의미로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 遲延人(지연인), 懶人(게으른 자)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: &quot;Procrastinator&quot;, &quot;Chronic delayer&quot;, &quot;Master of postponing&quot;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;미룬이&lt;/b&gt;&quot;는 오늘날 자기 반성과 게으름조차 유쾌하게 소비하는 MZ세대의 &lt;b&gt;밈 문화&lt;/b&gt;를 잘 보여주는 표현입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>mz세대 밈</category>
      <category>게으름</category>
      <category>계획실패</category>
      <category>느긋한삶</category>
      <category>미루기</category>
      <category>미룬이</category>
      <category>셀프디스</category>
      <category>신조어</category>
      <category>프로크래스티네이터</category>
      <category>할일미루기</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/625</guid>
      <comments>https://chatboy.tistory.com/625#entry625comment</comments>
      <pubDate>Wed, 2 Apr 2025 07:30:30 +0900</pubDate>
    </item>
    <item>
      <title>억텐, 억텐 뜻</title>
      <link>https://chatboy.tistory.com/624</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 &quot;&lt;b&gt;억지 텐션&lt;/b&gt;&quot;의 줄임말로, 말 그대로 &lt;b&gt;자신의 감정과는 다르게 억지로 텐션을 끌어올려&lt;/b&gt; 상대에게 맞춰주는 행동을 의미하는 신조어입니다. 주로 사회생활이나 모임 등에서 분위기를 망치지 않기 위해 &lt;b&gt;억지로 리액션하거나 밝은 척&lt;/b&gt;할 때 사용되며, 다소 피로하거나 가식적으로 느껴질 수 있는 상황을 표현합니다. 특히 MZ세대 사이에서는 이러한 감정을 솔직하게 표현하기 위한 말로 자주 쓰입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N4qUz/btsM4aHtz6i/SwbvSh5SLvSvcclbb3c4zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N4qUz/btsM4aHtz6i/SwbvSh5SLvSvcclbb3c4zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N4qUz/btsM4aHtz6i/SwbvSh5SLvSvcclbb3c4zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN4qUz%2FbtsM4aHtz6i%2FSwbvSh5SLvSvcclbb3c4zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 억텐 뜻&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 &quot;&lt;b&gt;억지 텐션&lt;/b&gt;&quot;의 줄임말로, &lt;b&gt;진짜 즐겁지 않아도 억지로 신난 척하거나 리액션하는 상태&lt;/b&gt;를 말합니다. 상대방에게 민망하지 않게 해주거나 분위기를 맞춰주기 위해 자신의 감정을 숨기고 고의적으로 텐션을 올리는 경우에 해당합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;억지로 텐션을 끌어올려 상대의 분위기에 맞춰주는 행동&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;유사 표현&lt;/b&gt;&lt;/span&gt;: 가식 리액션, 분위기 맞춤, 눈치 리액션&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;관련 신조어&lt;/b&gt;&lt;/span&gt;: 현타, 갓생, 자만추&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 억텐 유래&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 SNS, 유튜브, 예능 프로그램 등에서 &lt;b&gt;리액션이 과하거나 과도하게 활기찬 모습&lt;/b&gt;을 보이는 인물들에게서 시작되었습니다. 이를 본 시청자들이 &quot;&lt;b&gt;진짜가 아니라 억지로 그러는 것 같다&lt;/b&gt;&quot;는 뉘앙스로 &quot;억지 텐션&quot;이라는 말을 줄여 사용하기 시작했고, 이후 &lt;b&gt;일상 속의 피곤한 사회적 리액션&lt;/b&gt;을 표현하는 단어로 확산되었습니다. 현재는 온라인 뿐 아니라 오프라인에서도 쉽게 들을 수 있는 표현입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;  
     (adsbygoogle = window.adsbygoogle || []).push({});  
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 억텐 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 진심과는 다른 리액션을 하게 되는 피로한 상황을 표현하는 데 자주 사용됩니다. 특히 단체 모임이나 처음 만나는 자리에서 분위기를 깨지 않기 위해 일부러 리액션하는 경우에 해당합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fff3e0; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;솔직히 재미없는데 리액션하느라 &lt;b&gt;억텐&lt;/b&gt; 터졌음...&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;그 말에 어떻게 웃어야 할지 몰라서 &lt;b&gt;억텐&lt;/b&gt; 장전하고 웃었다ㅋㅋ&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;dagger;&lt;/b&gt;&amp;nbsp;&quot;회식 자리에서 &lt;b&gt;억텐&lt;/b&gt; 작렬&amp;hellip; 집 가자 제발.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cN1aZz/btsM11Mcx47/Uxy2T0hvnV2K9vdv1cYVe1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cN1aZz/btsM11Mcx47/Uxy2T0hvnV2K9vdv1cYVe1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cN1aZz/btsM11Mcx47/Uxy2T0hvnV2K9vdv1cYVe1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcN1aZz%2FbtsM11Mcx47%2FUxy2T0hvnV2K9vdv1cYVe1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;300&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #fce4ec; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 억텐 한자 및 영어 표현&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 신조어라 정식 한자어는 없지만 의미상 &lt;b&gt;억지고양(抑止高揚)&lt;/b&gt; 또는 &lt;b&gt;가식고조(假飾高潮)&lt;/b&gt;처럼 해석할 수 있습니다. 영어로는 &quot;&lt;b&gt;Forced enthusiasm&lt;/b&gt;&quot;, &quot;&lt;b&gt;Fake hype&lt;/b&gt;&quot;, &quot;&lt;b&gt;Pretend excitement&lt;/b&gt;&quot; 등으로 표현할 수 있으며, 상황에 따라 유머러스하게 &quot;&lt;b&gt;Putting on a show&lt;/b&gt;&quot;라고도 말할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0; text-align: left;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;한자 표현&lt;/b&gt;&lt;/span&gt;: 억지고양(抑止高揚), 가식고조(假飾高潮)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;영어 표현&lt;/b&gt;&lt;/span&gt;: Forced enthusiasm, Fake hype, Pretend excitement&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;b&gt;억텐&lt;/b&gt;&quot;은 현대 사회에서 감정을 숨기고 분위기에 맞추기 위해 억지로 노력하는 현실을 드러낸 표현으로, 공감과 동시에 웃음을 자아내는 신조어입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>MZ세대</category>
      <category>가식</category>
      <category>리액션 신조어</category>
      <category>사회생활 표현</category>
      <category>억지 웃음</category>
      <category>억지 텐션</category>
      <category>억텐</category>
      <category>피로 신조어</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/624</guid>
      <comments>https://chatboy.tistory.com/624#entry624comment</comments>
      <pubDate>Tue, 1 Apr 2025 11:20:54 +0900</pubDate>
    </item>
    <item>
      <title>설탕 대체제</title>
      <link>https://chatboy.tistory.com/623</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;설탕 대체제&lt;/b&gt;는 혈당 조절, 체중 감량 등의 이유로 많이 사용되고 있지만, 최근 연구에서는 &lt;b&gt;오히려 배고픔을 증가시키고 체중 조절에 방해가 될 수 있다&lt;/b&gt;는 가능성이 제기되고 있습니다. 단맛은 있지만 칼로리가 거의 없는 인공 감미료가 뇌와 호르몬에 어떤 영향을 주는지에 대한 과학적 고찰이 필요한 시점입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deDpzw/btsM4ckY1Dw/UA4cjKFqK3epmy08iwuBw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deDpzw/btsM4ckY1Dw/UA4cjKFqK3epmy08iwuBw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deDpzw/btsM4ckY1Dw/UA4cjKFqK3epmy08iwuBw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeDpzw%2FbtsM4ckY1Dw%2FUA4cjKFqK3epmy08iwuBw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 설탕 대체제란?&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;설탕 대체제&lt;/b&gt;는 단맛은 유지하면서도 칼로리를 낮춘 &lt;b&gt;자연 또는 합성 감미료&lt;/b&gt;를 말합니다. 수크랄로스, 아스파탐, 스테비아 등이 대표적이며, 당뇨병 환자나 다이어트를 하는 사람들에게 설탕 대신 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;대표 감미료&lt;/b&gt;&lt;/span&gt;: 수크랄로스, 아스파탐, 스테비아, 에리스리톨&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;주 사용처&lt;/b&gt;&lt;/span&gt;: 다이어트 음료, 무설탕 간식, 당뇨용 제품 등&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;기대 효과&lt;/b&gt;&lt;/span&gt;: 칼로리 절감, 혈당 상승 억제&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 최근 연구 결과 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;미국 서던캘리포니아대 연구팀은 &lt;b&gt;수크랄로스가 오히려 식욕을 증가시킬 수 있다&lt;/b&gt;는 내용을 발표했습니다. 실험 참가자들은 수크랄로스 섭취 후 뇌의 시상하부와 감각&amp;middot;보상 관련 영역에서 &lt;b&gt;식욕과 연관된 활성이 증가&lt;/b&gt;했습니다. 또한 인슐린 분비에는 영향을 주지 않아, 뇌가 &amp;lsquo;포만감&amp;rsquo;을 인지하지 못하는 것으로 분석됐습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #fffbe7; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  실험 결과 요약&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #fffbe7; color: #333333; text-align: start;&quot;&gt;&amp;radic;&lt;/span&gt; &amp;nbsp;&lt;/b&gt;수크랄로스 &amp;rarr; 배고픔 유도 신호 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fffbe7; color: #333333; text-align: start;&quot;&gt;&amp;radic;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 뇌: 식욕 자극 영역 활성화, 포만감 혼란&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fffbe7; color: #333333; text-align: start;&quot;&gt;&amp;radic;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; &amp;nbsp;인슐린 변화 없음 &amp;rarr; 뇌에 배부름 신호 미전달&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7586249959905799&quot;&gt;&lt;/script&gt;
&lt;!-- [디스플레이, 사각형, 반응형] 중간 광고 --&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 다이어트에 미치는 영향&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설탕 대체제가 칼로리는 낮지만 &lt;b&gt;뇌와 호르몬 신호를 혼란시켜&lt;/b&gt; 식욕을 증가시킬 수 있다는 점에서, 오히려 &lt;b&gt;다이어트에 역효과&lt;/b&gt;를 줄 가능성이 있습니다. 실제로 일부 연구에서는 인공감미료를 자주 사용하는 사람이 &lt;b&gt;더 많은 음식을 섭취하거나 체중이 증가&lt;/b&gt;하는 경향을 보인다고 보고한 바 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #e8f5e9; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✓&lt;/b&gt;&amp;nbsp;단맛에 익숙해져 자연식품 거부감 증가&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✓&lt;/b&gt;&amp;nbsp;뇌가 &amp;lsquo;포만감&amp;rsquo; 신호를 받지 못함&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✓&lt;/b&gt;&amp;nbsp;식사량 증가 및 간식 욕구 자극&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 건강한 사용을 위한 조언&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설탕 대체제를 완전히 배제할 필요는 없지만, &lt;b&gt;장기적&amp;middot;일상적 사용은 주의&lt;/b&gt;가 필요합니다. 일시적 사용 또는 &lt;b&gt;스테비아&amp;middot;에리스리톨과 같은 천연 감미료&lt;/b&gt;를 선택하고, &lt;b&gt;단맛에 의존하지 않는 식생활 개선&lt;/b&gt;이 더욱 중요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;font-weight: bold; text-align: justify; background-color: #d0f0c0; padding: 10px; border-radius: 5px;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 다양한 설탕 대체제 종류와 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설탕 대체제는 크게 &lt;b&gt;인공 감미료&lt;/b&gt;와 &lt;b&gt;천연 감미료&lt;/b&gt;로 나뉘며, 각각의 감미료는 단맛 강도, 칼로리, 혈당 반응, 안정성에서 차이를 보입니다. 용도와 건강 상태에 따라 적절한 선택이 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid #ddd; border-radius: 10px; background-color: #f9f9f9; padding: 10px; margin: 10px 0;&quot;&gt;
&lt;p style=&quot;font-weight: bold; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;1. 수크랄로스 (Sucralose):&amp;nbsp;&lt;/span&gt;설탕보다 약 600배 강한 단맛, 칼로리 없음, 열 안정성 우수해 요리&amp;middot;베이킹에 사용 가능. 장기 복용 시 식욕 증가 가능성 제기됨.&lt;/p&gt;
&lt;p style=&quot;font-weight: bold; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;2. 아스파탐 (Aspartame):&amp;nbsp;&lt;/span&gt;200배 정도의 단맛. 칼로리는 있으나 매우 소량 사용됨. &lt;b&gt;페닐케톤뇨증 환자 주의 필요&lt;/b&gt;. 다이어트 음료, 껌에 흔히 사용.&lt;/p&gt;
&lt;p style=&quot;font-weight: bold; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;3. 스테비아 (Stevia):&amp;nbsp;&lt;/span&gt;식물 유래 천연 감미료. &lt;b&gt;혈당 영향을 거의 주지 않아 당뇨 환자에게 적합&lt;/b&gt;. 뒷맛이 씁쓸하다는 단점 있음.&lt;/p&gt;
&lt;p style=&quot;font-weight: bold; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e5d2ff;&quot;&gt;4. 에리스리톨 (Erythritol):&amp;nbsp;&lt;/span&gt;천연 유래 당알코올. 거의 0칼로리, 설탕의 약 60~70% 단맛. &lt;b&gt;장내 가스 생성 거의 없음&lt;/b&gt;. 베이킹용으로 인기 높음.&lt;/p&gt;
&lt;p style=&quot;font-weight: bold; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fde2c2;&quot;&gt;5. 자일리톨 (Xylitol):&amp;nbsp;&lt;/span&gt;설탕과 비슷한 단맛, 칼로리는 절반 수준. &lt;b&gt;충치 예방 효과&lt;/b&gt; 있어 껌, 치약 등에 활용. 과량 섭취 시 설사 유발 가능.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JLsDq/btsM4TFeF4Y/1DepE95BQTHeSc6qub5sz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JLsDq/btsM4TFeF4Y/1DepE95BQTHeSc6qub5sz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JLsDq/btsM4TFeF4Y/1DepE95BQTHeSc6qub5sz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJLsDq%2FbtsM4TFeF4Y%2F1DepE95BQTHeSc6qub5sz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: center; height: 115px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignCenter&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px; width: 13.4884%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; &lt;span style=&quot;text-align: center;&quot;&gt;이름&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; text-align: center; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; &lt;span style=&quot;text-align: center;&quot;&gt;종류&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;padding: 8px; height: 21px; width: 13.4884%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;수크랄로스&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; height: 21px; text-align: left; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;종류: 인공 감미료&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;칼로리: 0kcal&lt;br /&gt;&lt;/span&gt;단맛강도(설탕대비): &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;약 600배&lt;/span&gt; &lt;br /&gt;혈당 영향: &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;거의 없음&lt;br /&gt;특징: &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;열 안정성 높아 요리 가능&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;padding: 8px; height: 21px; width: 13.4884%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아스파탐&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; height: 21px; text-align: left; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;종류:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 인공 감미료&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;칼로리:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;거의 없음&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;단맛강도(설탕대비): &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;약 200배&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;혈당 영향: &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;낮음&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;특징: &lt;span style=&quot;background-color: #f9f9f9; color: #000000; text-align: left;&quot;&gt;페닐케톤뇨증 환자 주의&lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;padding: 8px; height: 21px; width: 13.4884%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스테비아&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; height: 21px; text-align: left; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;종류:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 천연 감미료&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;칼로리:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;0kcal&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;단맛강도(설탕대비): &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;약 200~300배&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;혈당 영향: &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;없음&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;특징: &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;식물 유래, 쓴 뒷맛 있음&lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;padding: 8px; height: 21px; width: 13.4884%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에리스리톨&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; height: 21px; text-align: left; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;종류:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 당알코올(천연 유래)&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;칼로리:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;0~0.2kcal&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;단맛강도(설탕대비): &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;약 70% 수준&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;혈당 영향: &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;없음&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;특징: &lt;span style=&quot;background-color: #f9f9f9; color: #000000; text-align: left;&quot;&gt;위장 부담 적음, 베이킹 적합&lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;padding: 8px; height: 21px; width: 13.4884%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자일리톨&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; height: 21px; text-align: left; width: 28.6046%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;종류:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 당알코올&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;칼로리:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;약 2.4kcal/g&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;단맛강도(설탕대비): &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;동일 수준&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;혈당 영향: &lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;낮음&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: center;&quot;&gt;특징: &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;충치 예방, 과다 섭취 시 설사&lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 대체 감미료는 용도와 건강 상태에 따라 선택이 달라질 수 있으며, &lt;b&gt;장기 섭취 시 영향&lt;/b&gt;에 대해 신중하게 접근하는 것이 바람직합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;감미료는 모두 &amp;lsquo;단맛&amp;rsquo;이라는 공통점을 갖지만, &lt;b&gt;흡수 방식, 칼로리, 안전성, 대사 영향&lt;/b&gt;은 서로 다릅니다. 특히 &lt;b&gt;장기 섭취 시 영향&lt;/b&gt;에 대한 연구는 여전히 진행 중이므로, 자연식품을 우선으로 하고 적절히 보완하는 형태가 가장 바람직합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>건강식품</category>
      <category>다이어트식단</category>
      <category>단맛중독</category>
      <category>설탕대체제</category>
      <category>수크랄로스</category>
      <category>식욕조절</category>
      <category>인공감미료</category>
      <category>포만감</category>
      <author>떠버리</author>
      <guid isPermaLink="true">https://chatboy.tistory.com/623</guid>
      <comments>https://chatboy.tistory.com/623#entry623comment</comments>
      <pubDate>Tue, 1 Apr 2025 10:13:04 +0900</pubDate>
    </item>
  </channel>
</rss>