<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>언제나 휴일</title>
    <link>https://ehclub.tistory.com/</link>
    <description>초중고 교육 및 여행, 프로그래밍에 관한 글을 집필하여 온라인으로 무료 게시합니다.</description>
    <language>ko</language>
    <pubDate>Thu, 6 Aug 2026 19:52:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>언제나휴일</managingEditor>
    <image>
      <title>언제나 휴일</title>
      <url>https://t1.daumcdn.net/cfile/tistory/99DE3A3F5C63875123</url>
      <link>https://ehclub.tistory.com</link>
    </image>
    <item>
      <title>[왕초보 피아노 16일차] 전원교향곡베토벤, 내림나장조, 내림나단조 #piano</title>
      <link>https://ehclub.tistory.com/3592</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/EgfH3asMpPI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bRTrME/dJMb9fZKlvA/z8iiieP35yKP3HIY7YTYlk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/QZHdm/dJMb8WeOY2a/H2kyb41cXCQpbtKAXH4D91/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 16일차] 전원교향곡베토벤, 내림나장조, 내림나단조 #piano&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/EgfH3asMpPI&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[왕초보 피아노 16일차] 전원교향곡베토벤, 내림나장조, 내림나단조 #piano&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:00&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 피아노 연습 영상 내용 소개 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:05&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 전원교향곡(베토벤) - 가락음정 5도 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:42&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 내림나장조 도레미파솔 기본스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:18&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 내림나단조 도레미파솔 &lt;br /&gt;기본스케일 댓글에 고쳤으면 하는 것이나 응원문구 남겨주세요.&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>가락음정 5도</category>
      <category>내림나단조 도레미파솔</category>
      <category>내림나장조 기본 스케일</category>
      <category>내림나장조 도레미파솔</category>
      <category>베토벤</category>
      <category>연습 영상</category>
      <category>왕초보 피아노</category>
      <category>전원교향곡</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3592</guid>
      <comments>https://ehclub.tistory.com/3592#entry3592comment</comments>
      <pubDate>Wed, 5 Aug 2026 21:45:12 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 15일차] 우리 집에 왜 왔니 내림가장조, 올림사단조 #왕초보피아노#중년피아노</title>
      <link>https://ehclub.tistory.com/3591</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/ZZkV8YKGP6o&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bhxUmO/dJMb9bwg5JS/PQS37x8A68cDB6UsNlAptk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/UPa1C/dJMb9b36QLx/PrPzXbne1GC702rLyqWPxk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 15일차] 우리 집에 왜 왔니 내림가장조, 올림사단조 #왕초보피아노#중년피아노&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ZZkV8YKGP6o&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 15일차] 우리 집에 왜 왔니 내림가장조, 올림사단조 #왕초보피아노 #중년피아노&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:00&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 왕초보 피아노15일차 소개 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:05&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 우리 집에 왜 왔니? &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:38&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 내림가장조 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:06&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 올림사단조&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/blockquote&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>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3591</guid>
      <comments>https://ehclub.tistory.com/3591#entry3591comment</comments>
      <pubDate>Wed, 5 Aug 2026 09:30:31 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 14일차] 아내 지도로 배우는 내림 사장조, 올림 바단조#왕초보피아노</title>
      <link>https://ehclub.tistory.com/3590</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/OTvcGAONvZk&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/0HCWW/dJMb9bwgCys/lPZmbKrc0XmTnvQ1eHkPEk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/dht9wl/dJMb9lllrBJ/4skwwFbMyISRUUTACEAgTk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 14일차] 아내 지도로 배우는 내림 사장조, 올림 바단조#왕초보피아노&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/OTvcGAONvZk&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 14일차] 아내 지도로 배우는 내림 사장조, 올림 바단조 #왕초보피아노&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:00&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 소개 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:06&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 아내 지도 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:53&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 내림사장조 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:21&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 올림바단조&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&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>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3590</guid>
      <comments>https://ehclub.tistory.com/3590#entry3590comment</comments>
      <pubDate>Sat, 1 Aug 2026 10:16:25 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 13일차] 스타카토(런던교향곡, 팝콘과콜라), 기본스케일(내림라장조, 올림다단조) #피아노</title>
      <link>https://ehclub.tistory.com/3589</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/aGI_cVkKiIo&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/biFvcw/dJMb8WMD8fc/t4Ei211YNjDLSxKey4xyN1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/btXKlz/dJMb8RkgDJa/Lw0bwoF73e2zVd28RKDyXk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 13일차] 스타카토(런던교향곡, 팝콘과콜라), 기본스케일(내림라장조, 올림다단조) #피아&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/aGI_cVkKiIo&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 13일차] 스타카토(런던교향곡, 팝콘과콜라), 기본스케일(내림라장조, 올림다단조) #피아노&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 실습 영상입니다.&lt;br /&gt;&lt;br /&gt;스타카토 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:08&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 런던교향곡 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:31&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 팝콘과콜라 &lt;br /&gt;&lt;br /&gt;기본스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:53&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 내림라장조&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:25&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 올림다단조&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;내림라장조 보표.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5nVmq/dJMcaf1LaNU/9blsk6pdUkKCKhihFSVmN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5nVmq/dJMcaf1LaNU/9blsk6pdUkKCKhihFSVmN0/img.png&quot; data-alt=&quot;내림라장조 도레미파솔 악보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5nVmq/dJMcaf1LaNU/9blsk6pdUkKCKhihFSVmN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5nVmq%2FdJMcaf1LaNU%2F9blsk6pdUkKCKhihFSVmN0%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;485&quot; height=&quot;144&quot; data-filename=&quot;내림라장조 보표.png&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내림라장조 도레미파솔 악보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;내림라장조 건반.png&quot; data-origin-width=&quot;3950&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvplei/dJMcagTYuHS/aqyv1H860JUDKlIuBepBP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvplei/dJMcagTYuHS/aqyv1H860JUDKlIuBepBP1/img.png&quot; data-alt=&quot;내림라장조 도레미파솔 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvplei/dJMcagTYuHS/aqyv1H860JUDKlIuBepBP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvplei%2FdJMcagTYuHS%2Faqyv1H860JUDKlIuBepBP1%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;3950&quot; height=&quot;612&quot; data-filename=&quot;내림라장조 건반.png&quot; data-origin-width=&quot;3950&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내림라장조 도레미파솔 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;올림다단조 보표.png&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqP30E/dJMcagTYuHQ/cFJFsGuxkqoNkRLVw23Y40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqP30E/dJMcagTYuHQ/cFJFsGuxkqoNkRLVw23Y40/img.png&quot; data-alt=&quot;올림다단조 도레미파솔 악보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqP30E/dJMcagTYuHQ/cFJFsGuxkqoNkRLVw23Y40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqP30E%2FdJMcagTYuHQ%2FcFJFsGuxkqoNkRLVw23Y40%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;465&quot; height=&quot;150&quot; data-filename=&quot;올림다단조 보표.png&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;올림다단조 도레미파솔 악보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;올림다단조 건반.png&quot; data-origin-width=&quot;3950&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/leKjq/dJMcagTYuHR/CM0K4HGuY8CKUYrK0B86l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/leKjq/dJMcagTYuHR/CM0K4HGuY8CKUYrK0B86l1/img.png&quot; data-alt=&quot;올림다단조 도레미파솔 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/leKjq/dJMcagTYuHR/CM0K4HGuY8CKUYrK0B86l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleKjq%2FdJMcagTYuHR%2FCM0K4HGuY8CKUYrK0B86l1%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;3950&quot; height=&quot;612&quot; data-filename=&quot;올림다단조 건반.png&quot; data-origin-width=&quot;3950&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;올림다단조 도레미파솔 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>내림라장조</category>
      <category>런던교향곡</category>
      <category>스타카토</category>
      <category>연습 영상</category>
      <category>올림다단조</category>
      <category>왕초보 피아노</category>
      <category>팝콘과 콜라</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3589</guid>
      <comments>https://ehclub.tistory.com/3589#entry3589comment</comments>
      <pubDate>Fri, 31 Jul 2026 11:58:05 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 12일차] 환희의 송가(셈여림), 트렘펫 독주곡(음정), 반음계 연습해요.</title>
      <link>https://ehclub.tistory.com/3588</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/K7HnF1ed0XA&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Efepn/dJMb8VNJ6lX/D1NpWY46BZl9dW83KtCCWk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bepH4J/dJMb8TCoaS6/ZGS9s2vVuDtXyt6ypPNz5k/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 12일차] 환희의 송가(셈여림), 트렘펫 독주곡(음정), 반음계 연습해요.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/K7HnF1ed0XA&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 12일차] 환희의 송가(셈여림), 트렘펫 독주곡(음정), 반음계 연습해요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 실습 영상입니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:08&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 환희의 송가(셈여림)&lt;br /&gt;교향곡 제9번 '합창' 중 (베토벤) &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:53&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 트렘펫 독주곡(음정) '덴마트 왕자의 행진곡' 중(클라크 작곡) &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:23&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 반음계 연습해요.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>교향곡 제9번</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://ehclub.tistory.com/3588</guid>
      <comments>https://ehclub.tistory.com/3588#entry3588comment</comments>
      <pubDate>Thu, 30 Jul 2026 12:24:21 +0900</pubDate>
    </item>
    <item>
      <title>[노래로 배우는 음악 이론] 가장 순수한 다장조를 노래로 Let's Go #음악이론</title>
      <link>https://ehclub.tistory.com/3587</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/STH3VRuXPdM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/nCTX0/dJMb9g5oROx/FyatHsnakmyVl8QJKqzgpk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/dj8Vea/dJMb8PGKgVC/6Gru7UpoQmyzpO2LzQ6Yqk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[노래로 배우는 음악 이론] 가장 순수한 다장조를 노래로 Let&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/STH3VRuXPdM&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[노래로 배우는 음악 이론] 가장 순수한 다장조를 노래로 Let's Go #음악이론&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:00&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;도에서 시작하는 다장조 세상~ &lt;br /&gt;샵도 플랫도 아무것도 없어서~ &lt;br /&gt;오직 흰 건반으로만 연주하지요~ &lt;br /&gt;핵심 코드는 C! F! G! 끝! &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:14&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;다장조, C Major 에 대해 좀 더 알아볼게. &lt;br /&gt;모든 음악 이론의 시작점이자 기준이 되는 조성이지. &lt;br /&gt;제일 먼저 다장조는 '도(C)' 음을 으뜸음으로 삼는 Major Key! &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:28&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;다장조란 이름은 '다'가 서양 음이름의 'C'와 같기 때문에 다장조라 부르는 것이야. &lt;br /&gt;음악의 '기준'으로 삼는 장조로 피아노 건반에서 샵(#)이나 플랫(♭) 같은 검은 건반을 전혀 누르지 않고, &lt;br /&gt;오직 흰 건반으로만 연주하는 가장 순수한 상태인 것이지. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:45&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;장조에 절대 규칙은 삼사번째 음인 미파와 칠팔번째 음 시도사이가 반드시 반음이어야 하지. &lt;br /&gt;다장조는 '도'부터 순서대로 도,레,미,파,솔,라,시,도를 나열해 보면, &lt;br /&gt;신기하게도 원래 자연 상태의 미파와 시도가 이미 반음 관계지. &lt;br /&gt;어떤 음도 올리거나 내릴 필요가 없기 때문에, &lt;br /&gt;다장조는 악보 맨 앞 높은음자리표 옆에 아무런 조표도 붙지 않는 깨끗한 악보 그 자체야. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:10&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;다장도의 주요 3화음을 이제 알아보까? &lt;br /&gt;1도 화음은 으뜸화음이라 부르고 도,미,솔로 구성하지. &lt;br /&gt;마치 집에 온 것처럼 안정감을 제공해. &lt;br /&gt;4도 화음은 버금딸림화음이라 부르고 파,라,도로 구성하지. &lt;br /&gt;약간의 모험을 시작하는 설렘이랄까? &lt;br /&gt;5도 화음은 딸림화음으로 솔,시,레로 구성하며 &lt;br /&gt;Come Back Home하고픈 욕구가 생기지. &lt;br /&gt;따라서 쉬운 대다수의 노래에서 C, F, G, C 순으로 진행하지, &lt;br /&gt;1도 화음, 4도 화음, 5도 화음, 1도 화음 순이지. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:48&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;다시 한 번 다장조를 요약할게. &lt;br /&gt;하나, 다장조는 '도'에서 시작하는 가장 기본적이고 밝은 장조 &lt;br /&gt;둘, 조표가 아무것도 붙지 않아 오직 피아노 흰 건반만을 사용 &lt;br /&gt;셋, 핵심 코드는 C, F, G이며, 이 세 가지만 알아도 많은 곡을 연주할 수 있지. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;02:07&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; &lt;br /&gt;다른 궁금한 점이 있으면 댓글로 남겨줘.&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다장조를 노래로 알려줄게.png&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kya19/dJMcacxe2WB/L0A5VAJ0DeASU44gR0F1E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kya19/dJMcacxe2WB/L0A5VAJ0DeASU44gR0F1E0/img.png&quot; data-alt=&quot;[노래로 배우는 음악 이론] 가장 순수한 다장조를 노래로 Let's Go #음악이론&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kya19/dJMcacxe2WB/L0A5VAJ0DeASU44gR0F1E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkya19%2FdJMcacxe2WB%2FL0A5VAJ0DeASU44gR0F1E0%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;1408&quot; height=&quot;768&quot; data-filename=&quot;다장조를 노래로 알려줄게.png&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[노래로 배우는 음악 이론] 가장 순수한 다장조를 노래로 Let's Go #음악이론&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기/노래로 음악 이론 즐겨요.</category>
      <category>노래</category>
      <category>노래로 배우는 음악이론</category>
      <category>다장조</category>
      <category>동영상</category>
      <category>따림화음</category>
      <category>버금딸림화음</category>
      <category>으뜸화음</category>
      <category>음악이론</category>
      <category>주요 3화음</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3587</guid>
      <comments>https://ehclub.tistory.com/3587#entry3587comment</comments>
      <pubDate>Wed, 29 Jul 2026 11:43:18 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 11일차] B 장조와 B 단조를 연습해요. 음정 에튀드(2도,3도)도 연습해요. #piano #music</title>
      <link>https://ehclub.tistory.com/3586</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/WSQFWUv3Z5s&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/j7VEj/dJMb9fZJbvU/C66e8AFGr1VALFzx2sTGFk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bXC0hO/dJMb9kmqk1Q/Hajpnh9On4a69aKii7QO60/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 11일차] B 장조와 B 단조를 연습해요. 음정 에튀드(2도,3도)도 연습해요. #piano #music&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/WSQFWUv3Z5s&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 11일차] B 장조와 B 단조를 연습해요. 음정 에튀드(2도,3도)도 연습해요. #piano #music&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 실습 영상입니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:08&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; B 장조 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:44&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; B 단조를 연습해요. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:22&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 음정 에튀드(2도,3도)&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>2도 음정</category>
      <category>3도 음정</category>
      <category>B장조</category>
      <category>왕초보피아노</category>
      <category>음정 에튀드</category>
      <category>중년피아노</category>
      <category>피아노 배우기</category>
      <category>피아노연습영상</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3586</guid>
      <comments>https://ehclub.tistory.com/3586#entry3586comment</comments>
      <pubDate>Tue, 28 Jul 2026 20:30:38 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 10일차] 끊지 않고 이어서 연주하기(레가토), 거미가 줄을 타고 올라갑니다.</title>
      <link>https://ehclub.tistory.com/3585</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/JV4kmOemswQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/vh6qe/dJMb8WMDrLe/APlk7KaEDBKBgcN2EWfidK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/xRCEC/dJMb8Z3FiFI/Ev4G5vaWOKL79ksYGsKQEK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;피아노 10일차, 끊지 않고 이어서 연주하기(레가토), 거미가 줄을 타고 올라갑니다.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/JV4kmOemswQ&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 10일차] 끊지 않고 이어서 연주하기(레가토), 거미가 줄을 타고 올라갑니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;피아노 10일차, 끊지 않고 이어서 연주하기(레가토) &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:05&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 다장조 (레가토로 연주) &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:35&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 다단조 (레가토로 연주) &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:06&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 거미가 줄을 타고 올라갑니다. (올라갑니다. 부분을 레가토로 연주)&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>거미가 줄을 타고 올라갑니다.</category>
      <category>끊지 않고 이어서 연주하기</category>
      <category>레가토</category>
      <category>왕초보 피아노</category>
      <category>중년 피아노</category>
      <category>피아노 배우기</category>
      <category>피아노 초보</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3585</guid>
      <comments>https://ehclub.tistory.com/3585#entry3585comment</comments>
      <pubDate>Mon, 27 Jul 2026 10:55:52 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 9일차] 바장조 및 바단조 건반, 나는 기쁘다 연습 #piano #피아노</title>
      <link>https://ehclub.tistory.com/3584</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/nmfGmJjdDvo&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/g7j9o/dJMb87gkcDS/2SYxMs4DkBADBJaeZOQMw1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/eAxyCM/dJMb81HbdkA/L3zzaUkIVr6Zkb4B5ksTAk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 9일차] 바장조 및 바단조 건반, 나는 기쁘다 연습 #piano #피아노&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/nmfGmJjdDvo&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 9일차] 바장조 및 바단조 건반, 나는 기쁘다 연습 #piano #피아노&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왕초보 중년 피린이 연습 영상입니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:03&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 바장조 건반 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:36&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 바단조 건반 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:07&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 나는 기쁘다 연습&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;바장조 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSHIC9/dJMcajiOnth/iEVJoY1FMiOlnvPtoC75S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSHIC9/dJMcajiOnth/iEVJoY1FMiOlnvPtoC75S0/img.png&quot; data-alt=&quot;바장조 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSHIC9/dJMcajiOnth/iEVJoY1FMiOlnvPtoC75S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSHIC9%2FdJMcajiOnth%2FiEVJoY1FMiOlnvPtoC75S0%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;1149&quot; height=&quot;178&quot; data-filename=&quot;바장조 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;바장조 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;바단조 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs1K3X/dJMcag7pdx9/mH5R5U1rLaKhsm1ciPkMYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs1K3X/dJMcag7pdx9/mH5R5U1rLaKhsm1ciPkMYk/img.png&quot; data-alt=&quot;바단조 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs1K3X/dJMcag7pdx9/mH5R5U1rLaKhsm1ciPkMYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs1K3X%2FdJMcag7pdx9%2FmH5R5U1rLaKhsm1ciPkMYk%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;1149&quot; height=&quot;178&quot; data-filename=&quot;바단조 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;바단조 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&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://ehclub.tistory.com/3584</guid>
      <comments>https://ehclub.tistory.com/3584#entry3584comment</comments>
      <pubDate>Sun, 26 Jul 2026 19:41:21 +0900</pubDate>
    </item>
    <item>
      <title>Sharp(#)을 붙이는 순서와 이에 따른 장조</title>
      <link>https://ehclub.tistory.com/3583</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/isdnWBbRryc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/R8AgA/dJMb8PGJLNw/6UaQX2u39wDZr2yUpTVW0K/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/lmp2X/dJMb8WMDfNh/uBKpqCisMKEolV8DVsMSx1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Sharp(#)을 붙이는 순서와 이에 따른 장조#음악이론&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/isdnWBbRryc&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;Sharp(#)을 붙이는 순서와 이에 따른 장조&lt;/figcaption&gt;
&lt;/figure&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-filename=&quot;Sharp을 붙이는 순서.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7BtCD/dJMcaasENTT/nuXubzF9dyUd2PiUNqVqUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7BtCD/dJMcaasENTT/nuXubzF9dyUd2PiUNqVqUk/img.png&quot; data-alt=&quot;Sharp(#)을 붙이는 순서와 이에 따른 장조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7BtCD/dJMcaasENTT/nuXubzF9dyUd2PiUNqVqUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7BtCD%2FdJMcaasENTT%2FnuXubzF9dyUd2PiUNqVqUk%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;640&quot; height=&quot;360&quot; data-filename=&quot;Sharp을 붙이는 순서.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Sharp(#)을 붙이는 순서와 이에 따른 장조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;Sharp을 붙일 때는 &quot;파도솔레라미시&quot;순으로 붙이지. &lt;br /&gt;Sharp이 하나면 사장조, &lt;br /&gt;둘 라장조, &lt;br /&gt;셋 가장조, &lt;br /&gt;넷 마장조, &lt;br /&gt;다섯 나장조, &lt;br /&gt;여섯 올림 바장조, &lt;br /&gt;일곱 올림 다장조 &lt;br /&gt;&quot;신랑가마나쁘다&quot;로 쉽게 외울 수 있어.&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기/노래로 음악 이론 즐겨요.</category>
      <category>Kpop</category>
      <category>sharp</category>
      <category>Sharp 개수에 따른 장조</category>
      <category>Sharp 붙이는 순서</category>
      <category>노래로 음악 이론 배우기</category>
      <category>언제나 휴일</category>
      <category>음악 이론</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3583</guid>
      <comments>https://ehclub.tistory.com/3583#entry3583comment</comments>
      <pubDate>Sat, 25 Jul 2026 14:55:22 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 8일차] E Major, E Minor 기본 스케일, 악보 연습은 따라쟁이, 하얀 이 예쁜 이</title>
      <link>https://ehclub.tistory.com/3582</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/odeACdT5X-o&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/sV3Qr/dJMb9c9K7UA/2XCV66oM9SRH3hYalTQpX0/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bZzCeC/dJMb8SXLlwO/g4MAKOnIjR0VO2B1rVOlI0/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 8일차] E장조, E 단조 스케일 연습해요. 따라쟁이, 하얀 이 예쁜 이도 연습해요.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/odeACdT5X-o&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 8일차] E Major, E Minor 기본 스케일, 악보 연습은 따라쟁이, 하얀 이 예쁜 이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:05&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; E Major 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:39&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; E Minor 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:12&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 따라쟁이 악보 연습 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:33&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 하얀 이 예쁜 이 악보 연습&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>왕초보 피아노</category>
      <category>중년 피아노</category>
      <category>피아노</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3582</guid>
      <comments>https://ehclub.tistory.com/3582#entry3582comment</comments>
      <pubDate>Fri, 24 Jul 2026 09:19:30 +0900</pubDate>
    </item>
    <item>
      <title>[피아노 7일차] A장조와 A단조를 연습해요. 큰 보표 악보 연습도 해요.</title>
      <link>https://ehclub.tistory.com/3581</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/ZDV1TvtNM1k&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/srnAd/dJMb88fdZSy/28Yk97Su276U5crT4jFiwK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/23zGF/dJMb896gZqh/azJpEkAQ2nPJaEcp422uPK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[피아노 7일차] A 장조와 A 단조를 연습해요. 큰 보표 악보 연습도 해요.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ZDV1TvtNM1k&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[피아노 7일차] A장조와 A단조를 연습해요. 큰 보표 악보 연습도 해요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:04&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; A 장조 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:39&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; A 단조 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:08&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 큰보표 악보 연습&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;가장조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byqtTS/dJMcahZuZiF/zLesKGuDpkYbemxLB7MV4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byqtTS/dJMcahZuZiF/zLesKGuDpkYbemxLB7MV4K/img.png&quot; data-alt=&quot;가장조 보표 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byqtTS/dJMcahZuZiF/zLesKGuDpkYbemxLB7MV4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyqtTS%2FdJMcahZuZiF%2FzLesKGuDpkYbemxLB7MV4K%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;1149&quot; height=&quot;348&quot; data-filename=&quot;가장조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가장조 보표 및 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;가단조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3MOv8/dJMcaiYl9hw/q7JAZcOrrQDi6xK29nmQN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3MOv8/dJMcaiYl9hw/q7JAZcOrrQDi6xK29nmQN0/img.png&quot; data-alt=&quot;가단조 보표 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3MOv8/dJMcaiYl9hw/q7JAZcOrrQDi6xK29nmQN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3MOv8%2FdJMcaiYl9hw%2Fq7JAZcOrrQDi6xK29nmQN0%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;1149&quot; height=&quot;362&quot; data-filename=&quot;가단조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가단조 보표 및 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>a단조</category>
      <category>A장조</category>
      <category>건반</category>
      <category>보표</category>
      <category>영상</category>
      <category>왕초보</category>
      <category>왕초보 피아노</category>
      <category>중년 피아노</category>
      <category>피아노</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3581</guid>
      <comments>https://ehclub.tistory.com/3581#entry3581comment</comments>
      <pubDate>Thu, 23 Jul 2026 11:38:54 +0900</pubDate>
    </item>
    <item>
      <title>피아노 6일차, D 장조와 D단조를 연습해요. 연습곡은 무지개여행, 환희의송가, 여름비</title>
      <link>https://ehclub.tistory.com/3580</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/QUDREJtXf0w&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cOBEqC/dJMb9frSlHu/cPrT7NRdrbXjdF4jFyQohk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/dhXfmq/dJMb9eT2th6/AKJrGkdkkXr5kzMxGJKCIK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;피아노 6일차, D 장조와 D단조를 연습해요. 연습곡은 무지개여행, 환희의송가, 여름비&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/QUDREJtXf0w&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;D 장조와 D단조를 연습해요. 연습곡은 무지개여행, 환희의송가, 여름비&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock style1&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;라장조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oM2F8/dJMcahLYd4h/0zFYXdrCCsikTwJdnL8Ku0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oM2F8/dJMcahLYd4h/0zFYXdrCCsikTwJdnL8Ku0/img.png&quot; data-alt=&quot;라장조 보표 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oM2F8/dJMcahLYd4h/0zFYXdrCCsikTwJdnL8Ku0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoM2F8%2FdJMcahLYd4h%2F0zFYXdrCCsikTwJdnL8Ku0%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;1149&quot; height=&quot;375&quot; data-filename=&quot;라장조 보표 및 건반.png&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;라장조 보표 및 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;라단조 보표 및 건반.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAdgCd/dJMcac4XFhW/KaWfPWO28aNSM0LDeYbUuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAdgCd/dJMcac4XFhW/KaWfPWO28aNSM0LDeYbUuk/img.png&quot; data-alt=&quot;라단조 보표 및 건&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAdgCd/dJMcac4XFhW/KaWfPWO28aNSM0LDeYbUuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAdgCd%2FdJMcac4XFhW%2FKaWfPWO28aNSM0LDeYbUuk%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;1148&quot; height=&quot;373&quot; data-filename=&quot;라단조 보표 및 건반.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;라단조 보표 및 건&lt;/figcaption&gt;
&lt;/figure&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://ehclub.tistory.com/3580</guid>
      <comments>https://ehclub.tistory.com/3580#entry3580comment</comments>
      <pubDate>Wed, 22 Jul 2026 09:21:20 +0900</pubDate>
    </item>
    <item>
      <title>피아노 5일차, G장조와 G단조를 연습해요. 연습곡은 스케이트, 바둑이방울</title>
      <link>https://ehclub.tistory.com/3579</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/6XxWvCEbXIw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/QQZy5/dJMb81HaxJB/NaF3hnm9NAqmkuwcw4QXJk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/JwRiU/dJMb9c9KLp6/mG9Cz4qshtgNw5iDITKoe0/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;피아노 5일차, G장조와 G단조를 연습해요. 연습곡은 스케이트, 바둑이방울&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/6XxWvCEbXIw&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;피아노 5일차, G장조와 G단조를 연습해요. 연습곡은 스케이트, 바둑이방울&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 실습 영상입니다. &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:10&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; G장조 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;00:41&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; G단조 기본 스케일 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:17&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 스케이트 &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;01:43&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt; 바둑이방울&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;G장조 보표 및 건반.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TTe2q/dJMcafADYZh/CKj0Cmlwj3JUXKDpKoQ8m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TTe2q/dJMcafADYZh/CKj0Cmlwj3JUXKDpKoQ8m1/img.png&quot; data-alt=&quot;G 장조 기본 스케일 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TTe2q/dJMcafADYZh/CKj0Cmlwj3JUXKDpKoQ8m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTTe2q%2FdJMcafADYZh%2FCKj0Cmlwj3JUXKDpKoQ8m1%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;1280&quot; height=&quot;401&quot; data-filename=&quot;G장조 보표 및 건반.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;401&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;G 장조 기본 스케일 및 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;G단조 보표 및 건반.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VyRv3/dJMcafADYZi/QKHuZlgpsfdEED4lfHKMOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VyRv3/dJMcafADYZi/QKHuZlgpsfdEED4lfHKMOK/img.png&quot; data-alt=&quot;G 단조 기본 스케일 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VyRv3/dJMcafADYZi/QKHuZlgpsfdEED4lfHKMOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVyRv3%2FdJMcafADYZi%2FQKHuZlgpsfdEED4lfHKMOK%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;1280&quot; height=&quot;417&quot; data-filename=&quot;G단조 보표 및 건반.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;G 단조 기본 스케일 및 건반&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>G 단조</category>
      <category>G장조</category>
      <category>건반</category>
      <category>기본 스케일</category>
      <category>배우기</category>
      <category>보표</category>
      <category>영상</category>
      <category>왕초보</category>
      <category>중년 피아노</category>
      <category>피아노</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3579</guid>
      <comments>https://ehclub.tistory.com/3579#entry3579comment</comments>
      <pubDate>Tue, 21 Jul 2026 14:09:37 +0900</pubDate>
    </item>
    <item>
      <title>피아노 4일차, 검은 건반도 도전! 내림 마장조 스케일</title>
      <link>https://ehclub.tistory.com/3578</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/07qXgwHXWD4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/UIeMZ/dJMb8Rke5Rh/iR7b7ya9xTxZWmIuofRfO1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/D4keT/dJMb8Xkst6F/njYraDL7ohl7IRpP66Eqy1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;피아노 4일차, 검은 건반도 도전! 내림 마장조 스케일&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/07qXgwHXWD4&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;피아노 4일차, 검은 건반도 도전! 내림 마장조 스케일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 영상입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4일차 내림마장조 스케일 연습입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;00:00 내림마장조 스케일 왼손 연습&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;00:37 내림마장조 스케일 오른손 연습&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; font-size: 1.12em; letter-spacing: 0px;&quot;&gt;01:16 내림마장조 스케일 양손 연습&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;보표 및 건반.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9NM6v/dJMcac4Wz9p/KVNKgQOEwT2XHuyi4Rcxgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9NM6v/dJMcac4Wz9p/KVNKgQOEwT2XHuyi4Rcxgk/img.png&quot; data-alt=&quot;내림미장조 보표 및 건반&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9NM6v/dJMcac4Wz9p/KVNKgQOEwT2XHuyi4Rcxgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9NM6v%2FdJMcac4Wz9p%2FKVNKgQOEwT2XHuyi4Rcxgk%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;928&quot; height=&quot;359&quot; data-filename=&quot;보표 및 건반.png&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;359&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내림미장조 보표 및 건반&lt;/figcaption&gt;
&lt;/figure&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://ehclub.tistory.com/3578</guid>
      <comments>https://ehclub.tistory.com/3578#entry3578comment</comments>
      <pubDate>Mon, 20 Jul 2026 20:59:11 +0900</pubDate>
    </item>
    <item>
      <title>왕초보 피아노 3일차 - 악보보며 양손으로 도레미파솔 치기</title>
      <link>https://ehclub.tistory.com/3577</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/qliKhvtEpm4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bkbW6z/dJMb9ia3Ldj/bRNIZSaEZKEY5lta1qS7n1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/o49ik/dJMb8UH14bc/eLksCL4GtmQeHJitc7lYI1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;왕초보 피아노 3일차 - 악보보며 양손으로 도레미파솔 치기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/qliKhvtEpm4&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;왕초보 피아노 3일차 - 악보보며 양손으로 도레미파솔 치기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 왕초보 피아노 배우기 3일차입니다. &lt;br /&gt;악보보며 양손으로 도레미파솔 건반 누르기입니다.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>시니어 피아노</category>
      <category>실습</category>
      <category>영상</category>
      <category>왕초보 피아노</category>
      <category>중년 피아노</category>
      <category>천안</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3577</guid>
      <comments>https://ehclub.tistory.com/3577#entry3577comment</comments>
      <pubDate>Sun, 19 Jul 2026 10:19:52 +0900</pubDate>
    </item>
    <item>
      <title>왕초보 피아노 2일차 - 양손 네손가락으로 건반 누르기</title>
      <link>https://ehclub.tistory.com/3576</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/hL98r5W3fcE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b72WrS/dJMb9kUfyZ8/FyOFrTYmOOSG4bG89ocKTk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/pyP70/dJMb9b34EBY/7KpyhZ7YJiTkdQHkYEG3u1/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;왕초보 피아노 2일차 - 양손으로 네손가락 건반 누르기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/hL98r5W3fcE&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;왕초보 피아노 2일차 - 양손 네손가락으로 건반 누르기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;왕초보 중년 아저씨의 피아노 배우기 영상입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;2일차 연습으로 양손 네 손가락으로 건반 누르기입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;왼손은 도시라솔라시도 순으로 누르고 오른손은 도레미파미레도 순으로 누릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0f0f0f; text-align: start;&quot;&gt;*한 건반을 세 번씩 누르면서 이동합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;건반.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KSg1G/dJMcagM7IAV/b605MLAkZtVxWo8yxpMa1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KSg1G/dJMcagM7IAV/b605MLAkZtVxWo8yxpMa1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KSg1G/dJMcagM7IAV/b605MLAkZtVxWo8yxpMa1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKSg1G%2FdJMcagM7IAV%2Fb605MLAkZtVxWo8yxpMa1K%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;1137&quot; height=&quot;172&quot; data-filename=&quot;건반.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>왕초보 피아노</category>
      <category>운지법</category>
      <category>중년 피아노</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3576</guid>
      <comments>https://ehclub.tistory.com/3576#entry3576comment</comments>
      <pubDate>Sun, 19 Jul 2026 09:01:21 +0900</pubDate>
    </item>
    <item>
      <title>왕초보 피아노 1일차 - 건반 누르기(중지, 검지)</title>
      <link>https://ehclub.tistory.com/3575</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1일차에 배운 것은 중지와 검지로 도레미파솔파미레도 건반 누르기입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 손가락을 건반으로 이동한 후에 건반을 세 번 누릅니다. 그리고 다음 건반으로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건반은 양손 같이 도레미파솔파미레도 순으로 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중지로 10회 연습하고 검지로 10회 연습합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;연습1일차 양손 중지로 도레미파솔, 검지로 도레미파솔 치기.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7LvlP/dJMcadbBx63/7kzWsTv7KwB8RbN16NkEzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7LvlP/dJMcadbBx63/7kzWsTv7KwB8RbN16NkEzk/img.png&quot; data-alt=&quot;건반 누르기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7LvlP/dJMcadbBx63/7kzWsTv7KwB8RbN16NkEzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7LvlP%2FdJMcadbBx63%2F7kzWsTv7KwB8RbN16NkEzk%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;1137&quot; height=&quot;172&quot; data-filename=&quot;연습1일차 양손 중지로 도레미파솔, 검지로 도레미파솔 치기.png&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;건반 누르기&lt;/figcaption&gt;
&lt;/figure&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;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/4npjqx0vqQ0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/ZDzcG/dJMb887lwxk/cPzrVdhc9IX0vBHDaIYatk/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/eH3bbD/dJMb8VNIysb/BoDOGzcfeKihJqbtfAuM31/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;왕초보 피아노1일차 중지, 검지로 건반 누르기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/4npjqx0vqQ0&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;왕초보 1일차 - 양손 중지로 도레미파솔&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>중년 아저씨 피아노배우기</category>
      <category>1일차</category>
      <category>건반누르기</category>
      <category>검지</category>
      <category>왕초보</category>
      <category>중지</category>
      <category>피아노 배우기</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3575</guid>
      <comments>https://ehclub.tistory.com/3575#entry3575comment</comments>
      <pubDate>Thu, 16 Jul 2026 15:43:00 +0900</pubDate>
    </item>
    <item>
      <title>고전을 노래하다. 공무도하가, 서동요</title>
      <link>https://ehclub.tistory.com/3574</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=ToSRnNbybhw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/deX6mK/dJMb9aKRbv9/MPK8aR7b2TMW4Mh2a5fBxK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/jnrss/dJMb8U85WUB/QvsyFYuMPfMTLzUMZkXXU1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cbCW6b/dJMb8VNHZz7/aCKCrSJPMWDrlzIa1bX3T0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;공무도하가&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ToSRnNbybhw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/xxJDa_4sK2Q&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/D0DEH/dJMb81f4O7v/gEXj89qciA2AqmKD2DilBK/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/65HfE/dJMb9efp84Q/KgUa2Vfk0gUO7ZUbpUPbok/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;서동요 - 서동과 선화 공주 이야기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/xxJDa_4sK2Q&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 발전 속도가 후덜덜합니다.&lt;/p&gt;</description>
      <category>유튜브 - 언제나 휴일 이야기</category>
      <category>공무도하가</category>
      <category>서동요</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3574</guid>
      <comments>https://ehclub.tistory.com/3574#entry3574comment</comments>
      <pubDate>Mon, 13 Jul 2026 21:41:53 +0900</pubDate>
    </item>
    <item>
      <title>쌍둥이 판다 언니 루이바오는 '슬기로운 보물'이예요.</title>
      <link>https://ehclub.tistory.com/3573</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2023년&amp;nbsp;7월&amp;nbsp;7일&amp;nbsp;에버랜드에서&amp;nbsp;엄마&amp;nbsp;아이바오와&amp;nbsp;아빠&amp;nbsp;러바오&amp;nbsp;사이에서&amp;nbsp;태어난&amp;nbsp;판다는&amp;nbsp;쌍둥이&amp;nbsp;판다입니다. &lt;br /&gt;루이바오와&amp;nbsp;후이바오가&amp;nbsp;그&amp;nbsp;주인공이죠.&amp;nbsp;푸바오의&amp;nbsp;동생&amp;nbsp;판다들이죠. &lt;br /&gt;&lt;br /&gt;쌍둥이&amp;nbsp;판다&amp;nbsp;중에&amp;nbsp;언니는&amp;nbsp;루이바오에요.&amp;nbsp; &lt;br /&gt;태어날&amp;nbsp;때는&amp;nbsp;180g의&amp;nbsp;아주&amp;nbsp;작은&amp;nbsp;사랑스러운&amp;nbsp;판다였죠.&amp;nbsp; &lt;br /&gt;루이바오라는&amp;nbsp;이름은&amp;nbsp;'슬기로운&amp;nbsp;보물'이라는&amp;nbsp;뜻을&amp;nbsp;가지고&amp;nbsp;있어요. &lt;br /&gt;동생&amp;nbsp;후이바오에&amp;nbsp;비해&amp;nbsp;상대적으로&amp;nbsp;얌전하고&amp;nbsp;차분한&amp;nbsp;성격이예요.&amp;nbsp; &lt;br /&gt;그리고&amp;nbsp;2025년&amp;nbsp;9월부터&amp;nbsp;엄마&amp;nbsp;아이바오와&amp;nbsp;분리하여&amp;nbsp;동생&amp;nbsp;후이바오와&amp;nbsp;함께&amp;nbsp;'판다&amp;nbsp;세컨하우스'에서&amp;nbsp;독립&amp;nbsp;생활을&amp;nbsp;하고&amp;nbsp;있어요. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/shorts/WEXFISM690o&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/gudDX/dJMb9aKAJ1t/lb3bZ0yR8Y5ZhKQi0MEG7k/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bb3Kjk/dJMb86nTaV1/Uvej7wCaxvrCwx1UQCK6A0/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720,https://scrap.kakaocdn.net/dn/bMON4H/dJMb83SesG9/24Ozy3EqRwSMWrLGDusy7k/img.jpg?width=405&amp;amp;height=720&amp;amp;face=0_0_405_720&quot; data-video-width=&quot;405&quot; data-video-height=&quot;720&quot; data-video-origin-width=&quot;405&quot; data-video-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;슬기로운보물 루이바오 in Everland #판다월드#쌍둥이판다#귀여운동물&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/WEXFISM690o&quot; width=&quot;405&quot; height=&quot;720&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;슬기로운 보물 루이바오&lt;/figcaption&gt;
&lt;/figure&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>
      <category>판다월드</category>
      <category>푸바오동생</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3573</guid>
      <comments>https://ehclub.tistory.com/3573#entry3573comment</comments>
      <pubDate>Sun, 8 Feb 2026 10:00:11 +0900</pubDate>
    </item>
    <item>
      <title>기쁨을 주는 보물, 아빠 판다 러바오</title>
      <link>https://ehclub.tistory.com/3572</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아빠&amp;nbsp;판다&amp;nbsp;러바오(Le&amp;nbsp;Bao)는&amp;nbsp;엄마&amp;nbsp;판다&amp;nbsp;아이바오와&amp;nbsp;함께&amp;nbsp;푸바오를&amp;nbsp;낳았습니다. &lt;br /&gt;그리고&amp;nbsp;쌍둥이&amp;nbsp;자매인&amp;nbsp;루이바오,&amp;nbsp;후이바오를&amp;nbsp;둔&amp;nbsp;든든한&amp;nbsp;아빠&amp;nbsp;판다죠. &lt;br /&gt;&lt;br /&gt;2012년&amp;nbsp;7월&amp;nbsp;28일&amp;nbsp;생이며&amp;nbsp;한중&amp;nbsp;양국&amp;nbsp;간&amp;nbsp;협의에&amp;nbsp;의해&amp;nbsp;2031년까지&amp;nbsp;에버랜드에&amp;nbsp;머물&amp;nbsp;것으로&amp;nbsp;알려져&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;러바오는&amp;nbsp;'기쁨을&amp;nbsp;주는&amp;nbsp;보물'이라는&amp;nbsp;뜻으로&amp;nbsp;밝은&amp;nbsp;성격에&amp;nbsp;장난기가&amp;nbsp;많은&amp;nbsp;자이언트&amp;nbsp;판다입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/_OUPy0Sf9Xk&quot; width=&quot;429&quot; height=&quot;763&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&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>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3572</guid>
      <comments>https://ehclub.tistory.com/3572#entry3572comment</comments>
      <pubDate>Sun, 4 Jan 2026 03:46:44 +0900</pubDate>
    </item>
    <item>
      <title>사랑스러운 보물, 엄마 판다 아이바오</title>
      <link>https://ehclub.tistory.com/3571</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;귀여운&amp;nbsp;엄마&amp;nbsp;판다인&amp;nbsp;아이바오는&amp;nbsp;대한민국&amp;nbsp;에버랜드&amp;nbsp;주토피아의&amp;nbsp;판다월드에&amp;nbsp;살고&amp;nbsp;있어요. &lt;br /&gt;&lt;br /&gt;2013년&amp;nbsp;7월&amp;nbsp;13일에&amp;nbsp;중국&amp;nbsp;야안&amp;nbsp;비펑샤에서&amp;nbsp;태어났으며&amp;nbsp;아빠&amp;nbsp;판다&amp;nbsp;러바오&amp;nbsp;사이에서&amp;nbsp;인기&amp;nbsp;최고인&amp;nbsp;푸바오를&amp;nbsp;낳았습니다. &lt;br /&gt;그리고&amp;nbsp;푸바오&amp;nbsp;동생으로&amp;nbsp;쌍둥이&amp;nbsp;자매인&amp;nbsp;루이바오와&amp;nbsp;후이바오를&amp;nbsp;낳았지요. &lt;br /&gt;&lt;br /&gt;2026년&amp;nbsp;현재&amp;nbsp;푸바오는&amp;nbsp;중국에&amp;nbsp;돌아갔고&amp;nbsp;아빠판다인&amp;nbsp;러바오와&amp;nbsp;쌍두이&amp;nbsp;판다인&amp;nbsp;루이바오와&amp;nbsp;후이바오와&amp;nbsp;함께&amp;nbsp;에버랜드에&amp;nbsp;살고&amp;nbsp;있어요. &lt;br /&gt;&lt;br /&gt;참고로&amp;nbsp;아이바오는&amp;nbsp;'사랑스러운&amp;nbsp;보물'이라는&amp;nbsp;뜻을&amp;nbsp;가지고&amp;nbsp;있어요.&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/cWlfnktgLKA&quot; width=&quot;429&quot; height=&quot;763&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&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://ehclub.tistory.com/3571</guid>
      <comments>https://ehclub.tistory.com/3571#entry3571comment</comments>
      <pubDate>Thu, 1 Jan 2026 17:54:15 +0900</pubDate>
    </item>
    <item>
      <title>코타키나발루 요트에서 Sunset 감상[말레이시아 여행]</title>
      <link>https://ehclub.tistory.com/3569</link>
      <description>&lt;p id=&quot;SE-866b9388-6242-4389-b162-15899c7c57d5&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;코타키나발루는 말레이시아의 아름다운 도시입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-08946e8f-878c-439a-9678-efa72ab3fdad&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;키나발루 산이 유명하여 코타키나발루라고 하네요. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a27e1e32-e330-4752-b0df-06be9ba2ed66&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;하지만 우리는 대부분 해변에서 일정을 보내죠. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-41235dbd-ee93-452d-bf3f-39eff78b1f3c&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;그 중에 빼 놓을 수 없는 게 Sunset이죠. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8173f3d1-be5e-468b-ad30-b408eea6d727&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;그리고 요트에서 Sunset은 그 중에 일품입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f9a2ebf8-02e8-4fd5-a9c0-f82c9bde59b7&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;같이 한 번 보시죠.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;&lt;a href=&quot;https://youtu.be/jZobaiwjUnE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/jZobaiwjUnE&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=jZobaiwjUnE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/OthAZ/hyXSC8Ku1B/r7ILKKrmTW3V0zGBCx6KV1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cCawTh/hyXWx5N8Db/dTYuQpgRYyzMrHo9vvhOSk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;코타키나발루 요트에서 Sunset  감상 [말레이시아 여행]#럭셔리하게&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/jZobaiwjUnE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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>Sunset</category>
      <category>가볼만한곳</category>
      <category>럭셔리</category>
      <category>말레이시아</category>
      <category>여행</category>
      <category>요트</category>
      <category>코타키나발루</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3569</guid>
      <comments>https://ehclub.tistory.com/3569#entry3569comment</comments>
      <pubDate>Fri, 10 Jan 2025 13:00:59 +0900</pubDate>
    </item>
    <item>
      <title>Yeonginsan Natural Forest [Asan city]</title>
      <link>https://ehclub.tistory.com/3570</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=_K7S6htRfAc&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/diGEbJ/hyXWsqqVgk/OWKhA0Rl7Ky0J0Jv1zECn0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/mYrx6/hyXWnbCIS2/TrMrxKuzAkhuLgJRmsUSq0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;When you want to relieve your physical and mental fatigue, go to Younginsan Natural Forest!&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/_K7S6htRfAc&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;Yeonginsan Natural Forest [Asan city]&lt;/figcaption&gt;
&lt;/figure&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-filename=&quot;Y01.JPG&quot; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwSsGC/btsLCD64Lvs/vuWDqQXOU4m1fF796TuFkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwSsGC/btsLCD64Lvs/vuWDqQXOU4m1fF796TuFkK/img.jpg&quot; data-alt=&quot;Yeonginsan Natural Forest&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwSsGC/btsLCD64Lvs/vuWDqQXOU4m1fF796TuFkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwSsGC%2FbtsLCD64Lvs%2FvuWDqQXOU4m1fF796TuFkK%2Fimg.jpg&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;3200&quot; height=&quot;2128&quot; data-filename=&quot;Y01.JPG&quot; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Yeonginsan Natural Forest&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageslideblock alignCenter&quot; data-image=&quot;[{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/cVEFeb/btsLCY4ag9U/UY1v8y5OZbMTISpuKDw1FK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/U4lbJ/btsLDd07ckv/dCUKPXpPNPX0aiaunkt8K0/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/nErH3/btsLDIzyERQ/h62vk05Wxvm3ssqg8Sk9s0/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/PEajB/btsLEotPjXJ/kIhRJKYw3KZKrHACzhZA01/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/lKPk9/btsLE3pcnpA/XyOBMkDwtUW5ftUWWWlkk1/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/b6B6tp/btsLDmDxz7D/fjNKg1VP4iJw5KDYJBidQ0/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/xUgFy/btsLC7zOyfW/OY2huEBVMUHFStT5cXYs6K/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/U0Zl5/btsLE3JuYlL/wYQkQvyk4wH7DqK8wLEffk/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/nfaiy/btsLFd6d89W/Lpur924Zt525uLvTA6YCIK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/boxA6D/btsLCZ282fF/tXQfL7MNJkaOZ9l4kW669K/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/wHKbQ/btsLDeyRWHM/EvRcwYykcOrBdARzwAbOHK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/n3i4M/btsLDwF8xST/f9WgDkrPfVvHwZ7YJKng8K/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/cJlq0H/btsLEN7W2y5/J9hIVYGbTbdKXuHIuTYgh1/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/bhFgXf/btsLDeMtw0X/tn7e7ErzvYwiCFACNP6h81/img.jpg&amp;quot;}]&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span class=&quot;image-wrap selected&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVEFeb/btsLCY4ag9U/UY1v8y5OZbMTISpuKDw1FK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/cVEFeb/btsLCY4ag9U/UY1v8y5OZbMTISpuKDw1FK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVEFeb/btsLCY4ag9U/UY1v8y5OZbMTISpuKDw1FK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVEFeb%2FbtsLCY4ag9U%2FUY1v8y5OZbMTISpuKDw1FK%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U4lbJ/btsLDd07ckv/dCUKPXpPNPX0aiaunkt8K0/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/U4lbJ/btsLDd07ckv/dCUKPXpPNPX0aiaunkt8K0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U4lbJ/btsLDd07ckv/dCUKPXpPNPX0aiaunkt8K0/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU4lbJ%2FbtsLDd07ckv%2FdCUKPXpPNPX0aiaunkt8K0%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nErH3/btsLDIzyERQ/h62vk05Wxvm3ssqg8Sk9s0/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/nErH3/btsLDIzyERQ/h62vk05Wxvm3ssqg8Sk9s0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nErH3/btsLDIzyERQ/h62vk05Wxvm3ssqg8Sk9s0/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnErH3%2FbtsLDIzyERQ%2Fh62vk05Wxvm3ssqg8Sk9s0%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PEajB/btsLEotPjXJ/kIhRJKYw3KZKrHACzhZA01/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/PEajB/btsLEotPjXJ/kIhRJKYw3KZKrHACzhZA01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PEajB/btsLEotPjXJ/kIhRJKYw3KZKrHACzhZA01/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPEajB%2FbtsLEotPjXJ%2FkIhRJKYw3KZKrHACzhZA01%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lKPk9/btsLE3pcnpA/XyOBMkDwtUW5ftUWWWlkk1/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/lKPk9/btsLE3pcnpA/XyOBMkDwtUW5ftUWWWlkk1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lKPk9/btsLE3pcnpA/XyOBMkDwtUW5ftUWWWlkk1/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlKPk9%2FbtsLE3pcnpA%2FXyOBMkDwtUW5ftUWWWlkk1%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6B6tp/btsLDmDxz7D/fjNKg1VP4iJw5KDYJBidQ0/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/b6B6tp/btsLDmDxz7D/fjNKg1VP4iJw5KDYJBidQ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6B6tp/btsLDmDxz7D/fjNKg1VP4iJw5KDYJBidQ0/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6B6tp%2FbtsLDmDxz7D%2FfjNKg1VP4iJw5KDYJBidQ0%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xUgFy/btsLC7zOyfW/OY2huEBVMUHFStT5cXYs6K/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/xUgFy/btsLC7zOyfW/OY2huEBVMUHFStT5cXYs6K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xUgFy/btsLC7zOyfW/OY2huEBVMUHFStT5cXYs6K/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxUgFy%2FbtsLC7zOyfW%2FOY2huEBVMUHFStT5cXYs6K%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U0Zl5/btsLE3JuYlL/wYQkQvyk4wH7DqK8wLEffk/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/U0Zl5/btsLE3JuYlL/wYQkQvyk4wH7DqK8wLEffk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U0Zl5/btsLE3JuYlL/wYQkQvyk4wH7DqK8wLEffk/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU0Zl5%2FbtsLE3JuYlL%2FwYQkQvyk4wH7DqK8wLEffk%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nfaiy/btsLFd6d89W/Lpur924Zt525uLvTA6YCIK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/nfaiy/btsLFd6d89W/Lpur924Zt525uLvTA6YCIK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nfaiy/btsLFd6d89W/Lpur924Zt525uLvTA6YCIK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnfaiy%2FbtsLFd6d89W%2FLpur924Zt525uLvTA6YCIK%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boxA6D/btsLCZ282fF/tXQfL7MNJkaOZ9l4kW669K/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/boxA6D/btsLCZ282fF/tXQfL7MNJkaOZ9l4kW669K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boxA6D/btsLCZ282fF/tXQfL7MNJkaOZ9l4kW669K/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboxA6D%2FbtsLCZ282fF%2FtXQfL7MNJkaOZ9l4kW669K%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wHKbQ/btsLDeyRWHM/EvRcwYykcOrBdARzwAbOHK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/wHKbQ/btsLDeyRWHM/EvRcwYykcOrBdARzwAbOHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wHKbQ/btsLDeyRWHM/EvRcwYykcOrBdARzwAbOHK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwHKbQ%2FbtsLDeyRWHM%2FEvRcwYykcOrBdARzwAbOHK%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n3i4M/btsLDwF8xST/f9WgDkrPfVvHwZ7YJKng8K/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/n3i4M/btsLDwF8xST/f9WgDkrPfVvHwZ7YJKng8K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n3i4M/btsLDwF8xST/f9WgDkrPfVvHwZ7YJKng8K/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn3i4M%2FbtsLDwF8xST%2Ff9WgDkrPfVvHwZ7YJKng8K%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJlq0H/btsLEN7W2y5/J9hIVYGbTbdKXuHIuTYgh1/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/cJlq0H/btsLEN7W2y5/J9hIVYGbTbdKXuHIuTYgh1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJlq0H/btsLEN7W2y5/J9hIVYGbTbdKXuHIuTYgh1/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJlq0H%2FbtsLEN7W2y5%2FJ9hIVYGbTbdKXuHIuTYgh1%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhFgXf/btsLDeMtw0X/tn7e7ErzvYwiCFACNP6h81/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/bhFgXf/btsLDeMtw0X/tn7e7ErzvYwiCFACNP6h81/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhFgXf/btsLDeMtw0X/tn7e7ErzvYwiCFACNP6h81/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhFgXf%2FbtsLDeMtw0X%2Ftn7e7ErzvYwiCFACNP6h81%2Fimg.jpg&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; data-origin-width=&quot;3200&quot; data-origin-height=&quot;2128&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;button class=&quot;btn btn-prev&quot;&gt;&lt;span class=&quot;ico-prev&quot;&gt;이전&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;btn btn-next&quot;&gt;&lt;span class=&quot;ico-next&quot;&gt;다음&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;
  &lt;div class=&quot;mark&quot;&gt;&lt;span data-index=&quot;0&quot;&gt;0&lt;/span&gt;&lt;span data-index=&quot;1&quot;&gt;1&lt;/span&gt;&lt;span data-index=&quot;2&quot;&gt;2&lt;/span&gt;&lt;span data-index=&quot;3&quot;&gt;3&lt;/span&gt;&lt;span data-index=&quot;4&quot;&gt;4&lt;/span&gt;&lt;span data-index=&quot;5&quot;&gt;5&lt;/span&gt;&lt;span data-index=&quot;6&quot;&gt;6&lt;/span&gt;&lt;span data-index=&quot;7&quot;&gt;7&lt;/span&gt;&lt;span data-index=&quot;8&quot;&gt;8&lt;/span&gt;&lt;span data-index=&quot;9&quot;&gt;9&lt;/span&gt;&lt;span data-index=&quot;10&quot;&gt;10&lt;/span&gt;&lt;span data-index=&quot;11&quot;&gt;11&lt;/span&gt;&lt;span data-index=&quot;12&quot;&gt;12&lt;/span&gt;&lt;span data-index=&quot;13&quot;&gt;13&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Gallery&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>여행/Travel in Korea</category>
      <category>asan city</category>
      <category>Republic of Korea</category>
      <category>travel</category>
      <category>yeonginsan natural forest</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3570</guid>
      <comments>https://ehclub.tistory.com/3570#entry3570comment</comments>
      <pubDate>Sun, 5 Jan 2025 07:32:24 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 잊지말자. #유관순길#역사문화둘레길 2코스 2.17km #유관순열사기념관#유관순생가지#조병옥생가지</title>
      <link>https://ehclub.tistory.com/3568</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=NmL5NNhIY2s&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cLO5iO/hyXWogFO98/vvzapPP6ToSeMvWNaIUTak/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=694_320_738_368,https://scrap.kakaocdn.net/dn/bT6QI4/hyXSwtSO7J/IwEUPB9i37DRIIce691wBK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=694_320_738_368&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 잊지말자. #유관순길#역사문화둘레길 2코스 2.17km #유관순열사기념관#유관순생가지#&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NmL5NNhIY2s&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;유관순길 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;역사문화둘레길 산책 2코스로 유관순길이라 부릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;DSC_6280.JPG&quot; data-origin-width=&quot;4928&quot; data-origin-height=&quot;3280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0lt1c/btsLCmJWsjd/Dh9ojBBQlVxEKlckl2lW60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0lt1c/btsLCmJWsjd/Dh9ojBBQlVxEKlckl2lW60/img.jpg&quot; data-alt=&quot;역사문화둘레길&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0lt1c/btsLCmJWsjd/Dh9ojBBQlVxEKlckl2lW60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0lt1c%2FbtsLCmJWsjd%2FDh9ojBBQlVxEKlckl2lW60%2Fimg.jpg&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;4928&quot; height=&quot;3280&quot; data-filename=&quot;DSC_6280.JPG&quot; data-origin-width=&quot;4928&quot; data-origin-height=&quot;3280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;역사문화둘레길&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;유관순사적지에서 출발하여 유관순생가지를 거쳐 조병옥생가지까지 2.17km입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;둘레길에 인도가 좁은 곳이 많은 것이 너무 소홀한 것은 아닌지 독립운동가들에게 미안합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%ED%83%91%EC%9B%90%EB%A6%AC%20252&amp;amp;addtype=1&amp;amp;confirmid=8036605&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A568845%2C%22mapCenterY%22%3A906023%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A568847%2C%22y%22%3A906025%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%EA%B8%B0%EB%85%90%EA%B4%80%22%2C%22confirmid%22%3A8036605%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=568845&amp;amp;mapY=906023&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=041-564-1223&amp;amp;title=%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%EA%B8%B0%EB%85%90%EA%B4%80&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735771312826&quot; id=&quot;maps_1735771312826&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%ED%83%91%EC%9B%90%EB%A6%AC%20252&amp;amp;addtype=1&amp;amp;confirmid=8036605&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A568845%2C%22mapCenterY%22%3A906023%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A568847%2C%22y%22%3A906025%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%EA%B8%B0%EB%85%90%EA%B4%80%22%2C%22confirmid%22%3A8036605%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=568845&amp;amp;mapY=906023&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=041-564-1223&amp;amp;title=%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%EA%B8%B0%EB%85%90%EA%B4%80&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=568845%2C906023&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A568847%2C906025&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%EC%9A%A9%EB%91%90%EB%A6%AC%20338-1&amp;amp;addtype=1&amp;amp;confirmid=8041435&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A570750%2C%22mapCenterY%22%3A905368%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A570750%2C%22y%22%3A905371%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%20%EC%83%9D%EA%B0%80%22%2C%22confirmid%22%3A8041435%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=570750&amp;amp;mapY=905368&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=&amp;amp;title=%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%20%EC%83%9D%EA%B0%80&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735771339160&quot; id=&quot;maps_1735771339160&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%EC%9A%A9%EB%91%90%EB%A6%AC%20338-1&amp;amp;addtype=1&amp;amp;confirmid=8041435&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A570750%2C%22mapCenterY%22%3A905368%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A570750%2C%22y%22%3A905371%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%20%EC%83%9D%EA%B0%80%22%2C%22confirmid%22%3A8041435%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=570750&amp;amp;mapY=905368&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=&amp;amp;title=%EC%9C%A0%EA%B4%80%EC%88%9C%EC%97%B4%EC%82%AC%20%EC%83%9D%EA%B0%80&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=570750%2C905368&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A570750%2C905371&quot;&gt;&lt;/iframe&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;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%EC%9A%A9%EB%91%90%EB%A6%AC%20261-6&amp;amp;addtype=1&amp;amp;confirmid=25032309&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A570270%2C%22mapCenterY%22%3A903748%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A570273%2C%22y%22%3A903753%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%A1%B0%EB%B3%91%EC%98%A5%EB%B0%95%EC%82%AC%20%EC%83%9D%EA%B0%80%22%2C%22confirmid%22%3A25032309%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=570270&amp;amp;mapY=903748&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=&amp;amp;title=%EC%A1%B0%EB%B3%91%EC%98%A5%EB%B0%95%EC%82%AC%20%EC%83%9D%EA%B0%80&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735771375788&quot; id=&quot;maps_1735771375788&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%B3%91%EC%B2%9C%EB%A9%B4%20%EC%9A%A9%EB%91%90%EB%A6%AC%20261-6&amp;amp;addtype=1&amp;amp;confirmid=25032309&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A570270%2C%22mapCenterY%22%3A903748%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A570273%2C%22y%22%3A903753%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%A1%B0%EB%B3%91%EC%98%A5%EB%B0%95%EC%82%AC%20%EC%83%9D%EA%B0%80%22%2C%22confirmid%22%3A25032309%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=570270&amp;amp;mapY=903748&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413136000&amp;amp;tel=&amp;amp;title=%EC%A1%B0%EB%B3%91%EC%98%A5%EB%B0%95%EC%82%AC%20%EC%83%9D%EA%B0%80&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=570270%2C903748&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A570273%2C903753&quot;&gt;&lt;/iframe&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;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;배경음악 출처 compose&amp;amp;illust - 50mang &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;MP3 Download - &lt;a href=&quot;https://50mang.bandcamp.com/track/--3&quot;&gt;https://50mang.bandcamp.com/track/--3&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>역사문화둘레길</category>
      <category>유관순생가지</category>
      <category>유관순열사기념관</category>
      <category>조병옥생가지</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3568</guid>
      <comments>https://ehclub.tistory.com/3568#entry3568comment</comments>
      <pubDate>Thu, 2 Jan 2025 07:43:14 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 독립기념관 산책</title>
      <link>https://ehclub.tistory.com/3567</link>
      <description>&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;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=PKjo1MIeqaQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bFE2F2/hyXWvgpPG0/q7ZHtn3Z2WVRD7FevBjnh1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/hcjkk/hyXWxedK5O/tIQTS51NNOgnNRlUoMh9JK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;There is a place I go to when I am having a hard time  It is the Independence Hall of Korea.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/PKjo1MIeqaQ&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-0986728f-3db8-4d11-89c3-27dc4e48cc62&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;이용 시간 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;09:30~18:00 (3월~10월) , 17:00시까지 입장 가능합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-97f207d6-03f0-4a23-a2ce-f7aeac3bc74d&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;09:30~17:00 (11월~2월), 16:00시까지 입장 가능합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-f081b2f8-c2ee-464c-b777-f83080e13bb2&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;휴관일&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8c420130-b4b8-4ba1-afb8-91db88d51b6c&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;매주 월요일(공휴일일 때는 개관) 상설전시관 외 야외전시, 쉼터 등은 개방합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-23327eed-26bd-498b-a9da-54f116077e1f&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7c2ff2bf-b318-4eb9-b1e4-ffe46e6c2437&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;입장료 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d5f0934e-301d-4075-9978-1e5e1e5a5e9d&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;무료 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-67488be8-78e0-460d-bd81-cbe4b889b747&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-82f81883-1224-48e5-911b-d196db5e6211&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;주차료 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a8801b49-8d77-4b53-b8c2-e18c210c676a&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;소형(2000원), 대형(3000원), 감면(1000원), 국가 유공자(면재)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b2c7f2f3-2659-4b77-90cb-7bd9c9b529e0&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0d0d0d;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d8d3bedc-baec-4b09-8882-989283c509b1&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;감면 대상은 장애인, 국가유공자 가족, 경차, 하이브리드카, 저공해차, 병역이행 명문가 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8328614a-2381-45a9-bd50-a8e00a03125e&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d;&quot;&gt;주차료는 1일 기준입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%AA%A9%EC%B2%9C%EC%9D%8D%20%EB%82%A8%ED%99%94%EB%A6%AC%20230-1&amp;amp;addtype=1&amp;amp;confirmid=7834305&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A549720%2C%22mapCenterY%22%3A912568%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A549722%2C%22y%22%3A912572%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%8F%85%EB%A6%BD%EA%B8%B0%EB%85%90%EA%B4%80%22%2C%22confirmid%22%3A7834305%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=549720&amp;amp;mapY=912568&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413125000&amp;amp;tel=041-560-0114&amp;amp;title=%EB%8F%85%EB%A6%BD%EA%B8%B0%EB%85%90%EA%B4%80&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735687951689&quot; id=&quot;maps_1735687951689&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EB%AA%A9%EC%B2%9C%EC%9D%8D%20%EB%82%A8%ED%99%94%EB%A6%AC%20230-1&amp;amp;addtype=1&amp;amp;confirmid=7834305&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A549720%2C%22mapCenterY%22%3A912568%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A549722%2C%22y%22%3A912572%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%8F%85%EB%A6%BD%EA%B8%B0%EB%85%90%EA%B4%80%22%2C%22confirmid%22%3A7834305%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=549720&amp;amp;mapY=912568&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413125000&amp;amp;tel=041-560-0114&amp;amp;title=%EB%8F%85%EB%A6%BD%EA%B8%B0%EB%85%90%EA%B4%80&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=549720%2C912568&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A549722%2C912572&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>꼭 가봐야 할 곳</category>
      <category>독립기념관</category>
      <category>충남 천안</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3567</guid>
      <comments>https://ehclub.tistory.com/3567#entry3567comment</comments>
      <pubDate>Wed, 1 Jan 2025 08:33:38 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 잊지말자. #대한독립만세길 #역사문화둘레길산책 1코스 1.37km#병천사거리#유관순열사기념관</title>
      <link>https://ehclub.tistory.com/3566</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/6hCWNYy56qA&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/6hCWNYy56qA&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=6hCWNYy56qA&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cKCwkZ/hyXSDM6cSN/uPhs6anTRe7Xue7bkcKo0K/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/x3Oeh/hyXSDGnivR/smH5jmHlWqUS5GUeePe5kK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 잊지말자. #대한독립만세길 #역사문화둘레길산책 1코스 1.37km#병천사거리#유관순열사&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/6hCWNYy56qA&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;대한독립만세길&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&lt;br /&gt;안녕하세요. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;이번 산책은 역사문화둘레길 산책입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;총 8코스로 이루어져 있는데 이번 산책은 1코스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;1코스는 대한독립운동길로 불리며 병천사거리에서 유관순사적지까지입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;병천사거리에서 아우리순대길, 충절로, 탑원교차로, 유관순길을 걸어 유관순사적지까지 총 1.37km입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;유관순길을 제외한 나머지 길은 걷는데 편안한 길은 아닙니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;인트로.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJvTh/btsLCF3iVBb/6KmGWPDYBaUisKKNZWAdGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJvTh/btsLCF3iVBb/6KmGWPDYBaUisKKNZWAdGK/img.jpg&quot; data-alt=&quot;대한독립만세길 - 아우내 독립만세운동 기념공원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJvTh/btsLCF3iVBb/6KmGWPDYBaUisKKNZWAdGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJvTh%2FbtsLCF3iVBb%2F6KmGWPDYBaUisKKNZWAdGK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;인트로.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대한독립만세길 - 아우내 독립만세운동 기념공원&lt;/figcaption&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;배경 음악 출처 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;compose&amp;amp;illust - 50mang MP3 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;Download - &lt;a href=&quot;https://50mang.bandcamp.com/track/--3&quot;&gt;https://50mang.bandcamp.com/track/--3&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1735647008745&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;song&quot; data-og-title=&quot;삼월의 염원, by 50mang&quot; data-og-description=&quot;track by 50mang&quot; data-og-host=&quot;50mang.bandcamp.com&quot; data-og-source-url=&quot;https://50mang.bandcamp.com/track/--3&quot; data-og-url=&quot;https://50mang.bandcamp.com/track/--3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CATzW/hyXWnBSaLq/1IQPpi2XJfRuPBcqaMDIE1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/dh2eUR/hyXSuvUigE/BDztKSa1SfvbmakKNADcB1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/bMwpQx/hyXSvIl83F/hRccc3FbD2WUPUdDOxWpE1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700&quot;&gt;&lt;a href=&quot;https://50mang.bandcamp.com/track/--3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://50mang.bandcamp.com/track/--3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CATzW/hyXWnBSaLq/1IQPpi2XJfRuPBcqaMDIE1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/dh2eUR/hyXSuvUigE/BDztKSa1SfvbmakKNADcB1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/bMwpQx/hyXSvIl83F/hRccc3FbD2WUPUdDOxWpE1/img.jpg?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;삼월의 염원, by 50mang&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;track by 50mang&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;50mang.bandcamp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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>
      <category>충남</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3566</guid>
      <comments>https://ehclub.tistory.com/3566#entry3566comment</comments>
      <pubDate>Tue, 31 Dec 2024 21:12:02 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 직산삼은체육공원(직산저수지) 산책하기</title>
      <link>https://ehclub.tistory.com/3565</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=rFP07CAzq54&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Mf1n2/hyXSuvvgj8/nwEppdQfDO1PR83q7PCfUk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bdYdRR/hyXSELFR4l/RmVVEmsNztOYIaW2cooSQK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 직산삼은체육공원 산책(직산저수지)#직산#저수지#삼은공원#천안#산책&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/rFP07CAzq54&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[충남 천안] 직산삼은체육공원(직산저수지) 산책 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;안녕하세요. 언제나휴일이예요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;오늘 산책 코스는 충남 천안에 있는 직산삼은체육공원이예요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;직산저수지를 한 바퀴도는 산책로가 있으며 거리는 약 1300m(2000보)입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;주차 요금: 무료&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EC%84%9C%EB%B6%81%EA%B5%AC%20%EC%A7%81%EC%82%B0%EC%9D%8D%20%EC%82%BC%EC%9D%80%EB%A6%AC%20510&amp;amp;addtype=1&amp;amp;confirmid=1522494905&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A535200%2C%22mapCenterY%22%3A940048%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A535204%2C%22y%22%3A940051%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%82%BC%EC%9D%80%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A1522494905%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=535200&amp;amp;mapY=940048&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413325600&amp;amp;tel=&amp;amp;title=%EC%82%BC%EC%9D%80%EA%B3%B5%EC%9B%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735443312420&quot; id=&quot;maps_1735443312420&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EC%84%9C%EB%B6%81%EA%B5%AC%20%EC%A7%81%EC%82%B0%EC%9D%8D%20%EC%82%BC%EC%9D%80%EB%A6%AC%20510&amp;amp;addtype=1&amp;amp;confirmid=1522494905&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A535200%2C%22mapCenterY%22%3A940048%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A535204%2C%22y%22%3A940051%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%82%BC%EC%9D%80%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A1522494905%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=535200&amp;amp;mapY=940048&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413325600&amp;amp;tel=&amp;amp;title=%EC%82%BC%EC%9D%80%EA%B3%B5%EC%9B%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=535200%2C940048&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A535204%2C940051&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;직산저수지 주변은 도로와 아파트 단지 및 삼은체육공원이 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241209_102044.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df8iJ3/btsLB3bCMSf/mFgXTgKx7mhube67fY6P51/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df8iJ3/btsLB3bCMSf/mFgXTgKx7mhube67fY6P51/tfile.dat&quot; data-alt=&quot;직산저수지와 주변 아파트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df8iJ3/btsLB3bCMSf/mFgXTgKx7mhube67fY6P51/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf8iJ3%2FbtsLB3bCMSf%2FmFgXTgKx7mhube67fY6P51%2Ftfile.dat&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;4080&quot; height=&quot;3060&quot; data-filename=&quot;20241209_102044.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직산저수지와 주변 아파트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;산책로 절반 이상이 나무테크로 산책로를 만들어 놓았네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241209_102220.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbbZFb/btsLzDTwr1b/GZKKIZr5rLzGzOH0K7Zqf0/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbbZFb/btsLzDTwr1b/GZKKIZr5rLzGzOH0K7Zqf0/tfile.dat&quot; data-alt=&quot;직산저수지 둘레를 나무테크로 만든 산책로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbbZFb/btsLzDTwr1b/GZKKIZr5rLzGzOH0K7Zqf0/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbbZFb%2FbtsLzDTwr1b%2FGZKKIZr5rLzGzOH0K7Zqf0%2Ftfile.dat&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;4080&quot; height=&quot;3060&quot; data-filename=&quot;20241209_102220.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직산저수지 둘레를 나무테크로 만든 산책로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;중간 중간 쉴 곳도 많이 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241209_102229.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn6Cdy/btsLBhn9Bra/uW8nMqGjlALfHLIJCkcJT0/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn6Cdy/btsLBhn9Bra/uW8nMqGjlALfHLIJCkcJT0/tfile.dat&quot; data-alt=&quot;직산저수지 산책로에 있는 벤치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn6Cdy/btsLBhn9Bra/uW8nMqGjlALfHLIJCkcJT0/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn6Cdy%2FbtsLBhn9Bra%2FuW8nMqGjlALfHLIJCkcJT0%2Ftfile.dat&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;4080&quot; height=&quot;3060&quot; data-filename=&quot;20241209_102229.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직산저수지 산책로에 있는 벤치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;직산저수지 산책로에서 보는 뷰는 도시생활에 위로를 주는 것 같아요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20241209_102605.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dysGKA/btsLz2yEWol/wAQmQ4Ox8VlluLoIGCBBzK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dysGKA/btsLz2yEWol/wAQmQ4Ox8VlluLoIGCBBzK/tfile.dat&quot; data-alt=&quot;직산저수지 뷰&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dysGKA/btsLz2yEWol/wAQmQ4Ox8VlluLoIGCBBzK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdysGKA%2FbtsLz2yEWol%2FwAQmQ4Ox8VlluLoIGCBBzK%2Ftfile.dat&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;4080&quot; height=&quot;3060&quot; data-filename=&quot;20241209_102605.jpg&quot; data-origin-width=&quot;4080&quot; data-origin-height=&quot;3060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직산저수지 뷰&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;삼은체육공원은 여러 운동기구와 경기장 및 공연장, 주차장(무료)으로 구성하고 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[충남 천안] 직산삼은체육공원 인트로.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ADlSB/btsLz3LcnQP/KwHzD8ftibyAKfFQYHQxTK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ADlSB/btsLz3LcnQP/KwHzD8ftibyAKfFQYHQxTK/tfile.dat&quot; data-alt=&quot;삼은공원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ADlSB/btsLz3LcnQP/KwHzD8ftibyAKfFQYHQxTK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FADlSB%2FbtsLz3LcnQP%2FKwHzD8ftibyAKfFQYHQxTK%2Ftfile.dat&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[충남 천안] 직산삼은체육공원 인트로.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼은공원&lt;/figcaption&gt;
&lt;/figure&gt;
&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>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3565</guid>
      <comments>https://ehclub.tistory.com/3565#entry3565comment</comments>
      <pubDate>Mon, 30 Dec 2024 17:00:52 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 태조산공원 산책하기</title>
      <link>https://ehclub.tistory.com/3563</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=pgLsd5WpDQ4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bmRtMC/hyXSz4D0ZI/M5thQZTu7KUgiUPJBgPJeK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/Hju7l/hyXSyEGxzr/kIRQO8yVaCnwIUTbgLB7k0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 태조산공원 산책#태조산#공원#천안#산책&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/pgLsd5WpDQ4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[충남 천안] 태조산공원 산책하기 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;안녕하세요. 언제나휴일입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;오늘 산책은 충남 천안 태조산 공원입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;산책 거리는 약 1Km로 1500보 입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;i&gt;&lt;b&gt;* 러닝머신에서 보세요.*&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%9C%A0%EB%9F%89%EB%8F%99%206&amp;amp;addtype=1&amp;amp;confirmid=8571684&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A542665%2C%22mapCenterY%22%3A923658%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A542668%2C%22y%22%3A923662%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%83%9C%EC%A1%B0%EC%82%B0%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A8571684%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=542665&amp;amp;mapY=923658&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413153000&amp;amp;tel=041-529-5117&amp;amp;title=%ED%83%9C%EC%A1%B0%EC%82%B0%EA%B3%B5%EC%9B%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735443710357&quot; id=&quot;maps_1735443710357&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%9C%A0%EB%9F%89%EB%8F%99%206&amp;amp;addtype=1&amp;amp;confirmid=8571684&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A542665%2C%22mapCenterY%22%3A923658%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A542668%2C%22y%22%3A923662%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%83%9C%EC%A1%B0%EC%82%B0%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A8571684%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=542665&amp;amp;mapY=923658&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413153000&amp;amp;tel=041-529-5117&amp;amp;title=%ED%83%9C%EC%A1%B0%EC%82%B0%EA%B3%B5%EC%9B%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=542665%2C923658&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A542668%2C923662&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주차장 규모: 소형차 200대&lt;br /&gt;주차 요금(1일 기준)&lt;br /&gt;&amp;nbsp; &amp;nbsp;경차:1000원&lt;br /&gt;&amp;nbsp; &amp;nbsp;승용차/소형화물:3000원&lt;br /&gt;&amp;nbsp; &amp;nbsp;버스/대형화물/캠핑카:5000원&lt;br /&gt;&amp;nbsp; &amp;nbsp;30분 무료&lt;br /&gt;&amp;nbsp; &amp;nbsp;천안시민 4시간 무료&lt;br /&gt;&amp;nbsp; &amp;nbsp;저공해차량, 장애인, 그린카드 제시자 무료&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;충분한 주차장&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;걷기 좋은 산책로&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;운동장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;01_호수 뷰.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CGTfo/btsLBLvvDno/lKjWo80hzKoNFeT77vrR40/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CGTfo/btsLBLvvDno/lKjWo80hzKoNFeT77vrR40/img.jpg&quot; data-alt=&quot;공원 호수와 조형물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CGTfo/btsLBLvvDno/lKjWo80hzKoNFeT77vrR40/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCGTfo%2FbtsLBLvvDno%2FlKjWo80hzKoNFeT77vrR40%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;01_호수 뷰.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공원 호수와 조형물&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;02_잔디구장.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caHCy6/btsLBKDlhTa/vd03fg0R5FDEViFjJszosK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caHCy6/btsLBKDlhTa/vd03fg0R5FDEViFjJszosK/img.jpg&quot; data-alt=&quot;잔디 구장&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caHCy6/btsLBKDlhTa/vd03fg0R5FDEViFjJszosK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaHCy6%2FbtsLBKDlhTa%2Fvd03fg0R5FDEViFjJszosK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;02_잔디구장.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잔디 구장&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03_하천과 운동기구.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JpoWv/btsLCmvferu/hlEumO3CiuceZ7IeYKkkK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JpoWv/btsLCmvferu/hlEumO3CiuceZ7IeYKkkK1/img.jpg&quot; data-alt=&quot;운동기구와 하천&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JpoWv/btsLCmvferu/hlEumO3CiuceZ7IeYKkkK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJpoWv%2FbtsLCmvferu%2FhlEumO3CiuceZ7IeYKkkK1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;03_하천과 운동기구.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;운동기구와 하천&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>걷기 좋은 곳</category>
      <category>산책하기 좋은 곳</category>
      <category>주차요금</category>
      <category>주차장</category>
      <category>충남 천안</category>
      <category>태조산공원</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3563</guid>
      <comments>https://ehclub.tistory.com/3563#entry3563comment</comments>
      <pubDate>Mon, 30 Dec 2024 12:00:47 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 청수호수공원 산책하기</title>
      <link>https://ehclub.tistory.com/3562</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=yB2aWRt03m4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/iC8i0/hyXSCNLBcd/BWlkQgm5uF0gEWl0i4FUcK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bhD488/hyXSwz1Cry/iNcDSAXjRzhqghz21bx0p0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 청수호수공원 산책#청수호수공원#천안#산책&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/yB2aWRt03m4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;충남 천안 청수호수공원 산책하기 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;안녕하세요. 언제나휴일이예요. 오늘의 산책 코스는 충남 천안 청수 호수공원이예요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;공원 주차장(무료)에서 한 바퀴 산책합니다.(약 700m, 1000보)&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%B2%AD%EC%88%98%EB%8F%99%20270&amp;amp;addtype=1&amp;amp;confirmid=1456013616&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A533450%2C%22mapCenterY%22%3A913513%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A533450%2C%22y%22%3A913517%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%AD%EC%88%98%ED%98%B8%EC%88%98%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A1456013616%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=533450&amp;amp;mapY=913513&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413158000&amp;amp;tel=&amp;amp;title=%EC%B2%AD%EC%88%98%ED%98%B8%EC%88%98%EA%B3%B5%EC%9B%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735423462428&quot; id=&quot;maps_1735423462428&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%B2%AD%EC%88%98%EB%8F%99%20270&amp;amp;addtype=1&amp;amp;confirmid=1456013616&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A533450%2C%22mapCenterY%22%3A913513%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A533450%2C%22y%22%3A913517%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%AD%EC%88%98%ED%98%B8%EC%88%98%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A1456013616%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=533450&amp;amp;mapY=913513&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413158000&amp;amp;tel=&amp;amp;title=%EC%B2%AD%EC%88%98%ED%98%B8%EC%88%98%EA%B3%B5%EC%9B%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=533450%2C913513&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A533450%2C913517&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;충남 천안 청수지구에는 청수호수공원이 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;View1.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BDVns/btsLBrD0pDk/Jpmook1OHuYhpsi23jk4w1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BDVns/btsLBrD0pDk/Jpmook1OHuYhpsi23jk4w1/img.jpg&quot; data-alt=&quot;청수호수공원 View&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BDVns/btsLBrD0pDk/Jpmook1OHuYhpsi23jk4w1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBDVns%2FbtsLBrD0pDk%2FJpmook1OHuYhpsi23jk4w1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;View1.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;청수호수공원 View&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;산책로와 운동기구들이 있어 주변에 거주하시는 분들이 자주 산책하는 곳이예요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;View2.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uGN5j/btsLBKcf0fk/3Gi4tomaaL1M8e8IFDRK31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uGN5j/btsLBKcf0fk/3Gi4tomaaL1M8e8IFDRK31/img.jpg&quot; data-alt=&quot;청수호수공원 운동기구&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uGN5j/btsLBKcf0fk/3Gi4tomaaL1M8e8IFDRK31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuGN5j%2FbtsLBKcf0fk%2F3Gi4tomaaL1M8e8IFDRK31%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;View2.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;청수호수공원 운동기구&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;중간 중간에 포토포인트도 있네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;View3.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwmPch/btsLBIrXmXq/HkqLgWloOs6rvVcG5RiEgK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwmPch/btsLBIrXmXq/HkqLgWloOs6rvVcG5RiEgK/img.jpg&quot; data-alt=&quot;충남 천안 청수호수공원 포토포인트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwmPch/btsLBIrXmXq/HkqLgWloOs6rvVcG5RiEgK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwmPch%2FbtsLBIrXmXq%2FHkqLgWloOs6rvVcG5RiEgK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;View3.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;충남 천안 청수호수공원 포토포인트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>걷기 좋은 곳</category>
      <category>무료 주차장</category>
      <category>산책하기 좋은 곳</category>
      <category>청수호수공원</category>
      <category>충남 천안</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3562</guid>
      <comments>https://ehclub.tistory.com/3562#entry3562comment</comments>
      <pubDate>Mon, 30 Dec 2024 09:00:13 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 쌍용공원 산책하기</title>
      <link>https://ehclub.tistory.com/3561</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=DnOjZkcqF4A&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bQuqG9/hyXSAPWAcp/lanWxBbTQ1NkHzCIQX25eK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/qmFZb/hyXSv2bBrN/jWtQMTsyGLFtiWxVk8AozK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 쌍용공원 산책#천안#쌍용공원#산책&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/DnOjZkcqF4A&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;[충남 천안] 쌍용공원 산책하기 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 언제나휴일입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 산책은 충남 천안에 있는 쌍용공원입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;산책 길이는 약 700m로 1000보 가량입니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아쉬운 점은 공원 주차장이 없는 거예요.&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EC%84%9C%EB%B6%81%EA%B5%AC%20%EC%8C%8D%EC%9A%A9%EB%8F%99%20%EC%82%B0%2084&amp;amp;addtype=1&amp;amp;confirmid=17385003&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A529055%2C%22mapCenterY%22%3A920068%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A529057%2C%22y%22%3A920072%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%8C%8D%EC%9A%A9%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A17385003%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=529055&amp;amp;mapY=920068&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413355000&amp;amp;tel=&amp;amp;title=%EC%8C%8D%EC%9A%A9%EA%B3%B5%EC%9B%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735423117525&quot; id=&quot;maps_1735423117525&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EB%82%A8%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EC%84%9C%EB%B6%81%EA%B5%AC%20%EC%8C%8D%EC%9A%A9%EB%8F%99%20%EC%82%B0%2084&amp;amp;addtype=1&amp;amp;confirmid=17385003&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A529055%2C%22mapCenterY%22%3A920068%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A529057%2C%22y%22%3A920072%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%8C%8D%EC%9A%A9%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A17385003%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=529055&amp;amp;mapY=920068&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413355000&amp;amp;tel=&amp;amp;title=%EC%8C%8D%EC%9A%A9%EA%B3%B5%EC%9B%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=529055%2C920068&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A529057%2C920072&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;체육시설을 이용하는 분들도 많네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;V1.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p4HMg/btsLzsYqthK/0mlHXO0Ev35uzDK7ZfMue0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p4HMg/btsLzsYqthK/0mlHXO0Ev35uzDK7ZfMue0/img.jpg&quot; data-alt=&quot;충남 천안 쌍용공원 산책 - 체육시설&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p4HMg/btsLzsYqthK/0mlHXO0Ev35uzDK7ZfMue0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp4HMg%2FbtsLzsYqthK%2F0mlHXO0Ev35uzDK7ZfMue0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;V1.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;충남 천안 쌍용공원 산책 - 체육시설&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;공원을 둘러싼 길로 산책하는 분들도 많아요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v2.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFOmU/btsLAhWCHi8/qUk67KadmbqKGjktBvJZok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFOmU/btsLAhWCHi8/qUk67KadmbqKGjktBvJZok/img.jpg&quot; data-alt=&quot;쌍용공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFOmU/btsLAhWCHi8/qUk67KadmbqKGjktBvJZok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFOmU%2FbtsLAhWCHi8%2FqUk67KadmbqKGjktBvJZok%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v2.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v3.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNIUjB/btsLz1T6Aw3/7MaHtgZTkCNmkz4wPpmWHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNIUjB/btsLz1T6Aw3/7MaHtgZTkCNmkz4wPpmWHk/img.jpg&quot; data-alt=&quot;쌍용공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNIUjB/btsLz1T6Aw3/7MaHtgZTkCNmkz4wPpmWHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNIUjB%2FbtsLz1T6Aw3%2F7MaHtgZTkCNmkz4wPpmWHk%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v3.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;유명한 미술작품도 볼 수 있네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v4.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnjGu3/btsLBkrjXqN/80Ccvl65tLJJKMGY5lTvZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnjGu3/btsLBkrjXqN/80Ccvl65tLJJKMGY5lTvZ0/img.jpg&quot; data-alt=&quot;쌍용공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnjGu3/btsLBkrjXqN/80Ccvl65tLJJKMGY5lTvZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnjGu3%2FbtsLBkrjXqN%2F80Ccvl65tLJJKMGY5lTvZ0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v4.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v5.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiv9c9/btsLB2cFtUC/abA204YHEILvqNg42jXzlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiv9c9/btsLB2cFtUC/abA204YHEILvqNg42jXzlK/img.jpg&quot; data-alt=&quot;쌍용공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiv9c9/btsLB2cFtUC/abA204YHEILvqNg42jXzlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feiv9c9%2FbtsLB2cFtUC%2FabA204YHEILvqNg42jXzlK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v5.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v6.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b76mmn/btsLyVs0Lr1/i26yLFQOM00NUctjqFWSYK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b76mmn/btsLyVs0Lr1/i26yLFQOM00NUctjqFWSYK/img.jpg&quot; data-alt=&quot;쌍용공원산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b76mmn/btsLyVs0Lr1/i26yLFQOM00NUctjqFWSYK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb76mmn%2FbtsLyVs0Lr1%2Fi26yLFQOM00NUctjqFWSYK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v6.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;넓은 잔디밭도 있어요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v7.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FVzVS/btsLAiOTO7q/u4EnZVi02prhqTYHE7k0Sk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FVzVS/btsLAiOTO7q/u4EnZVi02prhqTYHE7k0Sk/img.jpg&quot; data-alt=&quot;쌍용공원 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FVzVS/btsLAiOTO7q/u4EnZVi02prhqTYHE7k0Sk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFVzVS%2FbtsLAiOTO7q%2Fu4EnZVi02prhqTYHE7k0Sk%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v7.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;공원에 화장실도 있답니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;v8.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu1V0g/btsLAgQ03SH/pNbt6qBkqHeXaOudKrPwAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu1V0g/btsLAgQ03SH/pNbt6qBkqHeXaOudKrPwAK/img.jpg&quot; data-alt=&quot;쌍용공원 화장실&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu1V0g/btsLAgQ03SH/pNbt6qBkqHeXaOudKrPwAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu1V0g%2FbtsLAgQ03SH%2FpNbt6qBkqHeXaOudKrPwAK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;v8.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쌍용공원 화장실&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>걷기 좋은 곳</category>
      <category>공원</category>
      <category>무료 화장실</category>
      <category>산책하기 좋은 곳</category>
      <category>쌍용공원</category>
      <category>충남 천안</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3561</guid>
      <comments>https://ehclub.tistory.com/3561#entry3561comment</comments>
      <pubDate>Sun, 29 Dec 2024 17:00:11 +0900</pubDate>
    </item>
    <item>
      <title>[충남 천안] 천안예술공원 산책하기</title>
      <link>https://ehclub.tistory.com/3559</link>
      <description>&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=I5lLXmPLeHw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/eOW2c/hyXSpOql58/c2SxfNeJq7uWONLjKD0070/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/sat70/hyXSD0fsEy/pAKcKlaEY3A84ud79GsE90/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[충남 천안] 천안예술공원 산책#천안#예술의전당#공원#산책&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/I5lLXmPLeHw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;천안예술공원 산책 동영상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 언제나휴일이예요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 산책은 충남 천안에 있는 천안예술공원입니다.&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EC%B6%A9%EC%B2%AD%EB%82%A8%EB%8F%84%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%84%B1%EB%82%A8%EB%A9%B4&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A550500%2C%22mapCenterY%22%3A905228%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A550500%2C%22y%22%3A905230%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%9C%EC%95%88%EC%98%88%EC%88%A0%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=550500&amp;amp;mapY=905228&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413134000&amp;amp;tel=&amp;amp;title=%EC%B2%9C%EC%95%88%EC%98%88%EC%88%A0%EA%B3%B5%EC%9B%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1735421017146&quot; id=&quot;maps_1735421017146&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EC%B6%A9%EC%B2%AD%EB%82%A8%EB%8F%84%20%EC%B2%9C%EC%95%88%EC%8B%9C%20%EB%8F%99%EB%82%A8%EA%B5%AC%20%EC%84%B1%EB%82%A8%EB%A9%B4&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A550500%2C%22mapCenterY%22%3A905228%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A550500%2C%22y%22%3A905230%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%26%23x2F%3B%26%23x2F%3Bt1.daumcdn.net%26%23x2F%3Blocalimg%26%23x2F%3Blocalimages%26%23x2F%3B07%26%23x2F%3B2012%26%23x2F%3Battach%26%23x2F%3Bpc_img%26%23x2F%3Bico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%9C%EC%95%88%EC%98%88%EC%88%A0%EA%B3%B5%EC%9B%90%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=550500&amp;amp;mapY=905228&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=4413134000&amp;amp;tel=&amp;amp;title=%EC%B2%9C%EC%95%88%EC%98%88%EC%88%A0%EA%B3%B5%EC%9B%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=550500%2C905228&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A550500%2C905230&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;천안 예술의전당에서 보이는 원형 교차로 내부가 천안예술공원이예요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이번 산책은 12분 정도로 약 1Km(1500보 남짓) 정도를 걷습니다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;천안 예술의전당에서 출발합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 0m56s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8VPAm/btsLADrot8O/DkM3xiJ9HbTR2enmaO0eok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8VPAm/btsLADrot8O/DkM3xiJ9HbTR2enmaO0eok/img.jpg&quot; data-alt=&quot;천안예술의전당에서 출발&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8VPAm/btsLADrot8O/DkM3xiJ9HbTR2enmaO0eok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8VPAm%2FbtsLADrot8O%2FDkM3xiJ9HbTR2enmaO0eok%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 0m56s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술의전당에서 출발&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;천안예술의전당에서 횡단보도를 건너면 천안예술공원이 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 1m35s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sd7Ve/btsLzYis5v0/EQKkhiHcEdJwtCNwpV8mUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sd7Ve/btsLzYis5v0/EQKkhiHcEdJwtCNwpV8mUk/img.jpg&quot; data-alt=&quot;천안예술공원 표지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sd7Ve/btsLzYis5v0/EQKkhiHcEdJwtCNwpV8mUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSd7Ve%2FbtsLzYis5v0%2FEQKkhiHcEdJwtCNwpV8mUk%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 1m35s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술공원 표지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;천안예술공원 표지를 지나 안내도가 있네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 1m50s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8BRS5/btsLBfKzlxR/zD2gfbaQZjdiXp8Jnytbi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8BRS5/btsLBfKzlxR/zD2gfbaQZjdiXp8Jnytbi1/img.jpg&quot; data-alt=&quot;천안예술공원 안내도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8BRS5/btsLBfKzlxR/zD2gfbaQZjdiXp8Jnytbi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8BRS5%2FbtsLBfKzlxR%2FzD2gfbaQZjdiXp8Jnytbi1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 1m50s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술공원 안내도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 2m16s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNjKoO/btsLAWq1fJd/Kknfg2MFjGvUAimcQKetD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNjKoO/btsLAWq1fJd/Kknfg2MFjGvUAimcQKetD0/img.jpg&quot; data-alt=&quot;천안예술공원 뷰1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNjKoO/btsLAWq1fJd/Kknfg2MFjGvUAimcQKetD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNjKoO%2FbtsLAWq1fJd%2FKknfg2MFjGvUAimcQKetD0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 2m16s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술공원 뷰1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 3m17s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ob72H/btsLzBVw2gt/7kOYNSbJftNzygwVVEzwh1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ob72H/btsLzBVw2gt/7kOYNSbJftNzygwVVEzwh1/img.jpg&quot; data-alt=&quot;천안예술공원 뷰2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ob72H/btsLzBVw2gt/7kOYNSbJftNzygwVVEzwh1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOb72H%2FbtsLzBVw2gt%2F7kOYNSbJftNzygwVVEzwh1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 3m17s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술공원 뷰2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;우측에 인공호수와&amp;nbsp; 정면에 예술의 전당 및 카페 건물이 보이네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 3m54s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctm5Ak/btsLA8EIgIF/JapvrjVuX9Z8rY0ffody10/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctm5Ak/btsLA8EIgIF/JapvrjVuX9Z8rY0ffody10/img.jpg&quot; data-alt=&quot;인공호수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctm5Ak/btsLA8EIgIF/JapvrjVuX9Z8rY0ffody10/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctm5Ak%2FbtsLA8EIgIF%2FJapvrjVuX9Z8rY0ffody10%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 3m54s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인공호수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;인공호수 주변으로 인공 길로 걸어봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 4m28s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OqWBK/btsLyTIGAVb/DplW3Wxj5GTKIEh53jbCs0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OqWBK/btsLyTIGAVb/DplW3Wxj5GTKIEh53jbCs0/img.jpg&quot; data-alt=&quot;나무테크 산책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OqWBK/btsLyTIGAVb/DplW3Wxj5GTKIEh53jbCs0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOqWBK%2FbtsLyTIGAVb%2FDplW3Wxj5GTKIEh53jbCs0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 4m28s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나무테크 산책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: center;&quot;&gt;인공호수를 바라보는 카페옆으로 가 보았어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 5m8s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2qoIJ/btsLAfxMDvU/pvTHxjHev3doDnebkzX1r1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2qoIJ/btsLAfxMDvU/pvTHxjHev3doDnebkzX1r1/img.jpg&quot; data-alt=&quot;카페앞&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2qoIJ/btsLAfxMDvU/pvTHxjHev3doDnebkzX1r1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2qoIJ%2FbtsLAfxMDvU%2FpvTHxjHev3doDnebkzX1r1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 5m8s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;카페앞&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 8m8s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XG4B2/btsLB06ZqzX/VraJI8uvH3vzRzOmKcY5U0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XG4B2/btsLB06ZqzX/VraJI8uvH3vzRzOmKcY5U0/img.jpg&quot; data-alt=&quot;천안예술공원 뷰&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XG4B2/btsLB06ZqzX/VraJI8uvH3vzRzOmKcY5U0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXG4B2%2FbtsLB06ZqzX%2FVraJI8uvH3vzRzOmKcY5U0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 8m8s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;천안예술공원 뷰&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;인공호수의 카페 반대편에 큰 무대가 있네요. 연주회를 할 수 있을 것 같아요.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;큰 무대를 기준으로 뷰를 한 번 볼게요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m38s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lZzza/btsLBxRvlUg/XJWSNWKe1YNyXOl4IKGPg0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lZzza/btsLBxRvlUg/XJWSNWKe1YNyXOl4IKGPg0/img.jpg&quot; data-alt=&quot;무대뷰1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lZzza/btsLBxRvlUg/XJWSNWKe1YNyXOl4IKGPg0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlZzza%2FbtsLBxRvlUg%2FXJWSNWKe1YNyXOl4IKGPg0%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m38s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무대뷰1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m43s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baowa0/btsLA0mBsqM/2bbnyM3hKYEqTRrY2iU4iK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baowa0/btsLA0mBsqM/2bbnyM3hKYEqTRrY2iU4iK/img.jpg&quot; data-alt=&quot;무대뷰2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baowa0/btsLA0mBsqM/2bbnyM3hKYEqTRrY2iU4iK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbaowa0%2FbtsLA0mBsqM%2F2bbnyM3hKYEqTRrY2iU4iK%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m43s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무대뷰2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m50s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lKBAX/btsLAA9hTI9/UkkxEHiO796lT3RjPHfBM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lKBAX/btsLAA9hTI9/UkkxEHiO796lT3RjPHfBM1/img.jpg&quot; data-alt=&quot;무대뷰3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lKBAX/btsLAA9hTI9/UkkxEHiO796lT3RjPHfBM1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlKBAX%2FbtsLAA9hTI9%2FUkkxEHiO796lT3RjPHfBM1%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m50s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무대뷰3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m59s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwakxi/btsLAU0VwZq/AG9R38Lh9eoKVr4VixGdDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwakxi/btsLAU0VwZq/AG9R38Lh9eoKVr4VixGdDk/img.jpg&quot; data-alt=&quot;무대뷰4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwakxi/btsLAU0VwZq/AG9R38Lh9eoKVr4VixGdDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwakxi%2FbtsLAU0VwZq%2FAG9R38Lh9eoKVr4VixGdDk%2Fimg.jpg&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;1920&quot; height=&quot;1080&quot; data-filename=&quot;[언휴의산책] 천안예술공원 - frame at 9m59s.jpg&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;무대뷰4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>여행/산책</category>
      <category>천안 가 볼만한 곳</category>
      <category>천안 산책하기 좋은 곳</category>
      <category>천안예술공원</category>
      <category>천안예술의전당</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3559</guid>
      <comments>https://ehclub.tistory.com/3559#entry3559comment</comments>
      <pubDate>Sun, 29 Dec 2024 06:27:22 +0900</pubDate>
    </item>
    <item>
      <title>제주 애월읍 가 볼 만한 곳 - 고내포구와 남뚜리</title>
      <link>https://ehclub.tistory.com/3558</link>
      <description>&lt;p id=&quot;SE-9cf8cfe8-93eb-4af0-8335-0fb853e8ba29&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;제주공항에서 서쪽에 애월이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a3ddd164-8596-4bbd-8a0e-d9ba250d098a&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그리고 애월-고내-신엄-중엄-구엄-하귀를 잇는 해안도로는 바다멍 때리며 차한잔 하기 좋은 곳이죠.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4e6c1ebe-1d2a-49a0-ac5e-5eff8c08df57&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 설날에는 제 고향 고내를 소개할게요.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-43d106cc-c41f-449f-903e-cc5ab307a31c&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;고내포구와 남뚜리 및 고내 마을 전경, 마지막으로 애월에서 바라본 남뚜리를 산책합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a759cb75-9d57-40ce-96b5-0186c79dae1a&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e1f5fc83-7bf6-4940-a215-38884620f5c2&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;촬영은 HOVER AIR X1 드론을 사용하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cb47b226-ee2f-450a-b4ee-6acb5c5628c8&quot; style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;액션 캠으로 녹화한 화면은 수평이 안 맞아서 이번 영상에는 담지 못해 아쉽네요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #7b6d6d; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=1BapZvmxZf4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dnIcqd/hyVm0Ccr5e/z80IyGM3XrMt3KkSBI3dj0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;고내 탐방 - 올레길 16코스 [제주도 애월읍 가 볼 만한 곳, 촬영 HOVER AIR X1]&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/1BapZvmxZf4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&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>
      <category>제주도</category>
      <category>카페</category>
      <category>힐링</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3558</guid>
      <comments>https://ehclub.tistory.com/3558#entry3558comment</comments>
      <pubDate>Thu, 15 Feb 2024 12:13:01 +0900</pubDate>
    </item>
    <item>
      <title>to 20130613 from 20220613 PROOF 9주년 예약 앨범이 도착했어요.</title>
      <link>https://ehclub.tistory.com/3556</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;안녕하세요. 언제나휴일의 언휴예요.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d81412d1-fa7f-4dbb-aaf1-2b3f9c5a9ea0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1달 전에 예약 구매한 PROOF 앨범이 9주년인 2022년 6월 13일에 도착했네요.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8161bc86-041f-4d46-9a3b-b3a142862510&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;작업하는 방 문에 포스터를 붙였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-367de2b4-ff14-416f-868c-7f72ccd8a499&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제 행복으로 가는 문이죠. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f5c3aeda-5134-489c-ab48-fcb6c1f04bd5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예전에는 버터 포스터였는데 이제 분위기를 다시 전환하네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;행복으로 가는 문.jpg&quot; data-origin-width=&quot;2252&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VOjqm/btrEHCMcr3Q/W7dQKJKRebnoiqoPdO3q5k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VOjqm/btrEHCMcr3Q/W7dQKJKRebnoiqoPdO3q5k/img.jpg&quot; data-alt=&quot;행복으로 가는 문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VOjqm/btrEHCMcr3Q/W7dQKJKRebnoiqoPdO3q5k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVOjqm%2FbtrEHCMcr3Q%2FW7dQKJKRebnoiqoPdO3q5k%2Fimg.jpg&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;2252&quot; height=&quot;4000&quot; data-filename=&quot;행복으로 가는 문.jpg&quot; data-origin-width=&quot;2252&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;행복으로 가는 문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-d809d1ad-4a86-47f0-afe7-cbf0ede32a14&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-0facbc9e-3d73-4abc-9f60-f7d5b5c67d15&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;금고에 DECO KIT과 앨범들, Winter Ball 외에 PROOF도 비치할 수 있겠네요.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1f67ee90-4d7d-4618-8adb-d55eb9ebb034&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;보물 금고.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce1yBP/btrEEZ2uVSL/9DsYX2xbgC6Rkw4E9Pby0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce1yBP/btrEEZ2uVSL/9DsYX2xbgC6Rkw4E9Pby0K/img.jpg&quot; data-alt=&quot;보물 금고와 PROOF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce1yBP/btrEEZ2uVSL/9DsYX2xbgC6Rkw4E9Pby0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce1yBP%2FbtrEEZ2uVSL%2F9DsYX2xbgC6Rkw4E9Pby0K%2Fimg.jpg&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;4000&quot; height=&quot;2252&quot; data-filename=&quot;보물 금고.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보물 금고와 PROOF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #252525;&quot;&gt;J-HOPE 사진은 테이블에 Winter-Ball(지민과 슈가)과 비치해야겠어요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9주년.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cizROe/btrEyuphYjS/JW5a6MKMSFsYyYSmlbCpMk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cizROe/btrEyuphYjS/JW5a6MKMSFsYyYSmlbCpMk/img.jpg&quot; data-alt=&quot;보물 금고 테이블&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cizROe/btrEyuphYjS/JW5a6MKMSFsYyYSmlbCpMk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcizROe%2FbtrEyuphYjS%2FJW5a6MKMSFsYyYSmlbCpMk%2Fimg.jpg&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;4000&quot; height=&quot;2252&quot; data-filename=&quot;9주년.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;2252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보물 금고 테이블&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #252525;&quot;&gt;오늘 도착해서 개봉한 순간입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;사진.png&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddDUNY/btrECzJVqaJ/OZGkMHIkI6USE6aQd2KXx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddDUNY/btrECzJVqaJ/OZGkMHIkI6USE6aQd2KXx0/img.png&quot; data-alt=&quot;PROOF 앨범 도착&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddDUNY/btrECzJVqaJ/OZGkMHIkI6USE6aQd2KXx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddDUNY%2FbtrECzJVqaJ%2FOZGkMHIkI6USE6aQd2KXx0%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;563&quot; height=&quot;748&quot; data-filename=&quot;사진.png&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PROOF 앨범 도착&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=-Sip9_Uhjmk&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/c9F8uf/hyOK3Moxvr/y8YlqTFMkpiViufXRQfFBK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/-Sip9_Uhjmk&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인 취미/아이돌 음반 외</category>
      <category>2013년 6월 13일 데뷔</category>
      <category>2022년 6월 13일 PROOF 앨범 도착</category>
      <category>9주년</category>
      <category>9주년 앨범 도착</category>
      <category>bts</category>
      <category>proof</category>
      <category>행복으로 가는 문</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3556</guid>
      <comments>https://ehclub.tistory.com/3556#entry3556comment</comments>
      <pubDate>Mon, 13 Jun 2022 13:06:08 +0900</pubDate>
    </item>
    <item>
      <title>제어문 기본 실습 [C#] -  반도체 장비 및 제어시스템 개발자 양성</title>
      <link>https://ehclub.tistory.com/3555</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;다음 코드를 참고하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1620807216085&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace 콘솔_키_입력
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKey key = ConsoleKey.NoName;
            while(true)
            {
                key = Console.ReadKey(true).Key;
                switch(key)
                {
                    case ConsoleKey.F1: Console.WriteLine(&quot;F1&quot;); break;
                }
                if(key == ConsoleKey.Escape)
                {
                    break;
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 사용자가 선택한 키에 따라 공정을 선택 (15분)&lt;br /&gt;F1:&amp;nbsp;웨이퍼&amp;nbsp;F2:산화&amp;nbsp;F3:포토&amp;nbsp;F4:식각 &lt;br /&gt;F5:패키징&amp;nbsp;F6:&amp;nbsp;EDS&amp;nbsp;F7:&amp;nbsp;금속배선&amp;nbsp;F8:박막 &lt;br /&gt;ESCAPE을&amp;nbsp;누르기&amp;nbsp;전까지&amp;nbsp;반복하시오.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;/* 먼저 작성한 후에 비교해 보세요. */&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620894359408&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//1.사용자가 선택한 키에 따라 공정을 선택
//F1: 웨이퍼 F2:산화 F3:포토 F4:식각
//F5:패키징 F6: EDS F7: 금속배선 F8:박막
//ESCAPE을 누르기 전까지 반복하시오.

using System;

namespace _01.메뉴_선택
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKey key = ConsoleKey.NoName;
            while((key = SelectMenu())!= ConsoleKey.Escape)//반복: 메뉴 선택한 키가 ESC가 아니라면
            {
                //선택한 키에 따라 작업 수행
                switch(key)
                {
                    case ConsoleKey.F1: Console.WriteLine(&quot;웨이퍼&quot;); break;
                    case ConsoleKey.F2: Console.WriteLine(&quot;산화&quot;); break;
                    case ConsoleKey.F3: Console.WriteLine(&quot;포토&quot;); break;
                    case ConsoleKey.F4: Console.WriteLine(&quot;식각&quot;); break;
                    case ConsoleKey.F5: Console.WriteLine(&quot;페키징&quot;); break;
                    case ConsoleKey.F6: Console.WriteLine(&quot;EDS&quot;); break;
                    case ConsoleKey.F7: Console.WriteLine(&quot;금속배선&quot;); break;
                    case ConsoleKey.F8: Console.WriteLine(&quot;박막&quot;); break;
                    default: Console.WriteLine(&quot;잘못 선택하셨군요.&quot;); break;
                }
                Console.WriteLine(&quot;아무 키나 누르세요.&quot;);
                Console.ReadKey(true);
            }
        }

        private static ConsoleKey SelectMenu()
        {
            Console.Clear();
            Console.WriteLine(&quot;F1: 웨이퍼 F2:산화 F3:포토 F4:식각&quot;);
            Console.WriteLine(&quot;F5:패키징 F6: EDS F7: 금속배선 F8:박막&quot;);
            return Console.ReadKey(true).Key;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;2.a 10개의 정수를 입력받아 출력하시오.(10분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;/* 먼저 작성한 후에 비교해 보세요. */&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620894446152&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace _2.a_10개의_정수를_입력받아_출력하시오
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[10];
            for(int i = 0; i&amp;lt;10;i++)
            {
                Console.Write(&quot;{0}번째 정수:&quot;,i+1);
                int.TryParse(Console.ReadLine(), out arr[i]);
            }

            foreach(int elem in arr)
            {
                Console.Write(&quot;{0} &quot;, elem);
            }
            Console.WriteLine();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;2.b 10개의 정수를 입력받아 2, 3, 5의 배수가 각각 몇 개인지 출력하시오.(15분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;/* 먼저 작성한 후에 비교해 보세요. */&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620894501534&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace _2.b_10개의_정수를_입력받아_2__3__5의_배수가_각각_몇_개인지_출력하시오
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[10];
            for (int i = 0; i &amp;lt; 10; i++)
            {
                Console.Write(&quot;{0}번째 정수:&quot;, i + 1);
                int.TryParse(Console.ReadLine(), out arr[i]);
            }
            int n2 = 0, n3 = 0, n5 = 0;
            foreach(int elem in arr)
            {
                if(elem%2==0)
                {
                    n2++;
                }
                if (elem % 3 == 0)
                {
                    n3++;
                }
                if (elem % 5 == 0)
                {
                    n5++;
                }
            }
            Console.WriteLine(&quot;2의 배수:{0}개 3의 배수:{1}개 5의 배수:{2}&quot;, n2, n3, n5);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;2.c&amp;nbsp;10개의&amp;nbsp;웨이퍼&amp;nbsp;제품을&amp;nbsp;입력받으시오. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;하나의&amp;nbsp;웨이퍼마다&amp;nbsp;직경과&amp;nbsp;제품명을&amp;nbsp;입력받는다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;입력받은 전체 제품을 출력한다.(15분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;/* 먼저 작성한 후에 비교해 보세요. */&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620894538520&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
/*  2.c 10개의 웨이퍼 제품을 입력받으시오.
    하나의 웨이퍼마다 직경과 제품명을 입력받는다.
    입력받은 전체 제품을 출력한다.(15분, ~15:15)*/
namespace _2.c_10개의_웨이퍼_제품을_입력받으시오
{
    class Wafer
    {
        public double Radius
        {
            get;
        }
        public string Name
        {
            get;
        }
        public Wafer(double radius,string name)
        {
            Radius = radius;
            Name = name;
        }
        public override string ToString()
        {
            return Name;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Wafer[] arr = new Wafer[10];
            for (int i = 0; i &amp;lt; 10; i++)
            {
                arr[i] = MakeWafer(i + 1);
            }
            foreach(Wafer wafer in arr)
            {
                Console.WriteLine(&quot;{0}:{1}&quot;, wafer.Name, wafer.Radius);
            }
        }

        private static Wafer MakeWafer(int n)
        {
            Console.Write(&quot;{0}번째 Wafer&quot;, n);
            double radius = 0;
            Console.Write(&quot;직경:&quot;);
            double.TryParse(Console.ReadLine(), out radius);
            string name;
            Console.Write(&quot;제품명:&quot;);
            name = Console.ReadLine();
            return new Wafer(radius, name);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;br /&gt;3. 새롭게 설계한 웨이퍼의 실제 수율을 계산하는 테스트 공정이다. 다음과 같이 동작하게 구현하시오.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;단위&amp;nbsp;테스트&amp;nbsp;횟수를&amp;nbsp;입력받아&amp;nbsp;입력&amp;nbsp;횟수만큼&amp;nbsp;반복&amp;nbsp;수행한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;단위&amp;nbsp;테스트에서는&amp;nbsp;제조&amp;nbsp;라인(A~F),&amp;nbsp;테스트&amp;nbsp;일련&amp;nbsp;번호,&amp;nbsp;설계&amp;nbsp;최대&amp;nbsp;칩&amp;nbsp;수와&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;실제&amp;nbsp;생산한&amp;nbsp;정상&amp;nbsp;칩&amp;nbsp;수를&amp;nbsp;입력받아&amp;nbsp;실제&amp;nbsp;수율을&amp;nbsp;계산하여&amp;nbsp;결과를&amp;nbsp;출력한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;테스트&amp;nbsp;일련&amp;nbsp;번호는&amp;nbsp;순차적으로&amp;nbsp;부여한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;제조라인,&amp;nbsp;설계&amp;nbsp;최대&amp;nbsp;칩&amp;nbsp;수,&amp;nbsp;실제&amp;nbsp;생산한&amp;nbsp;정상&amp;nbsp;칩&amp;nbsp;수는&amp;nbsp;입력받는다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;실제 수율 = 실제 생산한 정상 칩 수/설계 최대 칩 수&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;모든&amp;nbsp;테스트를&amp;nbsp;완료하면&amp;nbsp;테스트&amp;nbsp;결과를&amp;nbsp;출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;/* 먼저 작성한 후에 비교해 보세요. */&lt;/b&gt; &lt;/p&gt;
&lt;pre id=&quot;code_1620894570520&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
/* 
   3. 새롭게 설계한 웨이퍼의 실제 수율을 계산하는 테스트 공정이다. 
   다음과 같이 동작하게 구현하시오.
   - 단위 테스트 횟수를 입력받아 입력 횟수만큼 반복 수행한다.
   단위 테스트에서는 제조 라인(A~F), 테스트 일련 번호, 설계 최대 칩 수와 
  실제 생산한 정상 칩 수를 입력받아 실제 수율을 계산하여 결과를 출력한다.
   테스트 일련 번호는 순차적으로 부여한다.
   제조라인, 설계 최대 칩 수, 실제 생산한 정상 칩 수는 입력받는다.
   실제 수율 = 실제 생산한 정상 칩 수/설계 최대 칩 수 */
namespace _3.새롭게_설계한_웨이퍼의_실제_수율을_계산하는_테스트_공정이다
{
    class Program
    {
        static void Main(string[] args)
        {
            int tcnt = 0;
            Console.Write(&quot;테스트 횟수:&quot;);
            int.TryParse(Console.ReadLine(), out tcnt);
            for(int t=0;t&amp;lt;tcnt;t++ )
            {
                TestCase(t + 1);
            }
        }
        enum PRO_LINE { PN,PA, PB, PC, PD, PE, PF}
        private static void TestCase(int t)
        {
            PRO_LINE pl = InputProLine();
            if(pl== PRO_LINE.PN)
            {
                Console.WriteLine(&quot;잘못 입력하였습니다.&quot;);
                return;
            }
            Console.Write(&quot;테스트 일련 번호:&quot;);
            string pno = Console.ReadLine();
            Console.Write(&quot;설계 최대 칩 수:&quot;);
            int max_chip = 0;
            int.TryParse(Console.ReadLine(), out max_chip);
            Console.Write(&quot;정상 칩 수:&quot;);
            int good_chip = 0;
            int.TryParse(Console.ReadLine(), out good_chip);
            Console.WriteLine(&quot;실제 수율:{0}&quot;, good_chip / (double)max_chip);
        }

        private static PRO_LINE InputProLine()
        {
            Console.WriteLine(&quot;생산 라인(A~F)&quot;);
            switch(Console.ReadLine())
            {
                case &quot;A&quot;:return PRO_LINE.PA;
                case &quot;B&quot;: return PRO_LINE.PB;
                case &quot;C&quot;: return PRO_LINE.PC;
                case &quot;D&quot;: return PRO_LINE.PD;
                case &quot;E&quot;: return PRO_LINE.PE;
                case &quot;F&quot;: return PRO_LINE.PF;
            }
            return PRO_LINE.PN;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;4.&amp;nbsp;실제&amp;nbsp;수율을&amp;nbsp;제조&amp;nbsp;라인&amp;nbsp;별로&amp;nbsp;출력하시오. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;라인: 평균 실제 수율&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1620894586925&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
//4.실제 수율을 제조 라인 별로 출력하시오.
//    라인: 평균 실제 수율 
namespace _4.실제_수율을_제조_라인_별로_출력하시오
{
    class Score
    {       
        public int MaxChip { get; set; } 
        public int GoodChip { get; set; }
        public Score(int mc, int gc)
        {
            MaxChip = mc;
            GoodChip = gc;
        }
        public double Value
        {
            get
            {
                return GoodChip / (double)MaxChip;
            }
        }
    }
    class Program
    {
        static Score[] scores = new Score[(int)PRO_LINE.PN];
        static void Main(string[] args)
        {
            int tcnt = 0;
            Console.Write(&quot;테스트 횟수:&quot;);
            int.TryParse(Console.ReadLine(), out tcnt);
            for (int t = 0; t &amp;lt; tcnt; t++)
            {
                TestCase(t + 1);
            }
            for(int i = 0; i&amp;lt;scores.Length;i++)
            {
                Console.Write(&quot;{0}:{1}&quot;, (PRO_LINE)i, scores[i].Value);
            }

        }
        enum PRO_LINE { A, B, C, D, E, F,PN }
        private static void TestCase(int t)
        {
            PRO_LINE pl = InputProLine();
            if (pl == PRO_LINE.PN)
            {
                Console.WriteLine(&quot;잘못 입력하였습니다.&quot;);
                return;
            }
            Score score = scores[(int)pl];
            Console.Write(&quot;테스트 일련 번호:&quot;);
            string pno = Console.ReadLine();
            Console.Write(&quot;설계 최대 칩 수:&quot;);
            int max_chip = 0;
            int.TryParse(Console.ReadLine(), out max_chip);
            score.MaxChip += max_chip;
            Console.Write(&quot;정상 칩 수:&quot;);
            int good_chip = 0;
            int.TryParse(Console.ReadLine(), out good_chip);
            score.GoodChip += good_chip;
            
            Console.WriteLine(&quot;실제 수율:{0}&quot;, good_chip / (double)max_chip);
        }

        private static PRO_LINE InputProLine()
        {
            Console.WriteLine(&quot;생산 라인(A~F)&quot;);
            switch (Console.ReadLine())
            {
                case &quot;A&quot;: return PRO_LINE.A;
                case &quot;B&quot;: return PRO_LINE.B;
                case &quot;C&quot;: return PRO_LINE.C;
                case &quot;D&quot;: return PRO_LINE.D;
                case &quot;E&quot;: return PRO_LINE.E;
                case &quot;F&quot;: return PRO_LINE.F;
            }
            return PRO_LINE.PN;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>C#</category>
      <category>문제</category>
      <category>반도체제어</category>
      <category>실습</category>
      <category>제어문</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3555</guid>
      <comments>https://ehclub.tistory.com/3555#entry3555comment</comments>
      <pubDate>Wed, 12 May 2021 16:24:43 +0900</pubDate>
    </item>
    <item>
      <title>유튜브 수익 채널 인증 및 첫 2 주간 수익</title>
      <link>https://ehclub.tistory.com/3554</link>
      <description>&lt;p&gt;&lt;span&gt;안녕하세요. 언제나휴일입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2021년 3월 3일에 수익 창출 채널 조건을 만족시켰어요. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3월 4일부터 3월 17일까지 2주간 수익이 발생했군요. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;현재 구독자는 약 1500명, 시청 시간은 하루 10~15시간, 조회수는 300~500회 입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2주일간 10달러 정도의 수익이 발생했군요. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;동영상 강의 제작하면서 목이 마르면 음료를 마실 때 사용하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20200304-0317.PNG&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dv5B9Z/btq0px5VOl5/4GZxSz4MkFrPUZd6bNRGLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dv5B9Z/btq0px5VOl5/4GZxSz4MkFrPUZd6bNRGLK/img.png&quot; data-alt=&quot;2021년 3월 4일~3월 17일 유튜브 수익&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dv5B9Z/btq0px5VOl5/4GZxSz4MkFrPUZd6bNRGLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdv5B9Z%2Fbtq0px5VOl5%2F4GZxSz4MkFrPUZd6bNRGLK%2Fimg.png&quot; data-filename=&quot;20200304-0317.PNG&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;2021년 3월 4일~3월 17일 유튜브 수익&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=LdlHrBDe6YI&amp;amp;list=PL_fV1knZRgi6qygojzb_e8YOMne4vzOmm&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/S0o2a/hyJCgXoSUk/KaiK8tUNCYDEPVvHeFCWc0/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/LdlHrBDe6YI&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;언제나휴일 소개 및 Q&amp;amp;A 재생 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=3yuaoHV3dsc&amp;amp;list=PL_fV1knZRgi5qtacL-rsJl3jcyI0KOf4i&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cN3f0T/hyJBsLVM9n/CT2qW2ZzoOXQsTp6aUfLWk/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/3yuaoHV3dsc&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;원격 제어 프로그램 재생 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=JKla14TxV58&amp;amp;list=PL_fV1knZRgi476LWwZJOBvLaJOjGtpEwR&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/d5QarD/hyJCvAfXfF/e9jwLdzxMAmYxKM7clvEe1/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/JKla14TxV58&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;언제나 C언어 예제 Center 재생 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=lFOVxF_ae6I&amp;amp;list=PL_fV1knZRgi6Llqn3UF21sR97VuTDjVY_&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/7mKOu/hyJCinnB3S/qsHhTI4pF3KBtpLmLsfFT0/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/lFOVxF_ae6I&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;미래 실험실 pYTHON 재생 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=ewsh61FVZgo&amp;amp;list=PL_fV1knZRgi5CC62PQnv_pxzEItXWH-fn&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bU9uf6/hyJClxDHuo/VkBJS6NuHXJd6ENSnxkuJK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ewsh61FVZgo&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;실습으로 다지는 C# 재생 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;이 외에도 다수의 프로그래밍 언어 및 기술, 프로젝트 동영상 강의를 제작하여 배포하고 있습니다.&lt;/p&gt;
&lt;p&gt;주말에는 프로그래밍 외에 취미 관련 영상을 제작하여 올릴 예정이며 현재 &quot;언제나음악&quot;을 올리고 있습니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=dmBgLsJR5ow&amp;amp;list=PL_fV1knZRgi6moVLd8hYuzjnUjL6nNooS&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cCuPmP/hyJBkNTped/Xk3gjFUskPOj3Q1NfcaE31/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/dmBgLsJR5ow&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>유튜브 - 언제나 휴일 이야기</category>
      <category>1000명</category>
      <category>언제나휴일</category>
      <category>유튜브</category>
      <category>음악</category>
      <category>채널 수익</category>
      <category>첫 2주</category>
      <category>프로그래밍</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3554</guid>
      <comments>https://ehclub.tistory.com/3554#entry3554comment</comments>
      <pubDate>Fri, 19 Mar 2021 09:30:16 +0900</pubDate>
    </item>
    <item>
      <title>계정 정지 위협, 포털 운영자인 것처럼 위장 바이러스 배포</title>
      <link>https://ehclub.tistory.com/3553</link>
      <description>&lt;p&gt;안녕하세요. 언제나휴일입니다.&lt;/p&gt;
&lt;p&gt;어제는 대기업 중요 발주 문서인 것처럼 트로이목마 메일을 받았습니다.&lt;/p&gt;
&lt;p&gt;오늘 아침에 메일을 확인하는 중 다음 계정 정지를 시킨다는 메일을 받았습니다.&lt;/p&gt;
&lt;p&gt;하지만 전체 메일 구성이 너무나 엉성하였고 보낸 이 주소를 보니 엉뚱하다는 것을 알 수 있었습니다.&lt;/p&gt;
&lt;p&gt;갑자기 어제부터 누군가 저를 공격하고 싶은지 계속 메일로 이상한 것을 보내는 군요.&lt;/p&gt;
&lt;p&gt;여러분들도 수상한 메일이 오면 첨부 파일이나 링크 등을 누르지 마시고 바로 폐기하세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;포털 운영자인것 처럼 위장 바이러스 배포.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmgdyv/btqPC2blkf4/BQ2ijbpcn2n8TajinUvBH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmgdyv/btqPC2blkf4/BQ2ijbpcn2n8TajinUvBH1/img.png&quot; data-alt=&quot;포털 운영자인 것처럼 위장 바이러스 배포&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmgdyv/btqPC2blkf4/BQ2ijbpcn2n8TajinUvBH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmgdyv%2FbtqPC2blkf4%2FBQ2ijbpcn2n8TajinUvBH1%2Fimg.png&quot; data-filename=&quot;포털 운영자인것 처럼 위장 바이러스 배포.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;포털 운영자인 것처럼 위장 바이러스 배포&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>계정 정지</category>
      <category>메일</category>
      <category>위장 바이러스</category>
      <category>포털 운영자</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3553</guid>
      <comments>https://ehclub.tistory.com/3553#entry3553comment</comments>
      <pubDate>Thu, 10 Dec 2020 09:29:15 +0900</pubDate>
    </item>
    <item>
      <title>이메일로 모르는 발주서가 오면 트로이 목마를 의심하세요.</title>
      <link>https://ehclub.tistory.com/3552</link>
      <description>&lt;p&gt;안녕하세요. 언제나휴일입니다.&lt;/p&gt;
&lt;p&gt;방금 메일을 확인하였는데 모르는 곳에서 발주서가 와 있네요.&lt;/p&gt;
&lt;p&gt;혹시 중요한 것일 수 있어서 잘못 보낸 것 같다고 답장을 보냈습니다.&lt;/p&gt;
&lt;p&gt;물론 첨부 파일을 확인하지 않았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 혹시 중요한 것이면 연락해 주는 것이 좋겠다고 전화번호를 보는 순간,&lt;/p&gt;
&lt;p&gt;&quot;아~ &lt;b&gt;트로이 목마&lt;/b&gt;로구나!&quot;&lt;/p&gt;
&lt;p&gt;주소는 서울인데 전화번호는 제주(064)이고 모바일은 012로 시작하네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구글에서 검색해 보니 2020년 들어 이메일로 주요한 계약인 것처럼 위장하여 첨부 파일로 바이러스를 심는 것이 많아졌다고 하네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다들 모르는 곳에서 메일이 왔을 때 절대 첨부파일은 접근하지 마세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;이메일을 이용한 트로이목마.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdKd9t/btqPyq3Qys7/p8RTk3BN04EsLxR4TiND71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdKd9t/btqPyq3Qys7/p8RTk3BN04EsLxR4TiND71/img.png&quot; data-alt=&quot;이메일 캡쳐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdKd9t/btqPyq3Qys7/p8RTk3BN04EsLxR4TiND71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdKd9t%2FbtqPyq3Qys7%2Fp8RTk3BN04EsLxR4TiND71%2Fimg.png&quot; data-filename=&quot;이메일을 이용한 트로이목마.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;이메일 캡쳐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>바이러스</category>
      <category>발주서</category>
      <category>이메일</category>
      <category>트로이목마</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3552</guid>
      <comments>https://ehclub.tistory.com/3552#entry3552comment</comments>
      <pubDate>Wed, 9 Dec 2020 12:51:52 +0900</pubDate>
    </item>
    <item>
      <title>3. 행복한 실패</title>
      <link>https://ehclub.tistory.com/3551</link>
      <description>&lt;p&gt;&amp;nbsp;안녕하세요. 언제나휴일입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저에게는 고등학교 2학년이 아들이 있어요.&lt;/p&gt;
&lt;p&gt;아들이 중학생으로 올라가면서 자기 주도식 학습을 할 수 있게 계획을 세웠어요.&lt;/p&gt;
&lt;p&gt;그리고 실제 실험해 보았죠.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 실험 시작부터 문제가 있었네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아들은 아버지의 의견을 따라 자기 주도식 학습을 하는 것에 스트레스를 받더군요.&lt;/p&gt;
&lt;p&gt;제 입장에서 자기 주도식이라고 생각했던 것이 자기 주도식이 아닌 것이었죠.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;저의 생각과 차이로 인해 아들과 관계가 나빠지는 것을 느꼈어요. 바로 실험을 멈추었죠.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;이 후 우리 가족은 모든 것을 &quot;행복한 삶&quot;에 기준을 두기로 했어요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;저와 아내는 아들을 믿고 아들의 모든 활동을 적극적으로 격려해 주기로 했어요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;자기 주도식 학습은 실패했지만 행복합니다.&lt;/p&gt;</description>
      <category>교육/자기 주도식 학습</category>
      <category>행복한 실패</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3551</guid>
      <comments>https://ehclub.tistory.com/3551#entry3551comment</comments>
      <pubDate>Sat, 5 Dec 2020 16:37:45 +0900</pubDate>
    </item>
    <item>
      <title>[C#, Windows Forms, 소켓 통신] 부재 입출고 자동 관리 창고 시스템 시뮬레이션 - Smart Factory 실습</title>
      <link>https://ehclub.tistory.com/3550</link>
      <description>&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/u1uoK/btqOtg8kRRQ/mwTlNAkjdHzIfqdvoEulak/%5B%EA%B8%B0%EC%88%A0%20%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4%5D%20%EB%B6%80%EC%9E%AC%20%EC%B0%BD%EA%B3%A0%20%EC%9E%90%EB%8F%99%ED%99%94%20-%20WIndows%20Forms%2C%20%EC%86%8C%EC%BC%93%20%ED%86%B5%EC%8B%A0.docx?attach=1&amp;amp;knm=tfile.docx&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;[기술 포트폴리오] 부재 창고 자동화 - WIndows Forms, 소켓 통신.docx&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.11MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 부재 입출고 자동 관리 창고 시스템 시뮬레이션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음&amp;nbsp;시나리오처럼&amp;nbsp;동작하는&amp;nbsp;시뮬레이션&amp;nbsp;솔루션을&amp;nbsp;구현하시오. &lt;br /&gt;-&amp;nbsp;자동&amp;nbsp;관리&amp;nbsp;창고&amp;nbsp;시스템&amp;nbsp;:&amp;nbsp;GUI&amp;nbsp;프로그램(Windows&amp;nbsp;Forms&amp;nbsp;앱)+서버 &lt;br /&gt;-&amp;nbsp;중앙&amp;nbsp;관재&amp;nbsp;:&amp;nbsp;GUI&amp;nbsp;프로그램(Windows&amp;nbsp;Forms&amp;nbsp;앱)&amp;nbsp;+&amp;nbsp;클라이언트&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 공통으로 사용할 라이브러리: 클래스 라이브러리&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 시나리오&lt;/h3&gt;
&lt;p&gt;부재를&amp;nbsp;입고&amp;nbsp;및&amp;nbsp;출고하면&amp;nbsp;RFID에&amp;nbsp;의해&amp;nbsp;자동으로&amp;nbsp;관리해&amp;nbsp;주는&amp;nbsp;창고&amp;nbsp;시스템이다. &lt;br /&gt;부재&amp;nbsp;입고&amp;nbsp;시에&amp;nbsp;RFID를&amp;nbsp;통해&amp;nbsp;부재명과&amp;nbsp;개수를&amp;nbsp;파악할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;처음으로&amp;nbsp;입력하는&amp;nbsp;부재일&amp;nbsp;때는&amp;nbsp;부재&amp;nbsp;ID(1부터&amp;nbsp;순차&amp;nbsp;주여)를&amp;nbsp;부여한다. &lt;br /&gt;창고&amp;nbsp;제어창에는&amp;nbsp;전체&amp;nbsp;부재&amp;nbsp;목록을&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;원하는&amp;nbsp;부재와&amp;nbsp;출고&amp;nbsp;개수를&amp;nbsp;지정하면&amp;nbsp;자동&amp;nbsp;출고한다. &lt;br /&gt;&lt;br /&gt;중앙&amp;nbsp;관재를&amp;nbsp;통해&amp;nbsp;부재&amp;nbsp;입고,&amp;nbsp;부재&amp;nbsp;출고,&amp;nbsp;현황&amp;nbsp;파악이&amp;nbsp;가능하다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 공통으로 사용할 라이브러리&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1 Material 클래스 정의&lt;/h4&gt;
&lt;p&gt;부재 ID, 부재 이름, 보유 개수를 멤버로 갖는 Material 클래스 정의&lt;/p&gt;
&lt;pre id=&quot;code_1606441239429&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace SF_CoreLib
{
    /// &amp;lt;summary&amp;gt;
    /// 재료 클래스
    /// &amp;lt;/summary&amp;gt;
    public class Material
    {
        /// &amp;lt;summary&amp;gt;
        /// 부재 ID - 가져오기
        /// &amp;lt;/summary&amp;gt;
        public int ID { get; }
        /// &amp;lt;summary&amp;gt;
        /// 부재 이름 - 가져오기
        /// &amp;lt;/summary&amp;gt;
        public string Name { get; }
        /// &amp;lt;summary&amp;gt;
        /// 보유 개수 - 가져오기 및 설정하기
        /// &amp;lt;/summary&amp;gt;
        public int Count { get; set; }
        /// &amp;lt;summary&amp;gt;
        /// 생성자
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;id&quot;&amp;gt;부재 ID&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&quot;name&quot;&amp;gt;부재 이름&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&quot;count&quot;&amp;gt;보유 개수&amp;lt;/param&amp;gt;
        public Material(int id, string name,int count)
        {
            ID = id;
            Name = name;
            Count = count;
        }
        /// &amp;lt;summary&amp;gt;
        /// ToString 재정의
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;returns&amp;gt;부재 이름&amp;lt;/returns&amp;gt;
        public override string ToString()
        {
            return Name;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 자동 관리 창고 시스템 구현&lt;/h3&gt;
&lt;p&gt;3.에서 만든 라이브러리를 참조 추가합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.1 컨트롤 배치&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;자식 컨트롤 배치.png&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;386&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c87UDm/btqOiA1ikyG/w7JFs71UIzjSSkmCkllB61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c87UDm/btqOiA1ikyG/w7JFs71UIzjSSkmCkllB61/img.png&quot; data-alt=&quot;창고 자식 컨트롤 배치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c87UDm/btqOiA1ikyG/w7JFs71UIzjSSkmCkllB61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc87UDm%2FbtqOiA1ikyG%2Fw7JFs71UIzjSSkmCkllB61%2Fimg.png&quot; data-filename=&quot;자식 컨트롤 배치.png&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;386&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;창고 자식 컨트롤 배치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2 이벤트 핸들러 등록&lt;/h4&gt;
&lt;p&gt;다음 이벤트 핸들러를 등록한다.&lt;/p&gt;
&lt;p&gt;Form1의 Load 이벤트 핸들러&lt;/p&gt;
&lt;p&gt;tbar_count의 Scroll 이벤트 핸들러&lt;/p&gt;
&lt;p&gt;btn_in과 btn_out의 Click 이벤트 핸들러&lt;/p&gt;
&lt;p&gt;lv_material의 SelectedIndexChanged 이벤트 핸들러&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.3 Form1.cs 구현&lt;/h4&gt;
&lt;pre id=&quot;code_1606447295587&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using SF_CoreLib;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 창고
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void lv_material_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(lv_material.SelectedItems.Count==0)
            {
                btn_out.Enabled = false;
                nud_count.Maximum = 0;
                return;
            }
            ListViewItem lvi = lv_material.SelectedItems[0];
            string name = lvi.SubItems[1].Text;
            Material material = mdic[name];
            nud_count.Maximum = material.Count;
            btn_out.Enabled = true;
        }

        private void tbar_count_Scroll(object sender, EventArgs e)
        {
            int count = tbar_count.Value;
            lb_count.Text = count.ToString();
        }

        private void btn_in_Click(object sender, EventArgs e)
        {
            string name = tbox_name.Text;
            if(name == string.Empty)
            {
                MessageBox.Show(&quot;부재 이름을 먼저 입력하세요.&quot;);
                return;
            }
            int cnt = tbar_count.Value;
            if(mdic.ContainsKey(name) == false)
            {
                sn++;
                Material material = new Material(sn, name, cnt);
                mdic[name] = material;
                string[] sitems = new string[] { sn.ToString(), name, cnt.ToString() };
                ListViewItem lvi = new ListViewItem(sitems);
                lv_material.Items.Add(lvi);
            }
            else
            {
                Material material = mdic[name];
                material.Count += cnt;
                foreach(ListViewItem lvi in lv_material.Items)
                {
                    if(lvi.SubItems[0].Text == material.ID.ToString())
                    {
                        lvi.SubItems[2].Text = material.Count.ToString();
                        break;
                    }
                }
            }
        }

        private void btn_out_Click(object sender, EventArgs e)
        {
            ListViewItem lvi = lv_material.SelectedItems[0];
            string name = lvi.SubItems[1].Text;
            Material material = mdic[name];
            int count = (int)nud_count.Value;
            material.Count -= count;
            lvi.SubItems[2].Text = material.Count.ToString();
            nud_count.Maximum = material.Count;
        }

        Dictionary&amp;lt;string, Material&amp;gt; mdic;
        int sn;
        SFServer sfs = new SFServer(&quot;192.168.10.102&quot;, 19202);
        private void Form1_Load(object sender, EventArgs e)
        {
            mdic = new Dictionary&amp;lt;string, Material&amp;gt;();
            sfs.Start();
            sfs.OnOut += Sfs_OnOut;
            sfs.OnIn += Sfs_OnIn;
        }

        private void Sfs_OnIn(object sender, InEventArgs e)
        {
            tbox_name.Text = e.Name;
            tbar_count.Value = e.Count;
            lb_count.Text = e.Count.ToString();
            btn_in_Click(null, null);
        }

        private void Sfs_OnOut(object sender, OutEventArgs e)
        {
            string name = e.Name;
            foreach(ListViewItem lvi in lv_material.Items)
            {
                if(lvi.SubItems[1].Text == name)
                {
                    lvi.Selected = true;
                    decimal cnt = e.Count;
                    if(nud_count.Maximum&amp;lt;cnt)
                    {
                        cnt = nud_count.Maximum;
                    }
                    nud_count.Value = cnt;
                    btn_out_Click(null, null);
                    break;
                }
            }
            
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.4 SFServer.cs&lt;/h3&gt;
&lt;p&gt;SFServer(스마트 팩토리 클라이언트) 클래스를 추가하고 구현합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606462626174&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.IO;
using System.Net;
using System.Net.Sockets;

namespace 창고
{
    public class SFServer
    {
        public event OutEventHandler OnOut;
        public event InEventHandler OnIn;
        public string IP{get;}
        public int Port { get; }

        public SFServer(string ip, int port)
        {
            IP= ip;
            Port = port;
        }

        Socket sock;
        public void Start()
        {
            //소켓 생성
            sock = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);
            //소켓과 네트워크 인터페이스 결합
            IPAddress addr = IPAddress.Parse(IP);
            IPEndPoint end = new IPEndPoint(addr, Port);
            sock.Bind(end);
            //백 로그 큐 크기 결정
            sock.Listen(5);
            //클라이언트 연결 요청 대기 및 수락 Loop
            AcceptAsync();
        }

        delegate void AcceptDele();
        private void AcceptAsync()
        {
            AcceptDele dele = AcceptLoop;
            dele.BeginInvoke(null, null);
        }
        void AcceptLoop()
        {
            while(true)
            {
                Socket dosock = sock.Accept();
                DoIt(dosock);
            }

        }
        enum MsgType
        {
            MT_IN, MT_OUT
        }
        private void DoIt(Socket dosock)
        {
            byte[] packet = new byte[1024];
            dosock.Receive(packet);
            MemoryStream ms = new MemoryStream(packet);
            BinaryReader br = new BinaryReader(ms);
            MsgType mt = (MsgType)br.ReadInt32();
            string name = br.ReadString();
            int count = br.ReadInt32();
            br.Close();
            ms.Close();
            if(mt== MsgType.MT_IN)
            {
                if(OnIn!=null)
                {
                    OnIn(this, new InEventArgs(name, count));
                }
            }
            if(mt == MsgType.MT_OUT)
            {
                if(OnOut != null)
                {
                    OnOut(this, new OutEventArgs(name, count));
                }
            }
            dosock.Close();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.5 InEventArgs.cs - 입고 패킷 수신 이벤트 인자 및 대리자&lt;/h4&gt;
&lt;pre id=&quot;code_1606713974636&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace 창고
{
    public delegate void InEventHandler(object sender, InEventArgs e);
    public class InEventArgs:EventArgs
    {
        public string Name { get;  }
        public int Count { get; }
        public InEventArgs(string name,int count)
        {
            Name = name;
            Count = count;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.6 OutEventArgs.cs&amp;nbsp; - 출고 패킷 수신 이벤트 인자 및 대리자&lt;/h3&gt;
&lt;pre id=&quot;code_1606713995258&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace 창고
{
    public delegate void OutEventHandler(object sender, OutEventArgs e);
    public class OutEventArgs:EventArgs
    {
        public string Name { get; }
        public int Count { get; }
        public OutEventArgs(string name,int count)
        {
            Name = name;
            Count = count;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 중앙 관재 구현&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.1 자식 컨트롤 배치&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;자식 컨트롤 배치.png&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;448&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWk8Vp/btqOtgNHDUL/Dw50V1dpyKnihYDn1nUJDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWk8Vp/btqOtgNHDUL/Dw50V1dpyKnihYDn1nUJDk/img.png&quot; data-alt=&quot;중앙 관재 자식 컨트롤 구현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWk8Vp/btqOtgNHDUL/Dw50V1dpyKnihYDn1nUJDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWk8Vp%2FbtqOtgNHDUL%2FDw50V1dpyKnihYDn1nUJDk%2Fimg.png&quot; data-filename=&quot;자식 컨트롤 배치.png&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;448&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;중앙 관재 자식 컨트롤 구현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.2 이벤트 핸들러 등록&lt;/h3&gt;
&lt;p&gt;세 개의 버튼의 Click 이벤트 핸들러를 등록합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.3 구현&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.3.1 Form1.cs&lt;/h4&gt;
&lt;pre id=&quot;code_1606457928965&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Windows.Forms;

namespace 창고_제어
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        
        string ip;
        int port;
        private void btn_set_Click(object sender, EventArgs e)
        {
            ip = tbox_ip.Text;
            port = int.Parse(tbox_port.Text);
            btn_in.Enabled = true;
            btn_out.Enabled = true;
        }

        private void btn_in_Click(object sender, EventArgs e)
        {
            string pname = tbox_name.Text;
            int cnt = tbar_count.Value;
            SFClient.SendIn(ip,port,pname, cnt);
        }

        private void btn_out_Click(object sender, EventArgs e)
        {
            string pname = tbox_name.Text;
            int cnt = (int)nud_count.Value;
            cnt = SFClient.SendOut(ip, port, pname, cnt);
        }

        private void tbar_count_Scroll(object sender, EventArgs e)
        {
            lb_count.Text = tbar_count.Value.ToString();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.3.2 SFCient 구현&lt;/h4&gt;
&lt;p&gt;SFClient 클래스를 추가하고 다음처럼 구현합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606457997083&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.IO;
using System.Net;
using System.Net.Sockets;

namespace 창고_제어
{
    internal class SFClient
    {
        enum MsgType
        {
            MT_IN, MT_OUT
        }
        internal static void SendIn(string ip, int port, string pname, int cnt)
        {
            Socket sock = Connect(ip, port);
            byte[] packet = MakePacket(MsgType.MT_IN,pname, cnt);
            sock.Send(packet);
            sock.Close();
        }
        internal static int SendOut(string ip, int port, string pname, int cnt)
        {
            Socket sock = Connect(ip, port);
            byte[] packet = MakePacket(MsgType.MT_OUT, pname, cnt);
            sock.Send(packet);
            byte[] p2 = new byte[1024];
            sock.Close();
            return 0;
        }
        private static byte[] MakePacket(MsgType mt,string pname, int cnt)
        {
            //전송 메시지 ID, 전송메시지 
            byte[] packet = new byte[1024];
            MemoryStream ms = new MemoryStream(packet);
            BinaryWriter bw = new BinaryWriter(ms);
            bw.Write((int)mt);
            bw.Write(pname);
            bw.Write(cnt);
            bw.Close();
            ms.Close();
            return packet;
        }

        private static Socket Connect(string ip, int port)
        {
            Socket sock = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);
            IPAddress addr = IPAddress.Parse(ip);
            IPEndPoint end = new IPEndPoint(addr, port);
            sock.Connect(end);
            return sock;
        }



        private static int UnPackInt(byte[] p2)
        {
            MemoryStream ms = new MemoryStream(p2);
            BinaryReader br = new BinaryReader(ms);
            int value = br.ReadInt32();
            br.Close();
            ms.Close();
            return value;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>C#</category>
      <category>Windows Forms</category>
      <category>부재 관리</category>
      <category>소켓 통신</category>
      <category>스마트 팩토리</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3550</guid>
      <comments>https://ehclub.tistory.com/3550#entry3550comment</comments>
      <pubDate>Fri, 27 Nov 2020 09:39:04 +0900</pubDate>
    </item>
    <item>
      <title>[C#, Widows Form 실습] Wafer 등록기 - 반도체 제어시스템 시뮬</title>
      <link>https://ehclub.tistory.com/3549</link>
      <description>&lt;p&gt;Wafer 등록기를 만들어보자.&lt;/p&gt;
&lt;p&gt;Wafer에는 제조회사, 제품명, 방향(100,110,111), 반경, 타입(P타입, N타입)을 속성으로 갖는다.&lt;/p&gt;
&lt;p&gt;다음과 같은 폼에 의해 사용자와 상호작용하는 Wafer 등록기를 작성하자.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bdhnO8/btqOeBLqd5E/4MDfg86xAW7B4soS1XTlgK/%5B%EA%B8%B0%EC%88%A0%20%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4%5DWafer%20%EC%9E%85%EB%A0%A5%EA%B8%B0-%20Windows%20Forms%20%EA%B8%B0%EB%B3%B8%20%EC%BB%A8%ED%8A%B8%EB%A1%A4.docx?attach=1&amp;amp;knm=tfile.docx&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;[기술 포트폴리오]Wafer 입력기- Windows Forms 기본 컨트롤.docx&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;컨트롤 배치.PNG&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LUsy6/btqN6U6AHjs/8RjPb0TY0QAHpGm097f2yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LUsy6/btqN6U6AHjs/8RjPb0TY0QAHpGm097f2yK/img.png&quot; data-alt=&quot;[그림] 컨트롤 배치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LUsy6/btqN6U6AHjs/8RjPb0TY0QAHpGm097f2yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLUsy6%2FbtqN6U6AHjs%2F8RjPb0TY0QAHpGm097f2yK%2Fimg.png&quot; data-filename=&quot;컨트롤 배치.PNG&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림] 컨트롤 배치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 프로젝트 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Wafer Manager 프로젝트를 생성하자.&lt;/p&gt;
&lt;p&gt;프로젝트 유형:&amp;nbsp; Windows Forms 앱(.NET Framework)&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Wafer 클래스 추가&lt;/h3&gt;
&lt;p&gt;프로젝트 컨텍스트 메뉴(오른쪽 마우스 클릭 시 나오는 메뉴)에서 새 항목을 선택한 후 Wafer 클래스를 추가하자.&lt;/p&gt;
&lt;p&gt;그리고 다음과 같이 클래스를 정의한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/buEZgb/btqN8eQ3n0W/7PAgyBHAUp8sjb7TPovKO1/Wafer.cs?attach=1&amp;amp;knm=tfile.cs&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Wafer.cs&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1606199502235&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace Wafer_Manager
{
    public class Wafer
    {
        public string Company
        {
            get;//가져오기
            set;//설정하기
            //private set; //외부에서 설정하기를 막고자 할 때
        }
        public string Name
        {
            get;
            set;
        }
        public WDirection WDir
        {
            get;
            set;
        }
        public double Radius
        {
            get;
            set;
        }
        public bool PType
        {
            get;
            set;
        }
        public Wafer(string company, string name,
            WDirection wdir, double radius, bool ptype)
        {
            Company = company;
            Name = name;
            WDir = wdir;
            Radius = radius;
            PType = ptype;
        }
    }
    public enum WDirection
    {
        WD_111,WD_100, WD_110
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 컨트롤 배치&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;&quot;&lt;/b&gt;&lt;span&gt;&lt;b&gt;[그림] 컨트롤 배치&quot;&lt;/b&gt;처럼 자식 컨트롤을 배치합니다.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;btn_remove의 Enable 속성은 False로 설정하세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;4. 이벤트 핸들러 등록&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;세 개의 버튼의 Click 이벤트 핸들러와 lbox_wafer의 선택 항목 변경 이벤트 핸들러를 등록하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;현재까지의 Fom1.Designer.cs 코드는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/k3AWC/btqN8ZsCioS/KTcw2TFLq3SYkP3J2EkjY1/Form1.Designer.cs?attach=1&amp;amp;knm=tfile.cs&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Form1.Designer.cs&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1606202443985&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace Wafer_Manager
{
    partial class Form1
    {
        /// &amp;lt;summary&amp;gt;
        /// 필수 디자이너 변수입니다.
        /// &amp;lt;/summary&amp;gt;
        private System.ComponentModel.IContainer components = null;

        /// &amp;lt;summary&amp;gt;
        /// 사용 중인 모든 리소스를 정리합니다.
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;disposing&quot;&amp;gt;관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.&amp;lt;/param&amp;gt;
        protected override void Dispose(bool disposing)
        {
            if (disposing &amp;amp;&amp;amp; (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form 디자이너에서 생성한 코드

        /// &amp;lt;summary&amp;gt;
        /// 디자이너 지원에 필요한 메서드입니다. 
        /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
        /// &amp;lt;/summary&amp;gt;
        private void InitializeComponent()
        {
            this.lbox_wafer = new System.Windows.Forms.ListBox();
            this.label1 = new System.Windows.Forms.Label();
            this.cbox_company = new System.Windows.Forms.ComboBox();
            this.btn_com_add = new System.Windows.Forms.Button();
            this.label2 = new System.Windows.Forms.Label();
            this.tbox_name = new System.Windows.Forms.TextBox();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.rb_111 = new System.Windows.Forms.RadioButton();
            this.rb_110 = new System.Windows.Forms.RadioButton();
            this.rb_100 = new System.Windows.Forms.RadioButton();
            this.label3 = new System.Windows.Forms.Label();
            this.nud_radius = new System.Windows.Forms.NumericUpDown();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.rb_n = new System.Windows.Forms.RadioButton();
            this.rb_p = new System.Windows.Forms.RadioButton();
            this.btn_add = new System.Windows.Forms.Button();
            this.btn_remove = new System.Windows.Forms.Button();
            this.groupBox1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.nud_radius)).BeginInit();
            this.groupBox2.SuspendLayout();
            this.SuspendLayout();
            // 
            // lbox_wafer
            // 
            this.lbox_wafer.FormattingEnabled = true;
            this.lbox_wafer.ItemHeight = 24;
            this.lbox_wafer.Location = new System.Drawing.Point(13, 24);
            this.lbox_wafer.Name = &quot;lbox_wafer&quot;;
            this.lbox_wafer.Size = new System.Drawing.Size(199, 388);
            this.lbox_wafer.TabIndex = 0;
            this.lbox_wafer.SelectedIndexChanged += new System.EventHandler(this.lbox_wafer_SelectedIndexChanged);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(231, 36);
            this.label1.Name = &quot;label1&quot;;
            this.label1.Size = new System.Drawing.Size(90, 24);
            this.label1.TabIndex = 1;
            this.label1.Text = &quot;제조사:&quot;;
            this.label1.Click += new System.EventHandler(this.label1_Click);
            // 
            // cbox_company
            // 
            this.cbox_company.FormattingEnabled = true;
            this.cbox_company.Location = new System.Drawing.Point(315, 33);
            this.cbox_company.Name = &quot;cbox_company&quot;;
            this.cbox_company.Size = new System.Drawing.Size(192, 32);
            this.cbox_company.TabIndex = 2;
            // 
            // btn_com_add
            // 
            this.btn_com_add.Location = new System.Drawing.Point(514, 33);
            this.btn_com_add.Name = &quot;btn_com_add&quot;;
            this.btn_com_add.Size = new System.Drawing.Size(119, 32);
            this.btn_com_add.TabIndex = 3;
            this.btn_com_add.Text = &quot;추가&quot;;
            this.btn_com_add.UseVisualStyleBackColor = true;
            this.btn_com_add.Click += new System.EventHandler(this.btn_com_add_Click);
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(231, 89);
            this.label2.Name = &quot;label2&quot;;
            this.label2.Size = new System.Drawing.Size(90, 24);
            this.label2.TabIndex = 4;
            this.label2.Text = &quot;제품명:&quot;;
            // 
            // tbox_name
            // 
            this.tbox_name.Location = new System.Drawing.Point(315, 86);
            this.tbox_name.Name = &quot;tbox_name&quot;;
            this.tbox_name.Size = new System.Drawing.Size(192, 35);
            this.tbox_name.TabIndex = 5;
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.Add(this.rb_111);
            this.groupBox1.Controls.Add(this.rb_110);
            this.groupBox1.Controls.Add(this.rb_100);
            this.groupBox1.Location = new System.Drawing.Point(235, 149);
            this.groupBox1.Name = &quot;groupBox1&quot;;
            this.groupBox1.Size = new System.Drawing.Size(398, 66);
            this.groupBox1.TabIndex = 6;
            this.groupBox1.TabStop = false;
            // 
            // rb_111
            // 
            this.rb_111.AutoSize = true;
            this.rb_111.Location = new System.Drawing.Point(233, 32);
            this.rb_111.Name = &quot;rb_111&quot;;
            this.rb_111.Size = new System.Drawing.Size(67, 28);
            this.rb_111.TabIndex = 2;
            this.rb_111.TabStop = true;
            this.rb_111.Text = &quot;111&quot;;
            this.rb_111.UseVisualStyleBackColor = true;
            // 
            // rb_110
            // 
            this.rb_110.AutoSize = true;
            this.rb_110.Location = new System.Drawing.Point(134, 32);
            this.rb_110.Name = &quot;rb_110&quot;;
            this.rb_110.Size = new System.Drawing.Size(67, 28);
            this.rb_110.TabIndex = 1;
            this.rb_110.TabStop = true;
            this.rb_110.Text = &quot;110&quot;;
            this.rb_110.UseVisualStyleBackColor = true;
            // 
            // rb_100
            // 
            this.rb_100.AutoSize = true;
            this.rb_100.Location = new System.Drawing.Point(26, 35);
            this.rb_100.Name = &quot;rb_100&quot;;
            this.rb_100.Size = new System.Drawing.Size(67, 28);
            this.rb_100.TabIndex = 0;
            this.rb_100.TabStop = true;
            this.rb_100.Text = &quot;100&quot;;
            this.rb_100.UseVisualStyleBackColor = true;
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(235, 244);
            this.label3.Name = &quot;label3&quot;;
            this.label3.Size = new System.Drawing.Size(66, 24);
            this.label3.TabIndex = 7;
            this.label3.Text = &quot;반경:&quot;;
            // 
            // nud_radius
            // 
            this.nud_radius.Location = new System.Drawing.Point(327, 242);
            this.nud_radius.Name = &quot;nud_radius&quot;;
            this.nud_radius.Size = new System.Drawing.Size(201, 35);
            this.nud_radius.TabIndex = 8;
            // 
            // groupBox2
            // 
            this.groupBox2.Controls.Add(this.rb_n);
            this.groupBox2.Controls.Add(this.rb_p);
            this.groupBox2.Location = new System.Drawing.Point(235, 291);
            this.groupBox2.Name = &quot;groupBox2&quot;;
            this.groupBox2.Size = new System.Drawing.Size(398, 73);
            this.groupBox2.TabIndex = 9;
            this.groupBox2.TabStop = false;
            // 
            // rb_n
            // 
            this.rb_n.AutoSize = true;
            this.rb_n.Location = new System.Drawing.Point(192, 35);
            this.rb_n.Name = &quot;rb_n&quot;;
            this.rb_n.Size = new System.Drawing.Size(90, 28);
            this.rb_n.TabIndex = 1;
            this.rb_n.TabStop = true;
            this.rb_n.Text = &quot;N타입&quot;;
            this.rb_n.UseVisualStyleBackColor = true;
            // 
            // rb_p
            // 
            this.rb_p.AutoSize = true;
            this.rb_p.Location = new System.Drawing.Point(7, 35);
            this.rb_p.Name = &quot;rb_p&quot;;
            this.rb_p.Size = new System.Drawing.Size(91, 28);
            this.rb_p.TabIndex = 0;
            this.rb_p.TabStop = true;
            this.rb_p.Text = &quot;P타입&quot;;
            this.rb_p.UseVisualStyleBackColor = true;
            // 
            // btn_add
            // 
            this.btn_add.Location = new System.Drawing.Point(235, 370);
            this.btn_add.Name = &quot;btn_add&quot;;
            this.btn_add.Size = new System.Drawing.Size(166, 35);
            this.btn_add.TabIndex = 10;
            this.btn_add.Text = &quot;추가&quot;;
            this.btn_add.UseVisualStyleBackColor = true;
            this.btn_add.Click += new System.EventHandler(this.btn_add_Click);
            // 
            // btn_remove
            // 
            this.btn_remove.Enabled = false;
            this.btn_remove.Location = new System.Drawing.Point(407, 370);
            this.btn_remove.Name = &quot;btn_remove&quot;;
            this.btn_remove.Size = new System.Drawing.Size(166, 35);
            this.btn_remove.TabIndex = 11;
            this.btn_remove.Text = &quot;삭제&quot;;
            this.btn_remove.UseVisualStyleBackColor = true;
            this.btn_remove.Click += new System.EventHandler(this.btn_remove_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 24F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(655, 426);
            this.Controls.Add(this.btn_remove);
            this.Controls.Add(this.btn_add);
            this.Controls.Add(this.groupBox2);
            this.Controls.Add(this.nud_radius);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.tbox_name);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.btn_com_add);
            this.Controls.Add(this.cbox_company);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.lbox_wafer);
            this.Font = new System.Drawing.Font(&quot;굴림&quot;, 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
            this.Margin = new System.Windows.Forms.Padding(6);
            this.Name = &quot;Form1&quot;;
            this.Text = &quot;Wafer 등록기&quot;;
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.nud_radius)).EndInit();
            this.groupBox2.ResumeLayout(false);
            this.groupBox2.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.ListBox lbox_wafer;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.ComboBox cbox_company;
        private System.Windows.Forms.Button btn_com_add;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.TextBox tbox_name;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.RadioButton rb_111;
        private System.Windows.Forms.RadioButton rb_110;
        private System.Windows.Forms.RadioButton rb_100;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.NumericUpDown nud_radius;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.RadioButton rb_n;
        private System.Windows.Forms.RadioButton rb_p;
        private System.Windows.Forms.Button btn_add;
        private System.Windows.Forms.Button btn_remove;
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 이벤트 핸들러 구현&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.1 btn_com_add의 Click 이벤트 핸들러&lt;/h4&gt;
&lt;p&gt;콤보 박스에 입력한 내용 혹은 현재 보이는 내용은 Text 속성을 통해 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;콤보 박스에 항목을 추가할 때는 Items 컬렉션에 Add 메서드를 호출합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606205997277&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void btn_com_add_Click(object sender, EventArgs e)
        {
            string company = cbox_company.Text;
            cbox_company.Items.Add(company);
            cbox_company.Text = &quot;&quot;;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.2 btn_add의 Click 이벤트 핸들러&lt;/h4&gt;
&lt;p&gt;생성할 Wafer 개체의 속성 값을 얻어옵니다.&lt;/p&gt;
&lt;p&gt;회사 이름은 cbox_company의 Text 속성으로 얻어옵니다.&lt;/p&gt;
&lt;p&gt;제품 이름은 tbox_name의 Text 속성으로 얻어옵니다.&lt;/p&gt;
&lt;p&gt;방향은 관련 RadioButton의 체크 상태에 따라 다릅니다. 이를 얻어오는 메서드(GetWDirection)를 별도로 만들어서 얻어옵시다.&lt;/p&gt;
&lt;p&gt;반경은 nud_radius의 Value 속성으로 얻어옵니다. 주의할 점은 Value 속성의 타입은 decimal인데 Wafer의 radius는 double 형식이므로 형식 변환을 요구합니다.&lt;/p&gt;
&lt;p&gt;타입은 두 가지 중에 하나이므로 rb_p의 Checked 상태로 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;이렇게 얻어온 값으로 Wafer 개체를 생성하여 lbox_wafer의 Items 컬렉션에 추가합니다.&lt;/p&gt;
&lt;p&gt;컨트롤의 상태를 다음 Wafer를 입력하기 쉽게 리셋합니다. 이 부분도 별도의 메서드(ResetControl)로 만들어서 수행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606206048469&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void btn_add_Click(object sender, EventArgs e)
        {
            string company = cbox_company.Text;
            string pname = tbox_name.Text;
            WDirection wd = GetWDirection();
            double radius = (double)nud_radius.Value;
            bool ptype = rb_p.Checked;
            Wafer wafer = new Wafer(company, pname, wd, radius, ptype);
            lbox_wafer.Items.Add(wafer);
            ResetControl();
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GetWDirection 메서드는 방향 관련 RadioButton의 Checked 속성 값에 따라 반환 값을 결정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606206381565&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private WDirection GetWDirection()
        {
            if(rb_100.Checked)
            {
                return WDirection.WD_100;
            }
            if(rb_110.Checked)
            {
                return WDirection.WD_110;
            }
            return WDirection.WD_111;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ResetControl 메서드 각 컨트롤의 상태를 적절할 값으로 설정합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1606206623525&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void ResetControl()
        {
            cbox_company.Text = &quot;&quot;;
            tbox_name.Text = &quot;&quot;;
            rb_100.Checked = true;
            nud_radius.Value = 0;
            rb_p.Checked = true;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.3 btn_remove의 Click 이벤트 핸들러&lt;/h4&gt;
&lt;p&gt;lbox_wafer의 선택 항목 인덱스를 얻어옵니다.&lt;/p&gt;
&lt;p&gt;lbox_wafer의 Items 컨트롤에서 해당 인덱스 요소를 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1606206742206&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void btn_remove_Click(object sender, EventArgs e)
        {
            int index = lbox_wafer.SelectedIndex;
            lbox_wafer.Items.RemoveAt(index);
        }  &lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5.4 lbox_wafer의 선택 항목 변경 이벤트 핸들러&lt;/h4&gt;
&lt;p&gt;선택 항목이 없다면 btn_remove를 비활성화 상태로 설정하고 각 컨트롤 상태를 리셋합니다.&lt;/p&gt;
&lt;p&gt;선택 항목이 있다면 btn_remove를 활성화 상태로 설정하고 선택 항목의 아이템을 Wafer 형식 개체로 참조합니다.&lt;/p&gt;
&lt;p&gt;wafer 개체의 값으로 컨트롤의 상태를 설정합니다. 이 부분은 별도의 메서드로 정의합시다.&lt;/p&gt;
&lt;pre id=&quot;code_1606206787133&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void lbox_wafer_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(lbox_wafer.SelectedIndex == -1)//선택 항목이 없다면
            {
                btn_remove.Enabled = false;
                ResetControl();
                return;
            }
            btn_remove.Enabled = true;
            Wafer wafer = lbox_wafer.SelectedItem as Wafer;
            SetControlWafer(wafer);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;회사 이름으로 cbot_company의 Text 속성을 설정합니다.&lt;/p&gt;
&lt;p&gt;제품 이름으로 tbox_name의 Text 속성을 설정합니다.&lt;/p&gt;
&lt;p&gt;wafer의 방향을 설정하는 부분은 별도의 메서드를 만들어서 사용할게요.&lt;/p&gt;
&lt;p&gt;반경으로 nud_radius의 Value 속성을 설정합니다. 형식이 다르므로 decimal로 명시적 형변환합니다.&lt;/p&gt;
&lt;p&gt;wafer 타입 설정도 별도의 메서드를 만들어서 사용할게요.&lt;/p&gt;
&lt;pre id=&quot;code_1606206947861&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void SetControlWafer(Wafer wafer)
        {
            cbox_company.Text = wafer.Company;
            tbox_name.Text = wafer.Name;
            SetWDir(wafer.WDir);
            nud_radius.Value = (decimal)wafer.Radius;
            SetType(wafer.PType);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;방향과 타입을 결정하는 메서드를 정의합시다.&lt;/p&gt;
&lt;pre id=&quot;code_1606207096566&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        private void SetType(bool pt)
        {
            if(pt)
            {
                rb_p.Checked = true;
            }
            else
            {
                rb_n.Checked = true;
            }
        }

        private void SetWDir(WDirection wd)
        {
            switch (wd)
            {
                case WDirection.WD_100: rb_100.Checked = true; break;
                case WDirection.WD_110: rb_110.Checked = true; break;
                case WDirection.WD_111: rb_111.Checked = true; break;
            }
        }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. Form1.cs 코드&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/HBvJY/btqOda7SFSl/2rKIStJ5y6DbHMLqvHeLvK/Form1.cs?attach=1&amp;amp;knm=tfile.cs&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Form1.cs&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1606205804622&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Windows.Forms;

namespace Wafer_Manager
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }



        private void btn_com_add_Click(object sender, EventArgs e)
        {
            string company = cbox_company.Text;
            cbox_company.Items.Add(company);
            cbox_company.Text = &quot;&quot;;
        }

        private void btn_add_Click(object sender, EventArgs e)
        {
            string company = cbox_company.Text;
            string pname = tbox_name.Text;
            WDirection wd = GetWDirection();
            double radius = (double)nud_radius.Value;
            bool ptype = rb_p.Checked;
            Wafer wafer = new Wafer(company, pname, wd, radius, ptype);
            lbox_wafer.Items.Add(wafer);
            ResetControl();
        }

        private void ResetControl()
        {
            cbox_company.Text = &quot;&quot;;
            tbox_name.Text = &quot;&quot;;
            rb_100.Checked = true;
            nud_radius.Value = 0;
            rb_p.Checked = true;
        }

        private WDirection GetWDirection()
        {
            if(rb_100.Checked)
            {
                return WDirection.WD_100;
            }
            if(rb_110.Checked)
            {
                return WDirection.WD_110;
            }
            return WDirection.WD_111;
        }

        private void btn_remove_Click(object sender, EventArgs e)
        {
            int index = lbox_wafer.SelectedIndex;
            lbox_wafer.Items.RemoveAt(index);
        }

        private void lbox_wafer_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(lbox_wafer.SelectedIndex == -1)//선택 항목이 없다면
            {
                btn_remove.Enabled = false;
                ResetControl();
                return;
            }
            btn_remove.Enabled = true;
            Wafer wafer = lbox_wafer.SelectedItem as Wafer;
            SetControlWafer(wafer);
        }

        private void SetControlWafer(Wafer wafer)
        {
            cbox_company.Text = wafer.Company;
            tbox_name.Text = wafer.Name;
            SetWDir(wafer.WDir);
            nud_radius.Value = (decimal)wafer.Radius;
            SetType(wafer.PType);
        }

        private void SetType(bool pt)
        {
            if(pt)
            {
                rb_p.Checked = true;
            }
            else
            {
                rb_n.Checked = true;
            }
        }

        private void SetWDir(WDirection wd)
        {
            switch(wd)
            {
                case WDirection.WD_100: rb_100.Checked = true; break;
                case WDirection.WD_110: rb_110.Checked = true; break;
                case WDirection.WD_111: rb_111.Checked = true; break;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>C#</category>
      <category>Wafer 관리 응용</category>
      <category>Windows Forms 앱</category>
      <category>반도체 제어시스템</category>
      <category>실습</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3549</guid>
      <comments>https://ehclub.tistory.com/3549#entry3549comment</comments>
      <pubDate>Tue, 24 Nov 2020 15:33:22 +0900</pubDate>
    </item>
    <item>
      <title>[python] 뉴스 검색기V04 feat.네이버 개발자센터</title>
      <link>https://ehclub.tistory.com/3548</link>
      <description>&lt;p&gt;&lt;b&gt;DB 설계&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1605169309418&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE [dbo].News
(
    [nid] INT NOT NULL PRIMARY KEY IDENTITY, 
    [title] VARCHAR(200) NOT NULL, 
    [link] VARCHAR(200) NOT NULL, 
    [description] VARCHAR(MAX) NOT NULL, 
    [pubdate] DATETIME NOT NULL,
    [mcnt] int NOT NULL
    CONSTRAINT TU UNIQUE(link)
)
===================================================
CREATE TABLE [dbo].Morpheme
(
    [mid] INT NOT NULL PRIMARY KEY IDENTITY, 
    [word] VARCHAR(50) NOT NULL, 
    [rcnt] INT NOT NULL,
    CONSTRAINT WU UNIQUE(word)
)
===================================================
CREATE TABLE [dbo].Inverse
(
    [nid] INT NOT NULL, 
    [mid] INT NOT NULL, 
    [rcnt] INT NOT NULL 
)

관계 추가
News(nid) - Inverse(nid)
Morpheme(mid) - Inverse(mid)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;관계 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;관계1.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tK9sZ/btqNgsW2WoT/pjYYpAzcgoF2Q3J3Vkbwlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tK9sZ/btqNgsW2WoT/pjYYpAzcgoF2Q3J3Vkbwlk/img.png&quot; data-alt=&quot;News 테이블의 nid와 Inverse 테이블의 nid&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tK9sZ/btqNgsW2WoT/pjYYpAzcgoF2Q3J3Vkbwlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtK9sZ%2FbtqNgsW2WoT%2FpjYYpAzcgoF2Q3J3Vkbwlk%2Fimg.png&quot; data-filename=&quot;관계1.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;News 테이블의 nid와 Inverse 테이블의 nid&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;관곚.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKDoOz/btqNe6Haoqz/tkiFPAK0cfKOqQLUhJG440/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKDoOz/btqNe6Haoqz/tkiFPAK0cfKOqQLUhJG440/img.png&quot; data-alt=&quot;Morpheme 테이블의 mid 와 Inverse 테이블의 mid&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKDoOz/btqNe6Haoqz/tkiFPAK0cfKOqQLUhJG440/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKDoOz%2FbtqNe6Haoqz%2FtkiFPAK0cfKOqQLUhJG440%2Fimg.png&quot; data-filename=&quot;관곚.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Morpheme 테이블의 mid 와 Inverse 테이블의 mid&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;EHHelper.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/VAxGJ/btqNf8xLyCa/0SjOYKNDYtC4trTJIOEpy1/EHHelper.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;EHHelper.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169429339&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#EHHelper.py
class EHHelper:
    #src:&quot;&amp;lt;b&amp;gt;음냐뤼, quot; 가나다quot;&amp;lt;/b&amp;gt;
    #RemoveTag
    #src:&quot;음냐뤼, quot; 가나다quot;&quot;
    #RemoveHtmlSpecialCh
    #src:&quot;음냐뤼, 가나다&quot;
    #RemoveSymbol
    #src:&quot;음냐뤼 가나다&quot;
    @staticmethod
    def EmitTagAndSpecialCh(str):
        str = EHHelper.RemoveTag(str)
        str = EHHelper.RemoveHtmlSpecialCh(str)
        str = EHHelper.RemoveSymbol(str)
        return str
    #태그를 제거
    @staticmethod
    def RemoveTag(src):
        try:
            while True:
                s,e = EHHelper.FindTag(src)
                if s&amp;lt;e:
                    src = src[:s]+src[e+1:] #태그를 제거하는 구문
                else:#'&amp;gt;'가 '&amp;lt;'보다 앞에 있을 때
                    src = src[:e]+src[e+1:]#'&amp;gt;'만 제거하는 구문
        except:# 더 이상 태그가 없음
            return src
    @staticmethod
    def FindTag(src):
        s = src.index('&amp;lt;')
        e = src.index('&amp;gt;')
        return s,e
    @staticmethod
    def RemoveSymbol(src):
        dest=&quot;&quot;
        for elem in src:
            if str.isalpha(elem) or str.isspace(elem):
                dest += elem
        return dest
    @staticmethod
    def RemoveHtmlSpecialCh(src):
        try:
            while True:
                s,e = EHHelper.FindHtmlSpecialCh(src)
                if s&amp;lt;e:
                    src = src[:s]+src[e+1:] #특수 문자를 제거
                else:
                    src = src[:e]+src[e+1:]#';'만 제거
        except:# 더 이상 특수 문자 없음
            return src
    @staticmethod
    def FindHtmlSpecialCh(src):
        s = src.index('&amp;amp;')
        e = src.index(';')
        return s,e
    #mssql에 한글 문자열을 파이썬에 한글 문자열로 변환
    @staticmethod
    def MssqlstrToStrKor(src):
        src = src.encode('ISO-8859-1')
        src = src.decode('euc-kr')
        return src&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;InverseSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ceyRHS/btqNjULZ4Ws/2kb3L6KsoeDILZjeKMcCS0/InverseSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;InverseSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169457627&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#InverseSql.py
import pymssql
class InverseSql:
    @staticmethod
    def AddInverseItem(nid,mid,rcnt):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        s_pre = &quot;Insert into Inverse(nid,mid,rcnt) values&quot;
        s_post = str.format(&quot;({0},{1},{2})&quot;,nid,mid,rcnt)
        query = s_pre+s_post
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def FindInv(mid):
        inv_col = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;Select nid,rcnt from Inverse where mid={0}&quot;,mid)
        cursor.execute(query)
        row = cursor.fetchone()  
        while row:
            inv_col.append(row)
            row = cursor.fetchone()
        conn.close()
        return inv_col&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Morpheme.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1605169483922&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Morpheme.py  - 형태소 클래스
class Morpheme:
    def __init__(self,word):
        self.word = word #단어 
        self.ref = 1           #참조 개수
    def Merge(self,other): # 병합하기
        if self.IsEqual(other):
            self.ref = self.ref + other.ref
    def IsEqual(self,other): #같은 단어를 갖는 형태소인지 판별
        return self.word ==  other.word
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;MorphemeParser.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bAN8eD/btqNe6UGjMh/AJyogbeJYKZxcvMoQCp3lk/MorphemeParser.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MorphemeParser.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169504594&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MorphemeParser.py - 형태소 분석기
from Morpheme import Morpheme
from EHHelper import EHHelper
class MorphemeParser:
    @staticmethod
    def Parse(src):
        morphes = list() 
        #원본 문자열에 특수 기호를 제거 및 공백 기준으로 분리
        src = EHHelper.EmitTagAndSpecialCh(src)
        msrc = src.split(' ')
        #각 단어를 형태소 컬렉션에 추가
        for elem in msrc:
            if str.isalpha(elem):
                morphes.append(Morpheme(elem))
        #중복 형태소를 합치는 공정
        morphes = MorphemeParser.Merge(morphes)
        return morphes

    @staticmethod
    def Merge(morphes):
        remoes = list()#병합한 형태소를 보관할 컬렉션
        for morph in morphes:#원본 컬렉션에 있는 각각의 형태소를
            rcnt = len(remoes)#병합한 컬렉션에 형태소 개수 구하기
            flag = False #morph와 같은 단어가 remoes에 없다고 가정
            #morph가 remoes컬렉션에 있다면 병합
            for index in range(0,rcnt):
                if remoes[index].word == morph.word:
                    remoes[index].Merge(morph)
                    flag = True#병합하였음을 마킹
                    break            
            if flag == False:#morph와 같은 단어는 remoes에 없음
                remoes.append(morph)
        return remoes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;MorphemeSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/FRigH/btqNfr5lUc8/eLCX8bTviNGLaTSIAFgLx0/MorphemeSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MorphemeSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169533514&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MorphemeSql.py
import pymssql
class MorphemeSql:
    @staticmethod
    def AddMorpheme(mo):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;Insert into Morpheme(word) values('{0}')&quot;,mo.word)
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def FindMid(word):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select mid from Morpheme where (word='{0}')&quot;,word)
        cursor.execute(query)
        row = cursor.fetchone()
        conn.commit()
        conn.close()
        if row:
            return row[0]
        return 0
    @staticmethod
    def ListMorpheme():
        moes = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select word from Morpheme&quot;)
        cursor.execute(query)
        row = cursor.fetchone()  
        while row:
            moes.append(row[0]) 
            row = cursor.fetchone()
        conn.close()
        return moes

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NAWidget.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cUOABI/btqNhaWbVhc/PKsk1fVlKOpcP8btYaJ6y0/NAWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NAWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169572346&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NAWidget.py - 뉴스 분석 Widget
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from NewsSql import NewsSql
from MorphemeSql import MorphemeSql
from InverseSql import InverseSql
from EHHelper import EHHelper
class NAWidget(QDialog):
    def __init__(self,pa):
        super().__init__(pa)
        self.resize(2000,1000)
        lb_mo = QLabel(&quot;형태소 목록&quot;,self)
        lb_mo.move(20,20)
        self.lbox_mo = QListWidget(self)
        self.lbox_mo.move(20,100)
        self.lbox_mo.resize(400,880)
        lb_news = QLabel(&quot;포함 뉴스 목록&quot;,self)
        lb_news.move(440,20)
        self.tb_news = QTableWidget(self)
        self.tb_news.move(440,100)
        self.tb_news.resize(1540,880)
        self.tb_news.setColumnCount(4)
        self.tb_news.setColumnWidth(0,self.tb_news.width()/5)
        self.tb_news.setColumnWidth(1,self.tb_news.width()*2/5)
        self.tb_news.setColumnWidth(2,self.tb_news.width()/6)
        self.tb_news.setColumnWidth(3,self.tb_news.width()/6)
        self.tb_news.setHorizontalHeaderLabels\
            ([&quot;제목&quot;,&quot;링크&quot;,&quot;전체 개수&quot;,&quot;참조 개수&quot;])
        self.lbox_mo.currentRowChanged.connect(self.OnSelectNews)
        self.ListMorpheme()
    def ListMorpheme(self):
        temp = &quot;지금 합시다.&quot;
        moes = MorphemeSql.ListMorpheme()
        for mo in moes:
            mo = EHHelper.MssqlstrToStrKor(mo)
            self.lbox_mo.addItem(mo)
    def OnSelectNews(self):
        item = self.lbox_mo.currentItem()
        word = item.text()
        self.tb_news.setRowCount(0)#테이블 내용 모두 삭제
        mid = MorphemeSql.FindMid(word)
        ins = InverseSql.FindInv(mid)
        self.tb_news.setRowCount(len(ins))
        for ri in range(0,len(ins)):
            nid,rcnt = ins[ri]
            news = NewsSql.FindNewsByNid(nid)
            title,link,description,pubdate,mcnt = news
            title = EHHelper.MssqlstrToStrKor(title)
            self.tb_news.setCellWidget(ri,0,QLabel(title))
            self.tb_news.setCellWidget(ri,1,QLabel(link))
            self.tb_news.setCellWidget(ri,2,QLabel(str(mcnt)))
            self.tb_news.setCellWidget(ri,3,QLabel(str(rcnt)))
            self.tb_news.setRowHeight(ri,70)


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NCWindow.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/lieoy/btqNjVKVMn9/huTNp7a4TnVGZqZ3LBQSX0/NCWindow.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NCWindow.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169604042&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NCWindow.py
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from NewsAnaylizer import NewsAnaylizer
from NewsSql import NewsSql
from MorphemeSql import MorphemeSql
from InverseSql import InverseSql
import _thread
from NAWidget import NAWidget
from NSDialog import NSDialog
def Analyze(datas):
    for data in datas:
        news,m1,m2 = data
        news.PreProcess()
        NewsSql.AddNews(news)
        NewsSql.UpdateMCnt(news.link,len(m1)+len(m2))
        nid = NewsSql.FindNid(news.link)
        for mo in m1:
            MorphemeSql.AddMorpheme(mo)
            mid = MorphemeSql.FindMid(mo.word)
            InverseSql.AddInverseItem(nid,mid,mo.ref)
        for mo in m2:
            MorphemeSql.AddMorpheme(mo)
            mid = MorphemeSql.FindMid(mo.word)
            InverseSql.AddInverseItem(nid,mid,mo.ref)

class NCWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle(&quot;수집기(feat.네이버 개발자 센터)&quot;)
        self.na = NewsAnaylizer()
        self.resize(2000,1000)
        self.te_query = QTextEdit(self)
        self.te_query.move(20,20)
        self.te_query.resize(800,60)
        self.btn_search = QPushButton(&quot;검색&quot;,self)
        self.btn_search.move(840,20)
        self.btn_search.resize(200,60)
        self.tb_news = QTableWidget(self)
        self.tb_news.move(20,100)
        self.tb_news.resize(1960,880)
        self.tb_news.setColumnCount(3)
        self.tb_news.setColumnWidth(0,self.tb_news.width()*2/10)
        self.tb_news.setColumnWidth(1,self.tb_news.width()*6/10)
        self.tb_news.setColumnWidth(2,self.tb_news.width()*2/10-10)
        self.tb_news.setHorizontalHeaderLabels([&quot;제목&quot;,&quot;주소&quot;,&quot;단어 개수&quot;])
        self.btn_search.clicked.connect(self.OnSearch)
        self.btn_analyze = QPushButton(&quot;분석&quot;, self)
        self.btn_analyze.move(1760,20)
        self.btn_analyze.resize(200,60)
        self.btn_analyze.clicked.connect(self.OnAnalyze)
        self.btn_view_sdlg = QPushButton(&quot;검색기 띄우기&quot;,self)
        self.btn_view_sdlg.move(1400,20)
        self.btn_view_sdlg.resize(300,60)
        self.btn_view_sdlg.clicked.connect(self.OnShowSearchDlg)
    def OnShowSearchDlg(self):
        nsd = NSDialog(self)
        nsd.show()
    def OnAnalyze(self):
        naw = NAWidget(self)
        naw.show()
    def OnSearch(self):
        self.tb_news.setRowCount(0)
        query = self.te_query.toPlainText()
        datas =  self.na.Analize(query)
        self.tb_news.setRowCount(len(datas))
        for ri in range(0,len(datas)):
            news ,mo1, mo2 = datas[ri]
            mcnt = len(mo1)+len(mo2)
            self.tb_news.setCellWidget(ri,0,QLabel(news.title))
            self.tb_news.setCellWidget(ri,1,QLabel(news.link))
            self.tb_news.setCellWidget(ri,2,QLabel(str(mcnt)))
            self.tb_news.setRowHeight(ri,60)
        _thread.start_new_thread(Analyze,(datas,))
        #Analyze(datas)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;News.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/WmNZG/btqNkd5D2Zl/2oaBke6i9L9vVgdDdaDq61/News.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;News.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169634986&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#News.py
from MorphemeParser import MorphemeParser
from EHHelper import EHHelper
import datetime
class News:
    def __init__(self,title,link,description,pubdate):
        self.title = title
        self.link = link
        self.description = description
        self.pubdate = pubdate
    def PreProcess(self):
        self.title = EHHelper.EmitTagAndSpecialCh(self.title)
        self.description = EHHelper.EmitTagAndSpecialCh(self.description)
    @staticmethod
    def MakeNews(jnews):
        title = jnews['title']
        link = jnews['link']
        description = jnews['description']
        pubdate = jnews['pubDate']
        try:
            index = pubdate.rfind('+')
            pubdate = pubdate[:index]
            dt = datetime.datetime.strptime(src,&quot;%a, %d %b %Y %H:%M:%S &quot;)
        except:
            pubdate = datetime.datetime.now()
        else:
            pubdate = dt
        return News(title,link,description,pubdate)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsAnaylizer.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bXJw1V/btqNe68chti/6utoPpPCJf3JstZcqxWVmK/NewsAnaylizer.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsAnaylizer.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169672763&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsAnaylizer.py - 뉴스 분석기
from NewsSearcher import NewsSearcher
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
from News import News
class NewsAnaylizer:
    def __init__(self):
        self.ns = NewsSearcher()
    def Analize(self, query):
        redata = list()
        self.ns.SetQuery(query)
        news_col = self.ns.RequestAll()
        #news_col,total = self.ns.Request(1,10)
        for jnews in news_col:
            news = News.MakeNews(jnews)
            morphes1 = MorphemeParser.Parse(news.title)
            morphes2 = MorphemeParser.Parse(news.description)
            redata.append([news,morphes1,morphes2])
        return redata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsSearcher.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bbeNxT/btqNgtuUihq/KOQ0f31kV5OWfWH7wyV0Qk/NewsSearcher.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsSearcher.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169710621&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsSearcher.py - 뉴스 검색기
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
import urllib.request
import json
class NewsSearcher:
    def __init__(self):
        self.client_id =&quot;N3yLQ95_i8KdsL3tJAJ3&quot;
        self.client_secret=&quot;99b7XrrXp3&quot;
        self.url = &quot;https://openapi.naver.com/v1/search/news.json&quot;
    def SetQuery(self,query):
        query = urllib.parse.quote(query)
        self.qp = &quot;query=&quot;+query
    def Request(self,start,display):
        sp = &quot;start=&quot;+str(start)
        dp = &quot;display=&quot;+str(display)
        query_str = self.url+&quot;?&quot;+self.qp+&quot;&amp;amp;&quot;+sp+&quot;&amp;amp;&quot;+dp
        request = urllib.request.Request(query_str)
        request.add_header(&quot;X-Naver-Client-Id&quot;,self.client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;,self.client_secret)
        try:
            response = urllib.request.urlopen(request)
        except: #예외 발생하였을 때
            return list(),0
        if response.getcode()!=200:#실패일 때
            return list(),0
        content = response.read()
        content = content.decode('utf-8')
        jdata = json.loads(content)
        total = int(jdata['total'])
        return jdata['items'],total
    def RequestAll(self):
        start = 1
        display = 100
        redatas = list()
        datas, total = self.Request(start,display)
        redatas.extend(datas)
        start = start + display
        while start&amp;lt;total and start&amp;lt;1000:
            datas, total = self.Request(start,display)
            redatas.extend(datas)
            start = start + display
        return redatas&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cY1CML/btqNgugcUHV/3HiCXfHlPpQNGjrhSkKLP0/NewsSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169738122&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsSql.py
from News import News
import pymssql
class NewsSql:
    @staticmethod
    def AddNews(news):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        dstr = news.pubdate.strftime('%Y-%m-%d %H:%M:%S')
        q_pre = &quot;insert into News (title,description,link,pubdate,mcnt)&quot;
        q_post = str.format(&quot;values('{0}','{1}','{2}','{3}',{4})&quot;,\
            news.title, news.description,news.link,dstr,0)
        query = str.format(&quot;{0}      {1}&quot;,q_pre,q_post)
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def UpdateMCnt(link,mcnt):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;update News set mcnt={0} where (link='{1}')&quot;,mcnt,link)
        cursor.execute(query)
        conn.commit()
        conn.close()
    @staticmethod
    def FindNid(link):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select nid from News where (link='{0}')&quot;,link)
        cursor.execute(query)
        row = cursor.fetchone()
        conn.commit()
        conn.close()
        return row[0]
    @staticmethod
    def FindNewsByNid(nid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        q_pre = &quot;select title,link,description,pubdate,mcnt from News &quot;
        q_post = str.format(&quot;   where (nid={0})&quot;,nid)
        query = q_pre + q_post
        cursor.execute(query)
        row = cursor.fetchone()
        conn.close()
        return row
    @staticmethod
    def TotalDocumentCount():
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = &quot;select count(*) from News&quot;
        cursor.execute(query)
        row = cursor.fetchone()
        conn.close()
        return row[0]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NSDialog.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/wiEsF/btqNiWJ5Ssp/uIKE2Pc6ZZV6F6lPuqbEqk/NSDialog.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NSDialog.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169769042&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NSDialog.py - 뉴스 검색 대화상자
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from NewsSql import NewsSql
from MorphemeSql import MorphemeSql
from InverseSql import InverseSql
from EHHelper import EHHelper
from MorphemeParser import MorphemeParser
from ScoredNews import ScoredNews
from News import News
import math
class NSDialog(QDialog):
    def __init__(self,pa):
        super().__init__(pa)
        self.resize(2000,1000)
        self.setWindowTitle(&quot;뉴스 검색기&quot;)
        self.te_query = QTextEdit(self)
        self.te_query.move(20,20)
        self.te_query.resize(800,60)
        self.btn_search = QPushButton(&quot;검색&quot;,self)
        self.btn_search.move(840,20)
        self.btn_search.resize(200,60)
        self.lbox_news = QListWidget(self)
        self.lbox_news.move(20,90)
        self.lbox_news.resize(600,900)
        lb_d1 = QLabel(&quot;제목:&quot;,self)
        lb_d1.move(640,100)
        lb_d2 = QLabel(&quot;링크&quot;,self)
        lb_d2.move(640,180)
        lb_d3 = QLabel(&quot;점수:&quot;,self)
        lb_d3.move(640,260)
        self.te_title = QTextEdit(&quot;&quot;,self)
        self.te_title.setReadOnly(True)
        self.te_title.move(740,100)
        self.te_title.resize(1240,60)
        self.te_link = QTextEdit(&quot;&quot;,self)
        self.te_link.setReadOnly(True)
        self.te_link.move(740,180)
        self.te_link.resize(1240,60)
        self.te_score = QTextEdit(&quot;&quot;,self)
        self.te_score.setReadOnly(True)
        self.te_score.move(740,260)
        self.te_score.resize(1240,60)
        self.te_description = QTextEdit(&quot;&quot;,self)
        self.te_description.setReadOnly(True)
        self.te_description.move(640,340)
        self.te_description.resize(1340,650)
        self.btn_search.clicked.connect(self.OnSearch)
        self.lbox_news.currentRowChanged.connect(self.OnSelectChange)
        self.sns = list()
    def OnSearch(self):
        self.sns.clear()
        query = self.te_query.toPlainText()
        tdcnt = NewsSql.TotalDocumentCount()
        moes = MorphemeParser.Parse(query)
        for mo in moes:
            mid = MorphemeSql.FindMid(mo.word)
            ins = InverseSql.FindInv(mid)
            idf = tdcnt/(len(ins)+1)
            for ri in range(0,len(ins)):
                nid,rcnt = ins[ri]
                news = NewsSql.FindNewsByNid(nid)
                title,link,description,pubdate,mcnt = news
                title = EHHelper.MssqlstrToStrKor(title)
                description = EHHelper.MssqlstrToStrKor(description)
                tf = rcnt/mcnt
                score = tf*math.log(idf)
                sn = ScoredNews(News(title,link,description,pubdate),score)
                self.sns.append(sn)
        self.sns = NSDialog.MergeDupSns(self.sns)
        for sn in self.sns:
            self.lbox_news.addItem(sn.news.title)
    def OnSelectChange(self):
        if len(self.sns) == 0:
            return
        index = self.lbox_news.currentRow()        
        sn = self.sns[index]
        self.te_title.setText(sn.news.title)
        self.te_link.setText(sn.news.link)
        self.te_description.setText(sn.news.description)
        self.te_score.setText(str(sn.score))
    @staticmethod 
    def MergeDupSns(sns):
        res = list()
        for sn in sns:
            flag = False
            for i in range(0,len(res)):
                rsn = res[i]
                if(rsn.news.link == sn.news.link):
                    rsn.score += sn.score
                    flag = True
                    break
            if flag == False:
                res.append(sn)
        res = sorted(res)
        return res
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;ScoredNews.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/uonfl/btqNkPQYIiX/QxhvNQkqDXc4UvvoYttatK/ScoredNews.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ScoredNews.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605169796995&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#ScoredNews.py
from News import News
class ScoredNews:
    def __init__(self,news,score):
        self.news = news
        self.score = score
    def __lt__(self,other):
        return self.score&amp;gt;other.score&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1605083344457&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from PyQt5.QtWidgets import QApplication
from NCWindow import NCWindow
app = QApplication(sys.argv)
ncw = NCWindow()
ncw.show()
sys.exit(app.exec_())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>open api</category>
      <category>Python</category>
      <category>QTableWidget</category>
      <category>text mining</category>
      <category>검색 엔진</category>
      <category>뉴스 검색기</category>
      <category>빅데이터</category>
      <category>소스 코드</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3548</guid>
      <comments>https://ehclub.tistory.com/3548#entry3548comment</comments>
      <pubDate>Wed, 11 Nov 2020 16:37:23 +0900</pubDate>
    </item>
    <item>
      <title>[python] 뉴스 검색기V03 feat. 네이버 개발자센터, 형태소 분석, MSSQL</title>
      <link>https://ehclub.tistory.com/3547</link>
      <description>&lt;p&gt;&lt;b&gt;뉴스 테이블&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;[dbo].News &lt;br /&gt;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[nid]&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;IDENTITY,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[title]&amp;nbsp;VARCHAR(200)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[link]&amp;nbsp;VARCHAR(200)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[description]&amp;nbsp;VARCHAR(MAX)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[pubdate]&amp;nbsp;DATETIME&amp;nbsp;NOT&amp;nbsp;NULL, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mcnt]&amp;nbsp;int&amp;nbsp;NOT&amp;nbsp;NULL &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CONSTRAINT&amp;nbsp;TU&amp;nbsp;UNIQUE(link) &lt;br /&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;형태소 테이블&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;[dbo].Morpheme &lt;br /&gt;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mid]&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;IDENTITY,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[word] VARCHAR(50) NOT NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CONSTRAINT&amp;nbsp;WU&amp;nbsp;UNIQUE(word) &lt;br /&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;역참조 테이블(역파일)&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;[dbo].Inverse &lt;br /&gt;( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[nid]&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[mid]&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[rcnt]&amp;nbsp;INT&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp; &lt;br /&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;관계 추가&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;관계1.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RFqsm/btqM9OMdd0e/hJYL3b88X1Tlvw76fZnkr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RFqsm/btqM9OMdd0e/hJYL3b88X1Tlvw76fZnkr1/img.png&quot; data-alt=&quot;News 테이블의 nid컬럼과 Inverse 테이블의 nid 컬럼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RFqsm/btqM9OMdd0e/hJYL3b88X1Tlvw76fZnkr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRFqsm%2FbtqM9OMdd0e%2FhJYL3b88X1Tlvw76fZnkr1%2Fimg.png&quot; data-filename=&quot;관계1.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;News 테이블의 nid컬럼과 Inverse 테이블의 nid 컬럼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;관곚.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7dgg9/btqM5fqG00x/DKK0DJH5qVkE1QW0J6nOiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7dgg9/btqM5fqG00x/DKK0DJH5qVkE1QW0J6nOiK/img.png&quot; data-alt=&quot;Morpheme 테이블의 mid 컬럼과 Inverse 테이블의 mid 컬럼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7dgg9/btqM5fqG00x/DKK0DJH5qVkE1QW0J6nOiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7dgg9%2FbtqM5fqG00x%2FDKK0DJH5qVkE1QW0J6nOiK%2Fimg.png&quot; data-filename=&quot;관곚.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;590&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Morpheme 테이블의 mid 컬럼과 Inverse 테이블의 mid 컬럼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;News.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/pIABU/btqNkfPJwxg/w6BdhMQpq5dYiiGWwmE0ZK/News.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;News.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605075854534&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#News.py
from MorphemeParser import MorphemeParser
from EHHelper import EHHelper
import datetime
class News:
    def __init__(self,title,link,description,pubdate):
        self.title = title
        self.link = link
        self.description = description
        self.pubdate = pubdate
    def PreProcess(self):
        self.title = EHHelper.EmitTagAndSpecialCh(self.title)
        self.description = EHHelper.EmitTagAndSpecialCh(self.description)
    @staticmethod
    def MakeNews(jnews):
        title = jnews['title']
        link = jnews['link']
        description = jnews['description']
        pubdate = jnews['pubDate']
        try:
            index = pubdate.rfind('+')
            pubdate = pubdate[:index]
            dt = datetime.datetime.strptime(src,&quot;%a, %d %b %Y %H:%M:%S &quot;)
        except:
            pubdate = datetime.datetime.now()
        else:
            pubdate = dt
        return News(title,link,description,pubdate)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Morpheme.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bOEtNc/btqNaFa3VBl/nsdMuALWaPayDUBXQEKPtk/Morpheme.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Morpheme.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605075892022&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Morpheme.py  - 형태소 클래스
class Morpheme:
    def __init__(self,word):
        self.word = word #단어 
        self.ref = 1           #참조 개수
    def Merge(self,other): # 병합하기
        if self.IsEqual(other):
            self.ref = self.ref + other.ref
    def IsEqual(self,other): #같은 단어를 갖는 형태소인지 판별
        return self.word ==  other.word
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/m9V6G/btqNiWpzqhE/VYbn66FApwcrMAwY6kuekK/NewsSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605075927678&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsSql.py
from News import News
import pymssql
class NewsSql:
    @staticmethod
    def AddNews(news):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        dstr = news.pubdate.strftime('%Y-%m-%d %H:%M:%S')
        q_pre = &quot;insert into News (title,description,link,pubdate,mcnt)&quot;
        q_post = str.format(&quot;values('{0}','{1}','{2}','{3}',{4})&quot;,\
            news.title, news.description,news.link,dstr,0)
        query = str.format(&quot;{0}      {1}&quot;,q_pre,q_post)
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def UpdateMCnt(link,mcnt):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;update News set mcnt={0} where (link='{1}')&quot;,mcnt,link)
        cursor.execute(query)
        conn.commit()
        conn.close()
    @staticmethod
    def FindNid(link):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select nid from News where (link='{0}')&quot;,link)
        cursor.execute(query)
        row = cursor.fetchone()
        conn.commit()
        conn.close()
        return row[0]
    @staticmethod
    def FindNewsByNid(nid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        q_pre = &quot;select title,link,description,pubdate,mcnt from News &quot;
        q_post = str.format(&quot;   where (nid={0})&quot;,nid)
        query = q_pre + q_post
        cursor.execute(query)
        row = cursor.fetchone()
        conn.close()
        return row
    @staticmethod
    def TotalDocumentCount():
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = &quot;select count(*) from News&quot;
        cursor.execute(query)
        row = cursor.fetchone()
        conn.close()
        return row[0]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;MorphemeSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cGlTzv/btqNiVEjt94/dQI0TvoyLnd1DwX61HWgyK/MorphemeSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MorphemeSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605075967589&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MorphemeSql.py
import pymssql
class MorphemeSql:
    @staticmethod
    def AddMorpheme(mo):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;Insert into Morpheme(word) values('{0}')&quot;,mo.word)
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def FindMid(word):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select mid from Morpheme where (word='{0}')&quot;,word)
        cursor.execute(query)
        row = cursor.fetchone()
        conn.commit()
        conn.close()
        if row:
            return row[0]
        return 0
    @staticmethod
    def ListMorpheme():
        moes = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()        
        query = str.format(&quot;select word from Morpheme&quot;)
        cursor.execute(query)
        row = cursor.fetchone()  
        while row:
            moes.append(row[0]) 
            row = cursor.fetchone()
        conn.close()
        return moes

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;InverseSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bx7P7a/btqNeHteLbs/fkeGkOqp4BnKreTc9KmvaK/InverseSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;InverseSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605075999532&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#InverseSql.py
import pymssql
class InverseSql:
    @staticmethod
    def AddInverseItem(nid,mid,rcnt):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        s_pre = &quot;Insert into Inverse(nid,mid,rcnt) values&quot;
        s_post = str.format(&quot;({0},{1},{2})&quot;,nid,mid,rcnt)
        query = s_pre+s_post
        try:
            cursor.execute(query)
            conn.commit()
        except:
            temp=&quot;&quot;
        conn.close()
    @staticmethod
    def FindInv(mid):
        inv_col = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;, &quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;Select nid,rcnt from Inverse where mid={0}&quot;,mid)
        cursor.execute(query)
        row = cursor.fetchone()  
        while row:
            inv_col.append(row)
            row = cursor.fetchone()
        conn.close()
        return inv_col&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsSearcher.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bfbd0B/btqNaF9Unfj/OgBV2ktUZQdbbAxglzVNGK/NewsSearcher.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsSearcher.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605076159895&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsSearcher.py - 뉴스 검색기
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
import urllib.request
import json
class NewsSearcher:
    def __init__(self):
        self.client_id =&quot;네이버에서 제공한 클라이언트 ID&quot;
        self.client_secret=&quot;네이버에서 제공한 클라이언트 Secret&quot;
        self.url = &quot;https://openapi.naver.com/v1/search/news.json&quot;
    def SetQuery(self,query):
        query = urllib.parse.quote(query)
        self.qp = &quot;query=&quot;+query
    def Request(self,start,display):
        sp = &quot;start=&quot;+str(start)
        dp = &quot;display=&quot;+str(display)
        query_str = self.url+&quot;?&quot;+self.qp+&quot;&amp;amp;&quot;+sp+&quot;&amp;amp;&quot;+dp
        request = urllib.request.Request(query_str)
        request.add_header(&quot;X-Naver-Client-Id&quot;,self.client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;,self.client_secret)
        try:
            response = urllib.request.urlopen(request)
        except: #예외 발생하였을 때
            return list(),0
        if response.getcode()!=200:#실패일 때
            return list(),0
        content = response.read()
        content = content.decode('utf-8')
        jdata = json.loads(content)
        total = int(jdata['total'])
        return jdata['items'],total
    def RequestAll(self):
        start = 1
        display = 100
        redatas = list()
        datas, total = self.Request(start,display)
        redatas.extend(datas)
        start = start + display
        while start&amp;lt;total and start&amp;lt;1000:
            datas, total = self.Request(start,display)
            redatas.extend(datas)
            start = start + display
        return redatas&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;MorphemeParser.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b1hNDr/btqNeI6OG4Z/3AlTOEUmB9CnYW9zKZl9G1/MorphemeParser.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MorphemeParser.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1605076205878&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MorphemeParser.py - 형태소 분석기
from Morpheme import Morpheme
from EHHelper import EHHelper
class MorphemeParser:
    @staticmethod
    def Parse(src):
        morphes = list() 
        #원본 문자열에 특수 기호를 제거 및 공백 기준으로 분리
        src = EHHelper.EmitTagAndSpecialCh(src)
        msrc = src.split(' ')
        #각 단어를 형태소 컬렉션에 추가
        for elem in msrc:
            if str.isalpha(elem):
                morphes.append(Morpheme(elem))
        #중복 형태소를 합치는 공정
        morphes = MorphemeParser.Merge(morphes)
        return morphes

    @staticmethod
    def Merge(morphes):
        remoes = list()#병합한 형태소를 보관할 컬렉션
        for morph in morphes:#원본 컬렉션에 있는 각각의 형태소를
            rcnt = len(remoes)#병합한 컬렉션에 형태소 개수 구하기
            flag = False #morph와 같은 단어가 remoes에 없다고 가정
            #morph가 remoes컬렉션에 있다면 병합
            for index in range(0,rcnt):
                if remoes[index].word == morph.word:
                    remoes[index].Merge(morph)
                    flag = True#병합하였음을 마킹
                    break            
            if flag == False:#morph와 같은 단어는 remoes에 없음
                remoes.append(morph)
        return remoes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsAnalyser.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ckEOUc/btqM8OT6oDu/Vsyqj9sF4MW1Smyt06k7ZK/NewsAnaylizer.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsAnaylizer.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605076245137&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsAnaylizer.py - 뉴스 분석기
from NewsSearcher import NewsSearcher
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
from News import News
class NewsAnaylizer:
    def __init__(self):
        self.ns = NewsSearcher()
    def Analize(self, query):
        redata = list()
        self.ns.SetQuery(query)
        #news_col = self.ns.RequestAll()
        news_col,total = self.ns.Request(1,10)
        for jnews in news_col:
            news = News.MakeNews(jnews)
            morphes1 = MorphemeParser.Parse(news.title)
            morphes2 = MorphemeParser.Parse(news.description)
            redata.append([news,morphes1,morphes2])
        return redata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1605076271497&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from NewsAnaylizer import NewsAnaylizer
from NewsSql import NewsSql
from MorphemeParser import MorphemeParser
from News import News
from MorphemeSql import MorphemeSql
from InverseSql import InverseSql
na = NewsAnaylizer()
q = input('질의:')
adatas = na.Analize(q)
for adata in adatas:
    news,m1,m2 = adata
    news.PreProcess()
    NewsSql.AddNews(news)
    NewsSql.UpdateMCnt(news.link,len(m1)+len(m2))
    nid = NewsSql.FindNid(news.link)
    for mo in m1:
        MorphemeSql.AddMorpheme(mo)
        mid = MorphemeSql.FindMid(mo.word)
        InverseSql.AddInverseItem(nid,mid,mo.ref)
    for mo in m2:
        MorphemeSql.AddMorpheme(mo)
        mid = MorphemeSql.FindMid(mo.word)
        InverseSql.AddInverseItem(nid,mid,mo.ref)
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>MSSQL</category>
      <category>Python</category>
      <category>네이버 개발자센터</category>
      <category>뉴스검색기</category>
      <category>형태소분석</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3547</guid>
      <comments>https://ehclub.tistory.com/3547#entry3547comment</comments>
      <pubDate>Wed, 11 Nov 2020 09:23:40 +0900</pubDate>
    </item>
    <item>
      <title>[ python] 뉴스 분석기 feat.네이버 개발자센터 , 형태소 분석</title>
      <link>https://ehclub.tistory.com/3546</link>
      <description>&lt;p&gt;&lt;b&gt;News.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/uXQSn/btqM9PKu85z/0TF8kox3wSVy3kOIWw1rO1/News.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;News.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604996482611&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#News.py
class News:
    def __init__(self,title,link,description,pubdate):
        self.title = title
        self.link = link
        self.description = description
        self.pubdate = pubdate
    @staticmethod
    def MakeNews(jnews):
        title = jnews['title']
        link = jnews['link']
        description = jnews['description']
        pubdate = jnews['pubDate']
        return News(title,link,description,pubdate)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Morpheme.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ocxT5/btqM5fcEBF5/KDJ2oY3drgCejRw5CokM10/Morpheme.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Morpheme.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604996531714&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Morpheme.py  - 형태소 클래스
class Morpheme:
    def __init__(self,word):
        self.word = word #단어 
        self.ref = 1           #참조 개수
    def Merge(self,other): # 병합하기
        if self.IsEqual(other):
            self.ref = self.ref + other.ref
    def IsEqual(self,other): #같은 단어를 갖는 형태소인지 판별
        return self.word ==  other.word
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;MorphemeParser.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/AMxPq/btqM9PKvaBm/1HyXDGWqh3mAymF0QG1Lw0/MorphemeParser.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MorphemeParser.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604996554059&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MorphemeParser.py - 형태소 분석기
from Morpheme import Morpheme
class MorphemeParser:
    @staticmethod
    def Parse(src):
        morphes = list() 
        #원본 문자열에 특수 기호를 제거 및 공백 기준으로 분리
        src = MorphemeParser.RemoveTag(src)
        src = MorphemeParser.RemoveNonAlpha(src)
        msrc = src.split(' ')
        #각 단어를 형태소 컬렉션에 추가
        for elem in msrc:
            if str.isalpha(elem):
                morphes.append(Morpheme(elem))
        #중복 형태소를 합치는 공정
        morphes = MorphemeParser.Merge(morphes)
        return morphes

    @staticmethod
    def Merge(morphes):
        remoes = list()#병합한 형태소를 보관할 컬렉션
        for morph in morphes:#원본 컬렉션에 있는 각각의 형태소를
            rcnt = len(remoes)#병합한 컬렉션에 형태소 개수 구하기
            flag = False #morph와 같은 단어가 remoes에 없다고 가정
            #morph가 remoes컬렉션에 있다면 병합
            for index in range(0,rcnt):
                if remoes[index].word == morph.word:
                    remoes[index].Merge(morph)
                    flag = True#병합하였음을 마킹
                    break            
            if flag == False:#morph와 같은 단어는 remoes에 없음
                remoes.append(morph)
        return remoes
    @staticmethod
    def RemoveNonAlpha(src):
        dest=&quot;&quot;
        for elem in src:
            if str.isalpha(elem) or str.isspace(elem):
                dest += elem
        return dest
    @staticmethod
    def FindTag(src):
        s = src.index('&amp;lt;')
        e = src.index('&amp;gt;')
        return s,e
    @staticmethod
    def RemoveTag(src):
        try:
            while True:
                s,e = MorphemeParser.FindTag(src)
                src = src[0:s]+src[e+1:] #태그를 제거하는 구문
        except:# 더 이상 태그가 없음
            return src
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsSearcher.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/birJo4/btqM4yXJPXt/c7N7BgMExrxkjIggbp6luK/NewsSearcher.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsSearcher.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604996612636&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsSearcher.py - 뉴스 검색기
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
import urllib.request
import json
class NewsSearcher:
    def __init__(self):
        self.client_id =&quot;네이버에서 발급한 클라이언트 id&quot;
        self.client_secret=&quot;네이버에서 발급한 클라이언트 secret&quot;
        self.url = &quot;https://openapi.naver.com/v1/search/news.json&quot;
    def SetQuery(self,query):
        query = urllib.parse.quote(query)
        self.qp = &quot;query=&quot;+query
    def Request(self,start,display):
        sp = &quot;start=&quot;+str(start)
        dp = &quot;display=&quot;+str(display)
        query_str = self.url+&quot;?&quot;+self.qp+&quot;&amp;amp;&quot;+sp+&quot;&amp;amp;&quot;+dp
        request = urllib.request.Request(query_str)
        request.add_header(&quot;X-Naver-Client-Id&quot;,self.client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;,self.client_secret)
        try:
            response = urllib.request.urlopen(request)
        except: #예외 발생하였을 때
            return list(),0
        if response.getcode()!=200:#실패일 때
            return list(),0
        content = response.read()
        content = content.decode('utf-8')
        jdata = json.loads(content)
        total = int(jdata['total'])
        return jdata['items'],total
    def RequestAll(self):
        start = 1
        display = 100
        redatas = list()
        datas, total = self.Request(start,display)
        redatas.extend(datas)
        start = start + display
        while start&amp;lt;total and start&amp;lt;1000:
            datas, total = self.Request(start,display)
            redatas.extend(datas)
            start = start + display
        return redatas&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NewsAnaylizer.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Pw3In/btqM8OSTuPA/h1Kk3yX1q9BhiLckmzKhV1/NewsAnaylizer.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NewsAnaylizer.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604996635506&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NewsAnaylizer.py - 뉴스 분석기
from NewsSearcher import NewsSearcher
from MorphemeParser import MorphemeParser
from Morpheme import Morpheme
from News import News
class NewsAnaylizer:
    def __init__(self):
        self.ns = NewsSearcher()
    def Analize(self, query):
        redata = list()
        self.ns.SetQuery(query)
        news_col = self.ns.RequestAll()
        for jnews in news_col:
            news = News.MakeNews(jnews)
            morphes1 = MorphemeParser.Parse(news.title)
            morphes2 = MorphemeParser.Parse(news.description)
            redata.append([news,morphes1,morphes2])
        return redata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1604996660234&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from NewsAnaylizer import NewsAnaylizer
from MorphemeParser import MorphemeParser
import matplotlib.pyplot as plt
import matplotlib
na = NewsAnaylizer()
q = input('질의:')
moes = list()
adatas = na.Analize(q)
for adata in adatas:
    news,m1,m2 = adata
    moes.extend(m1)
    moes.extend(m2)
    print(news.title)
    print(news.description)
    print(&quot;=======&quot;)
input(&quot;엔터 키를 누르세요.&quot;)
moes = MorphemeParser.Merge(moes)

reflist = list()
for mo in moes:
    print(&quot;{0},{1}&quot;.format(mo.word,mo.ref))
    reflist.append(mo.ref)
plt.plot(reflist)
plt.show()


&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>open api</category>
      <category>Python</category>
      <category>text mining</category>
      <category>네이버 개발자 센터</category>
      <category>뉴스 분석기</category>
      <category>소스 코드</category>
      <category>형태소 분석</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3546</guid>
      <comments>https://ehclub.tistory.com/3546#entry3546comment</comments>
      <pubDate>Tue, 10 Nov 2020 17:27:39 +0900</pubDate>
    </item>
    <item>
      <title>[python] 뉴스 검색 - 형태소 분석 (feat. 네이버 개발자센터)</title>
      <link>https://ehclub.tistory.com/3545</link>
      <description>&lt;p&gt;Main.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/8TmL9/btqMVB8zRpP/RzB9VR3kJebipV5ka5ZjDK/Main.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Main.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604975996081&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import urllib.request
import json

class Morpheme:
    def __init__(self,word):
        self.word = word
        self.ref = 1
    def Merge(self,other):
        if self.IsEqual(other):
            self.ref = self.ref + other.ref
    def IsEqual(self,other):
        return self.word ==  other.word

class MorphemeParser:
    @staticmethod
    def Parse(src):
        morphes = list() #반환할 형태소 컬렉션
        src = MorphemeParser.RemoveNonAlpha(src)
        msrc = src.split(' ')
        for elem in msrc:
            if str.isalpha(elem):
                morphes.append(Morpheme(elem))
        morphes = MorphemeParser.Merge(morphes)
        return morphes
    @staticmethod
    def Merge(morphes):
        remoes = list()
        for morph in morphes:
            rcnt = len(remoes)
            flag = False
            for index in range(0,rcnt):
                if remoes[index].word == morph.word:
                    remoes[index].Merge(morph)
                    flag = True
                    break
            if flag == False:
                remoes.append(morph)
        return remoes
    @staticmethod
    def RemoveNonAlpha(src):
        dest=&quot;&quot;
        for elem in src:
            if str.isalpha(elem) or str.isspace(elem):
                dest += elem
        return dest
    @staticmethod
    def FindTag(src):
        s = src.index('&amp;lt;')
        e = src.index('&amp;gt;')
        return s,e
    @staticmethod
    def RemoveTag(src):
        try:
            while True:
                s,e = MorphemeParser.FindTag(src)
                src = src[0:s]+src[e+1:]
        except:
            return src    

client_id =&quot;네이버 개발자센터에서 발급한 Client ID&quot;
client_secret=&quot;네이버 개발자센터에서 발급한 Client Secret&quot;
url = &quot;https://openapi.naver.com/v1/search/news.json&quot;
query = input(&quot;질의:&quot;)
query_param = &quot;query=&quot;+urllib.parse.quote(query)

#쿼리문자열 구조
#사이트 주소?인자=값&amp;amp;인자=값
query_str = url+&quot;?&quot;+query_param

request = urllib.request.Request(query_str)
request.add_header(&quot;X-Naver-Client-Id&quot;,client_id)
request.add_header(&quot;X-Naver-Client-Secret&quot;,client_secret)

response = urllib.request.urlopen(request)
if response.getcode() != 200:
    print(&quot;실패!!!&quot;)
else:
    content = response.read()
    data = content.decode('utf-8')
    jdata = json.loads(data)
    total = jdata['total']
    print(&quot;검색 결과 개수:&quot;,total)

    i=0
    for item in jdata['items']:
        print(&quot;제목:&quot;,MorphemeParser.RemoveTag(item['title']))
        des = MorphemeParser.RemoveTag(item['description'])
        print(des)
        print(&quot;==============&quot;)
        res = MorphemeParser.Parse(des)
        fs = open(&quot;data&quot;+str(i)+&quot;.txt&quot;,&quot;w&quot;)
        for morph in res:
            s = morph.word + &quot;,&quot;+str(morph.ref)+&quot;\n&quot;
            fs.writelines(s)
        fs.close()
        i=i+1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>open api</category>
      <category>Python</category>
      <category>네이버 개발자센터</category>
      <category>뉴스 검색</category>
      <category>소스 코드</category>
      <category>형태소 분석</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3545</guid>
      <comments>https://ehclub.tistory.com/3545#entry3545comment</comments>
      <pubDate>Tue, 10 Nov 2020 11:41:10 +0900</pubDate>
    </item>
    <item>
      <title>[python] 도서 검색기 feat. 네이버 개발자센터</title>
      <link>https://ehclub.tistory.com/3544</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;실행 화면.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;541&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kIpUS/btqMTgvZ89O/v0v7IJ3zuAS1UVf3bKNKbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kIpUS/btqMTgvZ89O/v0v7IJ3zuAS1UVf3bKNKbK/img.png&quot; data-alt=&quot;실행화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kIpUS/btqMTgvZ89O/v0v7IJ3zuAS1UVf3bKNKbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkIpUS%2FbtqMTgvZ89O%2Fv0v7IJ3zuAS1UVf3bKNKbK%2Fimg.png&quot; data-filename=&quot;실행 화면.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;541&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;실행화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Book.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/baiDSK/btqMX9b2cU0/WY6u0ym9Ue5wDemDkQ1J9K/Book.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Book.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604900327812&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Book.py
class Book:
    def __init__(self,title,author,price,content=&quot;&quot;,publisher=&quot;&quot;,link=&quot;&quot;,imglink=&quot;&quot;):
        self.title = title
        self.author = author
        self.price = price
        self.content = content
        self.publisher = publisher
        self.link = link
        self.imglink=imglink


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;NaverBookSearcher.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/1GYBN/btqM2He427Q/X3UcDxJJlxGIZX1ZR4hIt1/NaverBookSearcher.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NaverBookSearcher.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604900357956&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NaverBookSearcher.py
import urllib.request
import json
from Book import Book
class NaverBookSearcher:
    @staticmethod
    def MakeBook(jsbook):
        title = jsbook[&quot;title&quot;]
        author = jsbook[&quot;author&quot;]
        price = jsbook[&quot;price&quot;]
        content = jsbook[&quot;description&quot;]
        publisher = jsbook[&quot;publisher&quot;]
        link = jsbook[&quot;link&quot;]
        imglink=jsbook[&quot;image&quot;]
        return Book(title,author,price,content,publisher,link,imglink)
    def __init__(self):
        self.client_id = &quot;네이버 개발자센터에서 발급받은 자신의 Client ID&quot;
        self.client_secret =  &quot;네이버 개발자센터에서 발급받은 자신의 Client Secret&quot;
        self.url = &quot;https://openapi.naver.com/v1/search/book.json&quot;
        self.query=&quot;&quot;
        self.query_str=&quot;&quot;
    def SetQuery(self,qstr):
        self.query = &quot;query=&quot;+urllib.parse.quote(qstr)
        self.query_str = self.url+&quot;?&quot;+self.query
    def Request(self,start,display):
        start_str = &quot;start=&quot;+str(start)
        display_str = &quot;display=&quot;+str(display)
        fquery_str = self.query_str +&quot;&amp;amp;&quot;+start_str+&quot;&amp;amp;&quot;+display_str
        request = urllib.request.Request(fquery_str)
        request.add_header(&quot;X-Naver-Client-Id&quot;,self.client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;,self.client_secret)
        try:
            response = urllib.request.urlopen(request)
        except:
            return None
        rescode = response.getcode()
        if rescode != 200:
            return None
        content = response.read()
        data = content.decode('utf-8')
        jdata = json.loads(data)
        total = jdata['total']  
        return jdata['items'],total
    def RequestAll(self):
        redatas=list()
        start = 1
        display=10
        datas,total = self.Request(start,display)
        redatas.extend(datas)
        start = start+display
        while (start&amp;lt;total)and(start&amp;lt;1000):
            datas,total = self.Request(start,display)
            redatas.extend(datas)
            start = start+display
        return redatas&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;BookSearcherWidget.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/1NhHo/btqM38i8UPP/Q7QkbIuwTFtjT2Vw1Mj1z0/BookSearcherWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;BookSearcherWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604900400212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#BookSearcherWidget.py
from NaverBookSearcher import NaverBookSearcher
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class BookSearcherWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.books = list()
        self.setWindowTitle(&quot;도서 검색기(feat.네이버 개발자 센터)&quot;)
        self.resize(1000,1000)
        lb_query = QLabel(&quot;질의:&quot;,self)
        lb_query.move(20,20)
        self.te_query = QTextEdit(&quot;&quot;,self)
        self.te_query.move(120,15)
        self.te_query.resize(600,70)
        self.btn_search = QPushButton(&quot;검색&quot;,self)
        self.btn_search.move(740,15)
        lb_blist = QLabel(&quot;도서 목록&quot;,self)
        lb_blist.move(20,110)
        self.lbox_book = QListWidget(self)
        self.lbox_book.move(20,180)
        self.lbox_book.resize(300,800)
        self.btn_search.clicked.connect(self.SearchBook)
        self.lb_title = QLabel(&quot;[제목]&quot;,self)
        self.lb_title.move(340,200)
        self.lb_title.resize(650,60)
        self.lb_author = QLabel(&quot;[저자]&quot;,self)
        self.lb_author.move(340,280)
        self.lb_author.resize(650,60)
        self.lb_price = QLabel(&quot;[가격]&quot;,self)
        self.lb_price.move(340,360)
        self.lb_price.resize(650,60)
        self.te_content = QTextEdit(&quot;[내용]&quot;,self)
        self.te_content.setReadOnly(True)
        self.te_content.move(340,440)
        self.te_content.resize(650,550)
        self.lbox_book.currentItemChanged.connect(self.OnSelectChange)
    def OnSelectChange(self):
        index = self.lbox_book.currentRow()
        try:
            book = self.books[index]
        except:
            return
        self.lb_title.setText(book.title)
        self.lb_author.setText(book.author)
        self.lb_price.setText(str(book.price))
        self.te_content.setText(book.content)
    def SearchBook(self):
        self.books.clear()
        self.lbox_book.clear()
        q = self.te_query.toPlainText()
        ns = NaverBookSearcher()
        ns.SetQuery(q)
        books = ns.RequestAll()
        for bookjs in books:
            book = NaverBookSearcher.MakeBook(bookjs)
            self.books.append(book)
            self.lbox_book.addItem(book.title)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1604900570302&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from PyQt5.QtWidgets import QApplication
from BookSearcherWidget import BookSearcherWidget
app = QApplication(sys.argv)
bsw = BookSearcherWidget()
bsw.show()
sys.exit(app.exec_())
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>open api</category>
      <category>Python</category>
      <category>Qt</category>
      <category>네이버 개발자센터</category>
      <category>도서 검색</category>
      <category>소스 코드</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3544</guid>
      <comments>https://ehclub.tistory.com/3544#entry3544comment</comments>
      <pubDate>Mon, 9 Nov 2020 14:43:20 +0900</pubDate>
    </item>
    <item>
      <title>[python] 네이버 도서 검색 API 활용 - Json</title>
      <link>https://ehclub.tistory.com/3543</link>
      <description>&lt;p&gt;&lt;b&gt;Book.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bKynhX/btqMNxZGhy1/F06fSVmKab2123HHI4mlwk/Book.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;Book.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604890383611&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#Book.py
class Book:
    def __init__(self,title,author,price,content=&quot;&quot;,publisher=&quot;&quot;,link=&quot;&quot;,imglink=&quot;&quot;):
        self.title = title
        self.author = author
        self.price = price
        self.content = content
        self.publisher = publisher
        self.link = link
        self.imglink=imglink


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;NaverBookSearcher.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/HQzYY/btqM4yIGWIA/wXEZDDEDHp7GExkH3UvuDK/NaverBookSearcher.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;NaverBookSearcher.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1604890526415&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#NaverBookSearcher.py
import urllib.request
import json
from Book import Book
class NaverBookSearcher:
    @staticmethod
    def MakeBook(jsbook):
        title = jsbook[&quot;title&quot;]
        author = jsbook[&quot;author&quot;]
        price = jsbook[&quot;price&quot;]
        content = jsbook[&quot;description&quot;]
        publisher = jsbook[&quot;publisher&quot;]
        link = jsbook[&quot;link&quot;]
        imglink=jsbook[&quot;image&quot;]
        return Book(title,author,price,content,publisher,link,imglink)
    def __init__(self):
        self.client_id =&quot;네이버에서 발급받은 자신의 client id&quot;
        self.client_secret = &quot;네이버에서 발급받은 자신의 client secret&quot;
        self.url = &quot;https://openapi.naver.com/v1/search/book.json&quot;
        self.query=&quot;&quot;
        self.query_str=&quot;&quot;
    def SetQuery(self,qstr):
        self.query = &quot;query=&quot;+urllib.parse.quote(qstr)
        self.query_str = self.url+&quot;?&quot;+self.query
    def Request(self,start,display):
        start_str = &quot;start=&quot;+str(start)
        display_str = &quot;display=&quot;+str(display)
        fquery_str = self.query_str +&quot;&amp;amp;&quot;+start_str+&quot;&amp;amp;&quot;+display_str
        request = urllib.request.Request(fquery_str)
        request.add_header(&quot;X-Naver-Client-Id&quot;,self.client_id)
        request.add_header(&quot;X-Naver-Client-Secret&quot;,self.client_secret)
        response = urllib.request.urlopen(request)
        rescode = response.getcode()
        if rescode != 200:
            return None
        content = response.read()
        data = content.decode('utf-8')
        jdata = json.loads(data)
        total = jdata['total']  
        return jdata['items'],total
    def RequestAll(self):
        redatas=list()
        start = 1
        display=10
        datas,total = self.Request(start,display)
        redatas.extend(datas)
        start = start+display
        while (start&amp;lt;total)and(start&amp;lt;1000):
            datas,total = self.Request(start,display)
            redatas.extend(datas)
            start = start+display
        return redatas&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1604890556892&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from NaverBookSearcher import NaverBookSearcher
q = input(&quot;질의:&quot;)

ns = NaverBookSearcher()
ns.SetQuery(q)
books = ns.RequestAll()
for bookjs in books:
    book = NaverBookSearcher.MakeBook(bookjs)
    print(&quot;제목:&quot;,book.title)
    print(&quot;저자:&quot;,book.author)
    print(&quot;가격:&quot;,book.price)
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/파이썬(Python)</category>
      <category>open api</category>
      <category>Python</category>
      <category>네이버 개발자센터</category>
      <category>도서 검색</category>
      <category>소스 코드</category>
      <category>웹 스크래핑</category>
      <category>웹 크롤링</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3543</guid>
      <comments>https://ehclub.tistory.com/3543#entry3543comment</comments>
      <pubDate>Mon, 9 Nov 2020 11:56:41 +0900</pubDate>
    </item>
    <item>
      <title>[python] EH 쇼핑몰 - 고객 관리, 상품 관리 - MSSQL, QT</title>
      <link>https://ehclub.tistory.com/3542</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzUFiY/btqMG68wl12/n3rvdbvDqfFhPIDN8QmBUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzUFiY/btqMG68wl12/n3rvdbvDqfFhPIDN8QmBUk/img.png&quot; data-alt=&quot;데이터 베이스 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzUFiY/btqMG68wl12/n3rvdbvDqfFhPIDN8QmBUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzUFiY%2FbtqMG68wl12%2Fn3rvdbvDqfFhPIDN8QmBUk%2Fimg.png&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터 베이스 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CustomSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cUiQ3U/btqMLSBu6mW/KoR2M1UkjAHijqLUeuwel1/CustomSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CustomSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647531562&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CustomSql.py
import pymssql
class CustomSql:
    def AddCustom(self, cid, cname):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query =str.format(&quot;insert into Custom (CID, CNAME) values('{0}','{1}')&quot;, cid,cname)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def RemoveCustom(self, ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;delete from Custom where Ckey={0}&quot;,ckey)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def FindCustom(self,ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID,CNAME from Custom where Ckey={0}&quot;,ckey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:            
            return row[0], row[1]
        conn.close()
        return &quot;&quot;,&quot;&quot;
    def FindKeyByName(self, cname):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CKey from Custom where CName='{0}'&quot;,cname)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def ViewCustomList(self):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID,CNAME from Custom&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;고객 ID:{0}, 고객 이름:{1}&quot;.format(row[0],row[1]))
            row = cursor.fetchone()
        conn.close()
    def FindKeyByID(self,cid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CKey from Custom where CID='{0}'&quot;,cid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return 0
    def FindCustomId(self,ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID from Custom where CKey={0}&quot;,ckey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def CustomList(self):
        customs = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID, CNAME, CKEY from Custom&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            customs.append(row)
            row = cursor.fetchone()
        conn.close()
        return customs
    def RemoveCustomByID(self,cid):
        ckey = self.FindKeyByID(cid)
        self.RemoveCustom(ckey)
    def FindCustomName(self,cid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CNAME from Custom where cid='{0}' &quot;,cid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return &quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;CMainWidget.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/7AJKf/btqMGMWOLWJ/MTzyMDkitYK6TT6110tJi0/CMainWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CMainWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647576569&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CMainWidget.py
from CAddDlg import CAddDlg
from CustomSql import CustomSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class CMainWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.csql = CustomSql()
        self.setWindowTitle(&quot;고객 관리 창&quot;)
        self.resize(760,400)
        lb_cl = QLabel(&quot;고객 목록&quot;, self)
        lb_cl.move(20,20)
        self.lbox_custom = QListWidget(self)
        self.lbox_custom.move(20,60)
        self.lbox_custom.resize(300,330)
        self.btn_add = QPushButton(&quot;고객 추가&quot;,self)
        self.btn_add.move(340,60)
        self.btn_add.resize(400,80)
        self.btn_del = QPushButton(&quot;고객 삭제&quot;,self)
        self.btn_del.move(340,180)
        self.btn_del.resize(400,80)
        lb_name = QLabel(&quot;이름:&quot;,self)
        lb_name.move(340,280)
        self.lb_cname = QLabel(&quot;[홍길동]&quot;,self)
        self.lb_cname.move(460,280)
        self.btn_add.clicked.connect(self.AddCustom)
        self.btn_del.clicked.connect(self.DelCustom)
        self.lbox_custom.currentItemChanged.connect(self.OnSelectChange)
        self.ListCustom()
    def ListCustom(self):
        self.lbox_custom.clear()
        customs = self.csql.CustomList()
        for custom in customs:
            self.lbox_custom.addItem(custom[0])
    def AddCustom(self):
        caw = CAddDlg(self)
        caw.show()
    def SAddCustom(self, cid):
        self.lbox_custom.addItem(cid)
    def DelCustom(self):
         item = self.lbox_custom.currentItem()
         index = self.lbox_custom.currentRow()
         self.lbox_custom.takeItem(index)
         self.csql.RemoveCustomByID(item.text())
    def OnSelectChange(self):
        try:
             item = self.lbox_custom.currentItem()
             cname = self.csql.FindCustomName(item.text())
             self.lb_cname.setText(cname)
        except:
            self.lb_cname.setText(&quot;[홍길동]&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;CAddDlg.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/brRQCG/btqMG6AIKGM/GtZASzF8ABzCBh3NiG8tOK/CAddDlg.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CAddDlg.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647597960&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CAddDlg.py
from CustomSql import CustomSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class CAddDlg(QDialog):
    def __init__(self,pa):
        super().__init__(pa)        
        self.csql = CustomSql()
        self.setWindowTitle(&quot;고객 등록 창&quot;)
        lb_id = QLabel(&quot;고객 ID:&quot;,self)
        lb_id.move(20,20)
        lb_name = QLabel(&quot;고객 이름:&quot;,self)
        lb_name.move(20,100)
        self.te_id = QTextEdit(self)
        self.te_id.move(200,20)
        self.te_id.resize(200,40)
        self.te_name =QTextEdit(self)
        self.te_name.move(200,100)
        self.te_name.resize(200,40)
        self.btn_add = QPushButton(&quot;추가&quot;,self)
        self.btn_add.move(20,180)
        self.btn_add.resize(160,40)
        self.btn_del = QPushButton(&quot;취소&quot;,self)
        self.btn_del.move(200,180)
        self.btn_del.resize(160,40)
        self.btn_add.clicked.connect(self.AddCustom)
        self.btn_del.clicked.connect(self.Cancel)
    def AddCustom(self):
        cid = self.te_id.toPlainText()
        cname = self.te_name.toPlainText()
        try:
            self.csql.AddCustom(cid,cname)
        except:
             mbox = QMessageBox()
             mbox.setText(&quot;이미 존재하는 고객 ID입니다.&quot;)
             mbox.exec_()
        else:
            pa = self.parent()
            pa.SAddCustom(cid)
       #    mbox = QMessageBox()
       #    mbox.setText(&quot;추가하였습니다.&quot;)
       #    mbox.exec_()
        self.Cancel()
    def Cancel(self):
        self.te_id.setText(&quot;&quot;)
        self.te_name.setText(&quot;&quot;)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;ProductSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bEuCLk/btqMGNnQyRc/x6kBt6DkVOuIsGI77uSAz0/ProductSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ProductSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647672199&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#ProductSql.py
import  pymssql
class ProductSql:
    def AddProduct(self, pid,pname,price):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query =str.format(&quot;insert into Product (PID, PNAME, Price) values('{0}','{1}',{2})&quot;, pid,pname,price)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def RemoveProduct(self,pkey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;delete from Product where Pkey={0}&quot;,pkey)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def FindProduct(self,key):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select * from Product where Pkey={0}&quot;,key)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;상품ID:{0} 상품이름:{1} 가격:{2}&quot;.format(row[0], row[1],row[2]))
            row =cursor.fetchone()
        conn.commit()
        conn.close()
    def FindKeyByName(self,pname):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PKey from Product where PName='{0}'&quot;,pname)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def ViewProductList(self):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID,PNAME,PRICE from Product&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;상품ID:{0} 상품명:{1} 상품 가격:{2}&quot;.format(row[0], row[1],row[2]))
            row = cursor.fetchone()
        conn.close()
    def FindKeyByID(self,pid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PKey from Product where PID='{0}'&quot;,pid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return 0
    def FindProductID(self,pkey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID from Product where PKey={0}&quot;,pkey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def ProductList(self):
        products = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID,PName,Price, Pkey from Product&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            products.append(row)
            row = cursor.fetchone()
        conn.close()
        return products
    def RemoveProducByID(self,pid):
        try:
           pkey = self.FindKeyByID(pid)
           self.RemoveProduct(pkey)
        except:
            return False
        return True
    def FindProductByID(self,pid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PName,Price from Product where Pid='{0}' &quot;,pid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0],row[1]
        conn.close()
        return &quot;&quot;,0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;PMainWidget.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bS1OHH/btqMMhHK45t/dItkFxCbO238haZ02KscI0/PMainWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;PMainWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647746337&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#PMainWidget.py
from PAddDlg import PAddDlg
from ProductSql import ProductSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class PMainWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.psql = ProductSql()
        self.setWindowTitle(&quot;상품 관리 창&quot;)
        self.resize(760,500)
        lb_pl = QLabel(&quot;상품 목록&quot;, self)
        lb_pl.move(20,20)
        self.lbox_product = QListWidget(self)
        self.lbox_product.move(20,60)
        self.lbox_product.resize(300,430)
        self.btn_add = QPushButton(&quot;상품 추가&quot;,self)
        self.btn_add.move(340,60)
        self.btn_add.resize(400,80)
        self.btn_del = QPushButton(&quot;상품 삭제&quot;,self)
        self.btn_del.move(340,180)
        self.btn_del.resize(400,80)
        lb_name = QLabel(&quot;상품명:&quot;,self)
        lb_name.move(340,280)
        self.lb_pname = QLabel(&quot;[고구마]&quot;,self)
        self.lb_pname.move(460,280)
        self.lb_pname.resize(300,80)
        lb_price = QLabel(&quot;가격:&quot;,self)
        lb_price.move(340,360)
        self.lb_price2 = QLabel(&quot;0&quot;,self) 
        self.lb_price2.move(460,360)
        self.lb_price2.resize(300,80)
        self.btn_add.clicked.connect(self.AddProduct)
        self.btn_del.clicked.connect(self.DelProduct)
        self.lbox_product.currentItemChanged.connect(self.OnSelectChange)
        self.ListProduct()
    def ListProduct(self):
        self.lbox_product.clear()
        products = self.psql.ProductList()
        for product in products:
            self.lbox_product.addItem(product[0])
    def SAddProduct(self,pid):
        self.lbox_product.addItem(pid)
    def AddProduct(self):
        pad = PAddDlg(self)
        pad.show()
    def DelProduct(self):
         item = self.lbox_product.currentItem()
         re = self.psql.RemoveProducByID(item.text())#테이블에서 삭제
         if re:
             index = self.lbox_product.currentRow()
             self.lbox_product.takeItem(index)
         else:
             mbox = QMessageBox()
             mbox.setText(&quot;판매 기록을 먼저 삭제해야 합니다.&quot;)
             mbox.exec_()
    def OnSelectChange(self):
        item = self.lbox_product.currentItem()
        pid = item.text()
        try:
            product = self.psql.FindProductByID(pid)
        except:
            self.lb_pname.setText(&quot;&quot;)
            self.lb_price2.setText(&quot;&quot;)
        else:
            self.lb_pname.setText(product[0])
            self.lb_price2.setText(str(product[1]))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;PAddDlg.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/n72PA/btqMLTf5XeK/IRL8EmXvqTkAYcv9TzqbH0/PAddDlg.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;PAddDlg.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604647781655&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#PAddDlg.py
from ProductSql import ProductSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class PAddDlg(QDialog):
    def __init__(self,pa):
        super().__init__(pa)        
        self.psql = ProductSql()
        self.setWindowTitle(&quot;상품 등록 창&quot;)
        lb_id = QLabel(&quot;상품 ID:&quot;,self)
        lb_id.move(20,20)
        lb_name = QLabel(&quot;상품 이름:&quot;,self)
        lb_name.move(20,100)
        self.te_id = QTextEdit(self)
        self.te_id.move(200,20)
        self.te_id.resize(200,40)
        self.te_name =QTextEdit(self)
        self.te_name.move(200,100)
        self.te_name.resize(200,40)
        lb_price = QLabel(&quot;가격:&quot;,  self)
        lb_price.move(20,180)
        self.te_price = QTextEdit(self)
        self.te_price.move(200,180)
        self.te_price.resize(200,40)
        self.btn_add = QPushButton(&quot;추가&quot;,self)
        self.btn_add.move(20,260)
        self.btn_add.resize(160,40)
        self.btn_del = QPushButton(&quot;취소&quot;,self)
        self.btn_del.move(200,260)
        self.btn_del.resize(160,40)
        self.btn_add.clicked.connect(self.AddProduct)
        self.btn_del.clicked.connect(self.Cancel)
    def AddProduct(self):
        pid = self.te_id.toPlainText()
        pname = self.te_name.toPlainText()
        price = 0
        try:
            price = int(self.te_price.toPlainText())
        except:
            mbox = QMessageBox()
            mbox.setText(&quot;가격은 0으로 설정합니다.&quot;)
            mbox.exec_()
        try:
            self.psql.AddProduct(pid,pname,price)
        except:
             mbox = QMessageBox()
             mbox.setText(&quot;이미 존재하는 상품 ID입니다.&quot;)
             mbox.exec_()
        else:
            pa = self.parent()
            pa.SAddProduct(pid)
        self.Cancel()
    def Cancel(self):
        self.te_id.setText(&quot;&quot;)
        self.te_name.setText(&quot;&quot;)
        self.te_price.setText(&quot;&quot;)


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Main.py&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1604647820504&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from PyQt5.QtWidgets import QApplication
from CMainWidget import CMainWidget
from PMainWidget import PMainWidget
app = QApplication(sys.argv)
cmw = CMainWidget()
cmw.show()
pmw = PMainWidget()
pmw.show()
sys.exit(app.exec_())&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>MSSQL</category>
      <category>Python</category>
      <category>Qt</category>
      <category>고객 추가</category>
      <category>상품 추가</category>
      <category>소스 코드</category>
      <category>쇼핑몰</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3542</guid>
      <comments>https://ehclub.tistory.com/3542#entry3542comment</comments>
      <pubDate>Fri, 6 Nov 2020 16:30:47 +0900</pubDate>
    </item>
    <item>
      <title>[python] 고객 관리 - QT, MSSQL</title>
      <link>https://ehclub.tistory.com/3541</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAYPZp/btqMLS8oxSt/V3JZeKgTNyLaUS78icOEoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAYPZp/btqMLS8oxSt/V3JZeKgTNyLaUS78icOEoK/img.png&quot; data-alt=&quot;Database 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAYPZp/btqMLS8oxSt/V3JZeKgTNyLaUS78icOEoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAYPZp%2FbtqMLS8oxSt%2FV3JZeKgTNyLaUS78icOEoK%2Fimg.png&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Database 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;CustomSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bO0dcb/btqMGeFDArN/45JdtDVcRoCoxZvV0gsYWK/CustomSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CustomSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604633255633&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CustomSql.py
import pymssql
class CustomSql:
    def AddCustom(self, cid, cname):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query =str.format(&quot;insert into Custom (CID, CNAME) values('{0}','{1}')&quot;, cid,cname)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def RemoveCustom(self, ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;delete from Custom where Ckey={0}&quot;,ckey)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def FindCustom(self,ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID,CNAME from Custom where Ckey={0}&quot;,ckey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:            
            return row[0], row[1]
        conn.close()
        return &quot;&quot;,&quot;&quot;
    def FindKeyByName(self, cname):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CKey from Custom where CName='{0}'&quot;,cname)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def ViewCustomList(self):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID,CNAME from Custom&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;고객 ID:{0}, 고객 이름:{1}&quot;.format(row[0],row[1]))
            row = cursor.fetchone()
        conn.close()
    def FindKeyByID(self,cid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CKey from Custom where CID='{0}'&quot;,cid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return 0
    def FindCustomId(self,ckey):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID from Custom where CKey={0}&quot;,ckey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def CustomList(self):
        customs = list()
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CID, CNAME, CKEY from Custom&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            customs.append(row)
            row = cursor.fetchone()
        conn.close()
        return customs
    def RemoveCustomByID(self,cid):
        ckey = self.FindKeyByID(cid)
        self.RemoveCustom(ckey)
    def FindCustomName(self,cid):
        conn = pymssql.connect(&quot;127.0.0.1:1433&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select CNAME from Custom where cid='{0}' &quot;,cid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return &quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CMainWidget.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/Z9qi5/btqMMG7Zy55/oKH87W8kTxE64pDOQSDtnK/CMainWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CMainWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604633326750&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CMainWidget.py
from CAddDlg import CAddDlg
from CustomSql import CustomSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class CMainWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.csql = CustomSql()
        self.setWindowTitle(&quot;고객 관리 창&quot;)
        self.resize(760,400)
        lb_cl = QLabel(&quot;고객 목록&quot;, self)
        lb_cl.move(20,20)
        self.lbox_custom = QListWidget(self)
        self.lbox_custom.move(20,60)
        self.lbox_custom.resize(300,330)
        self.btn_add = QPushButton(&quot;고객 추가&quot;,self)
        self.btn_add.move(340,60)
        self.btn_add.resize(400,80)
        self.btn_del = QPushButton(&quot;고객 삭제&quot;,self)
        self.btn_del.move(340,180)
        self.btn_del.resize(400,80)
        lb_name = QLabel(&quot;이름:&quot;,self)
        lb_name.move(340,280)
        self.lb_cname = QLabel(&quot;[홍길동]&quot;,self)
        self.lb_cname.move(460,280)
        self.btn_add.clicked.connect(self.AddCustom)
        self.btn_del.clicked.connect(self.DelCustom)
        self.lbox_custom.currentItemChanged.connect(self.OnSelectChange)
        self.ListCustom()
    def ListCustom(self):
        self.lbox_custom.clear()
        customs = self.csql.CustomList()
        for custom in customs:
            self.lbox_custom.addItem(custom[0])
    def AddCustom(self):
        caw = CAddDlg(self)
        caw.show()
    def SAddCustom(self, cid):
        self.lbox_custom.addItem(cid)
    def DelCustom(self):
         item = self.lbox_custom.currentItem()
         index = self.lbox_custom.currentRow()
         self.lbox_custom.takeItem(index)
         self.csql.RemoveCustomByID(item.text())
    def OnSelectChange(self):
        try:
             item = self.lbox_custom.currentItem()
             cname = self.csql.FindCustomName(item.text())
             self.lb_cname.setText(cname)
        except:
            self.lb_cname.setText(&quot;[홍길동]&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CAddDlg.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/coLFiP/btqMChh4por/HOu0EWUJ6p46rbtuDbVDyK/CAddDlg.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;CAddDlg.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604633348430&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#CAddDlg.py
from CustomSql import CustomSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class CAddDlg(QDialog):
    def __init__(self,pa):
        super().__init__(pa)        
        self.csql = CustomSql()
        self.setWindowTitle(&quot;고객 등록 창&quot;)
        lb_id = QLabel(&quot;고객 ID:&quot;,self)
        lb_id.move(20,20)
        lb_name = QLabel(&quot;고객 이름:&quot;,self)
        lb_name.move(20,100)
        self.te_id = QTextEdit(self)
        self.te_id.move(200,20)
        self.te_id.resize(200,40)
        self.te_name =QTextEdit(self)
        self.te_name.move(200,100)
        self.te_name.resize(200,40)
        self.btn_add = QPushButton(&quot;추가&quot;,self)
        self.btn_add.move(20,180)
        self.btn_add.resize(160,40)
        self.btn_del = QPushButton(&quot;취소&quot;,self)
        self.btn_del.move(200,180)
        self.btn_del.resize(160,40)
        self.btn_add.clicked.connect(self.AddCustom)
        self.btn_del.clicked.connect(self.Cancel)
    def AddCustom(self):
        cid = self.te_id.toPlainText()
        cname = self.te_name.toPlainText()
        try:
            self.csql.AddCustom(cid,cname)
        except:
             mbox = QMessageBox()
             mbox.setText(&quot;이미 존재하는 고객 ID입니다.&quot;)
             mbox.exec_()
        else:
            pa = self.parent()
            pa.SAddCustom(cid)
       #    mbox = QMessageBox()
       #    mbox.setText(&quot;추가하였습니다.&quot;)
       #    mbox.exec_()
        self.Cancel()
    def Cancel(self):
        self.te_id.setText(&quot;&quot;)
        self.te_name.setText(&quot;&quot;)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Main.py&lt;/p&gt;
&lt;pre id=&quot;code_1604633372606&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from PyQt5.QtWidgets import QApplication
from CMainWidget import CMainWidget
app = QApplication(sys.argv)
myw = CMainWidget()
myw.show()
sys.exit(app.exec_())&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>MSSQL</category>
      <category>Python</category>
      <category>Qt</category>
      <category>고객 등록</category>
      <category>소스 코드</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3541</guid>
      <comments>https://ehclub.tistory.com/3541#entry3541comment</comments>
      <pubDate>Fri, 6 Nov 2020 12:30:47 +0900</pubDate>
    </item>
    <item>
      <title>[python] 상품 조회 응용 -  MSSQL, QT 사용</title>
      <link>https://ehclub.tistory.com/3540</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGIZVW/btqMBvUsuca/FARxAm922kTX4QtBOOmUHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGIZVW/btqMBvUsuca/FARxAm922kTX4QtBOOmUHk/img.png&quot; data-alt=&quot;데이터베이스 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGIZVW/btqMBvUsuca/FARxAm922kTX4QtBOOmUHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGIZVW%2FbtqMBvUsuca%2FFARxAm922kTX4QtBOOmUHk%2Fimg.png&quot; data-filename=&quot;데이터베이스 다이어그램.png&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;479&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터베이스 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ProductSql.py&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/k4KOH/btqMDyQEJuH/AfF47C099SGp2jKcK3tro0/ProductSql.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ProductSql.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604562461192&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#ProductSql.py
import  pymssql
class ProductSql:
    def AddProduct(self, pid,pname,price):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query =str.format(&quot;insert into Product (PID, PNAME, Price) values('{0}','{1}',{2})&quot;, pid,pname,price)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def RemoveProduct(self,pkey):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;delete from Product where Pkey={0}&quot;,pkey)
        cursor.execute(query)
        conn.commit()
        conn.close()
    def FindProduct(self,key):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select * from Product where Pkey={0}&quot;,key)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;상품ID:{0} 상품이름:{1} 가격:{2}&quot;.format(row[0], row[1],row[2]))
            row =cursor.fetchone()
        conn.commit()
        conn.close()
    def FindKeyByName(self,pname):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PKey from Product where PName='{0}'&quot;,pname)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def ViewProductList(self):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID,PNAME,PRICE from Product&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            print(&quot;상품ID:{0} 상품명:{1} 상품 가격:{2}&quot;.format(row[0], row[1],row[2]))
            row = cursor.fetchone()
        conn.close()
    def FindKeyByID(self,pid):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PKey from Product where PID='{0}'&quot;,pid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return 0
    def FindProductID(self,pkey):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID from Product where PKey={0}&quot;,pkey)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0]
        conn.close()
        return None
    def GetProductsID(self):
        products = list()
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PID from Product&quot;)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            products.append(row[0])
            row = cursor.fetchone()
        conn.close()
        return products
    def FindProdctInfo(self,pid):
        conn = pymssql.connect(&quot;localhost&quot;,&quot;sa&quot;,&quot;1234&quot;,&quot;BigPro&quot;)
        cursor = conn.cursor()
        query = str.format(&quot;select PName,Price from Product where PID='{0}'&quot;,pid)
        cursor.execute(query)
        row = cursor.fetchone()
        while row:
            return row[0], row[1]
        conn.close()
        return None,0


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MyWidget.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/dxbOoC/btqMG6MEj6d/ItMFvk9qZP8o3cl4X3lrPK/MyWidget.py?attach=1&amp;amp;knm=tfile.py&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;MyWidget.py&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1604562487296&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#MyWidget.py
from ProductSql import ProductSql
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle(&quot;상품 조회&quot;)
        self.psql = ProductSql()
        self.lbox_product = QListWidget(self)
        self.lbox_product.resize(400,1000)
        self.resize(1000,1000)
        lb_info_pname = QLabel(&quot;상품명:&quot;,self)
        lb_info_pname.move(420,100)
        self.lb_pname = QLabel(&quot;&quot;,self)
        self.lb_pname.resize(200,80)
        self.lb_pname.move(550,100)
        lb_info_price = QLabel(&quot;가격:&quot;, self)
        lb_info_price.move(420,200)
        self.lb_price = QLabel(&quot;&quot;,self)
        self.lb_price.resize(200,80)
        self.lb_price.move(550,200)        
        self.lbox_product.currentItemChanged.connect(self.OnChangeProduct)
        self.ListProduct()        
    def OnChangeProduct(self):
        pid = self.lbox_product.currentItem().text()
        pname, price = self.psql.FindProdctInfo(pid)
        self.lb_pname.setText(pname)
        self.lb_price.setText(str(price))
    def ListProduct(self):
        self.lbox_product.clear()
        products = self.psql.GetProductsID()
        for product in products:
            self.lbox_product.addItem(product)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Main.py&lt;/p&gt;
&lt;pre id=&quot;code_1604562502939&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
from PyQt5.QtWidgets import QApplication
from MyWidget import MyWidget
app = QApplication(sys.argv)
myw = MyWidget()
myw.show()
sys.exit(app.exec_())
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어 자료구조 알고리즘/프로그래밍 실습</category>
      <category>MSSQL</category>
      <category>Python</category>
      <category>Qt</category>
      <category>상품 조회</category>
      <category>소스 코드</category>
      <author>언제나휴일</author>
      <guid isPermaLink="true">https://ehclub.tistory.com/3540</guid>
      <comments>https://ehclub.tistory.com/3540#entry3540comment</comments>
      <pubDate>Thu, 5 Nov 2020 16:49:11 +0900</pubDate>
    </item>
  </channel>
</rss>