<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>여행하는 코딩끄적끄적</title>
    <link>https://scribblinganything.tistory.com/</link>
    <description>파이썬(python), flask, db, coding, 코딩, 주식, IT, 진동, 피로 등 여러가지 공부합니다.
아이와 함께 여행, 맛집 리뷰합니다.</description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 11:21:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>끄적끄적아무거나</managingEditor>
    <image>
      <title>여행하는 코딩끄적끄적</title>
      <url>https://tistory1.daumcdn.net/tistory/4109295/attach/07aa792cfb614569ba081fb62f9f1be8</url>
      <link>https://scribblinganything.tistory.com</link>
    </image>
    <item>
      <title>샤오미 스마트 무선 선풍기 리뷰 &amp;ndash; 조용하고 똑똑한 여름 필수템(BPLDS03DM)</title>
      <link>https://scribblinganything.tistory.com/812</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8rKRx/btsNjbtsSZf/pgY06MrsmXZKS7eaKRXkaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8rKRx/btsNjbtsSZf/pgY06MrsmXZKS7eaKRXkaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8rKRx/btsNjbtsSZf/pgY06MrsmXZKS7eaKRXkaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8rKRx%2FbtsNjbtsSZf%2FpgY06MrsmXZKS7eaKRXkaK%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;668&quot; height=&quot;389&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;샤오미 스마트 무선 선풍기 리뷰 &amp;ndash; 조용하고 똑똑한 여름 필수템&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 여름을 대비해 새로 구매한 제품이 바로 샤오미 미 스마트 스탠딩 팬 2입니다. 기존에 사용하던 선풍기는 소음이 심하고 스마트 기능이 없어 불편함이 많았는데, 이 제품은 조용하고 다양한 스마트 기능을 제공해 확실히 만족도가 높습니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;깔끔한 디자인과 간편한 조립&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조용하지만 강력한 성능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 장점 중 하나는 DC 인버터 모터를 사용해 소음이 현저히 적다는 점입니다. 최대 풍속 단계인 레벨 4에서도 기존 선풍기에 비해 훨씬 조용하며, 특히 자연풍 모드로 설정하면 마치 실제 바람이 부는 듯한 부드러운 바람을 느낄 수 있습니다.&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 data-ke-size=&quot;size16&quot;&gt;상단 버튼은 총 4개로 구성되어 있으며, 각각 전원, 바람 모드/속도 변경, 회전 기능, 타이머 설정 등의 기능을 수행합니다. 버튼 인터페이스는 직관적이라 누구나 쉽게 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biHZvB/btsNi48Ur4R/rTZhka2NYXAQSkD0IvLqfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biHZvB/btsNi48Ur4R/rTZhka2NYXAQSkD0IvLqfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biHZvB/btsNi48Ur4R/rTZhka2NYXAQSkD0IvLqfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiHZvB%2FbtsNi48Ur4R%2FrTZhka2NYXAQSkD0IvLqfk%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;491&quot; height=&quot;529&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완벽한 스마트 기능 &amp;ndash; Mi Home 앱 연동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샤오미의 Mi Home 앱과의 연동도 매우 쉬웠습니다. 앱을 실행하고 기기 추가 버튼만 누르면 자동으로 선풍기를 인식하고, Wi-Fi에 연결하여 사용할 수 있습니다. 연결이 완료되면 다양한 제어 기능을 사용할 수 있습니다:&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;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siEUy/btsNinnD2cW/IkPCOUpos5dWCF7LlLkJn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siEUy/btsNinnD2cW/IkPCOUpos5dWCF7LlLkJn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siEUy/btsNinnD2cW/IkPCOUpos5dWCF7LlLkJn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiEUy%2FbtsNinnD2cW%2FIkPCOUpos5dWCF7LlLkJn1%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;614&quot; height=&quot;634&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전원 ON/OFF&lt;/li&gt;
&lt;li&gt;자연풍/일반풍 모드 전환&lt;/li&gt;
&lt;li&gt;풍속 단계 세밀 조절 (1~100까지 세분화 가능)&lt;/li&gt;
&lt;li&gt;회전 각도 설정 (30&amp;deg;, 60&amp;deg;, 90&amp;deg;, 120&amp;deg;, 140&amp;deg; 선택 가능)&lt;/li&gt;
&lt;li&gt;타이머 설정 (예: 2시간 후 자동 종료)&lt;/li&gt;
&lt;li&gt;상단 LED 표시등 및 버튼 잠금 설정&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;무엇보다 스마트폰뿐 아니라 구글 어시스턴트나 아마존 알렉사와도 연동되어 음성으로 제어할 수 있는 점이 매우 편리합니다. &amp;ldquo;오케이 구글, 선풍기 켜줘&amp;rdquo; 한 마디면 바람이 솔솔~.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DF9mK/btsNitPc4CG/Rreq3QXX4H2u6kI7gXy0H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DF9mK/btsNitPc4CG/Rreq3QXX4H2u6kI7gXy0H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DF9mK/btsNitPc4CG/Rreq3QXX4H2u6kI7gXy0H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDF9mK%2FbtsNitPc4CG%2FRreq3QXX4H2u6kI7gXy0H0%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;751&quot; height=&quot;510&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배터리와 무선 사용 여부&lt;/b&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;&amp;nbsp;&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;미&amp;nbsp;스마트&amp;nbsp;스탠딩&amp;nbsp;팬&amp;nbsp;2는&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;필수&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;확실한&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;샤오미 스마트 무선 선풍기 쿠팡 할인 판매&lt;/b&gt;&lt;/span&gt;&lt;/h3&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 data-ke-size=&quot;size16&quot;&gt;샤오미&amp;nbsp;미&amp;nbsp;스마트&amp;nbsp;스탠딩&amp;nbsp;팬&amp;nbsp;2가&amp;nbsp;지금&amp;nbsp;쿠팡에서&amp;nbsp;57%&amp;nbsp;할인된&amp;nbsp;128,900원에&amp;nbsp;판매&amp;nbsp;중입니다!&lt;br /&gt;조용하고&amp;nbsp;자연스러운&amp;nbsp;바람을&amp;nbsp;제공하는&amp;nbsp;DC&amp;nbsp;인버터&amp;nbsp;모터&amp;nbsp;탑재로&amp;nbsp;소음&amp;nbsp;없이&amp;nbsp;쾌적한&amp;nbsp;여름을&amp;nbsp;보낼&amp;nbsp;수&amp;nbsp;있어요.&lt;br /&gt;Mi&amp;nbsp;Home&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;유연하게&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있어요.&lt;br /&gt;스마트한&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/cob3MV&quot;&gt;https://link.coupang.com/a/cob3MV&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744446781535&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;샤오미 스마트 무선 스탠드 선풍기2 Pro BPLDS03DM - 스탠드형 | 쿠팡&quot; data-og-description=&quot;현재 별점 4.8점, 리뷰 2193개를 가진 샤오미 스마트 무선 스탠드 선풍기2 Pro BPLDS03DM! 지금 쿠팡에서 더 저렴하고 다양한 스탠드형 제품들을 확인해보세요.&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/cob3MV&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7266364764?vendorItemId=null&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0wd2i/hyYClLJtPo/9EsaUzZB1TkBo01sos4KSk/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/cob3MV&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/cob3MV&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0wd2i/hyYClLJtPo/9EsaUzZB1TkBo01sos4KSk/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492');&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;샤오미 스마트 무선 스탠드 선풍기2 Pro BPLDS03DM - 스탠드형 | 쿠팡&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;현재 별점 4.8점, 리뷰 2193개를 가진 샤오미 스마트 무선 스탠드 선풍기2 Pro BPLDS03DM! 지금 쿠팡에서 더 저렴하고 다양한 스탠드형 제품들을 확인해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3c3d3f; text-align: left;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/812</guid>
      <comments>https://scribblinganything.tistory.com/812#entry812comment</comments>
      <pubDate>Sat, 12 Apr 2025 17:33:36 +0900</pubDate>
    </item>
    <item>
      <title>[Dart] 함수의 파라미터(중괄호, 샾 기호, Required, Named, Optional)</title>
      <link>https://scribblinganything.tistory.com/811</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br5HT6/btsNiJxwkH2/zMn3hUFELA26RQHPE2KON1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br5HT6/btsNiJxwkH2/zMn3hUFELA26RQHPE2KON1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br5HT6/btsNiJxwkH2/zMn3hUFELA26RQHPE2KON1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr5HT6%2FbtsNiJxwkH2%2FzMn3hUFELA26RQHPE2KON1%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;1200&quot; height=&quot;700&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-end=&quot;132&quot; data-start=&quot;79&quot; data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;Required Positional Parameters (필수 위치 파라미터)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;207&quot; data-start=&quot;134&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;207&quot; data-start=&quot;134&quot; data-ke-size=&quot;size16&quot;&gt;이 파라미터는 함수 정의에 나열된 순서대로 값을 &lt;b&gt;반드시&lt;/b&gt; 전달해야 합니다. 기본값을 줄 수 없고, 생략하면 오류가 발생합니다.&lt;/p&gt;
&lt;p data-end=&quot;207&quot; data-start=&quot;134&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744445341169&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void greet(String name, int age) {
  print(&quot;Hello, $name! You are $age years old.&quot;);
}

void main() {
  greet(&quot;Alice&quot;, 30);  // 정상 호출
  // greet(&quot;Alice&quot;);   // 오류: age 파라미터가 없음
}&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;474&quot; data-start=&quot;401&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;446&quot; data-start=&quot;401&quot;&gt;name과 age는 둘 다 순서대로 전달해야 하며 생략할 수 없습니다.&lt;/li&gt;
&lt;li data-end=&quot;474&quot; data-start=&quot;447&quot;&gt;자주 사용하는 일반적인 함수 정의 방식입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;479&quot; data-start=&quot;476&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;520&quot; data-start=&quot;481&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;520&quot; data-start=&quot;481&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;520&quot; data-start=&quot;481&quot; data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;Named Parameters (이름 있는 파라미터)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;636&quot; data-start=&quot;522&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;636&quot; data-start=&quot;522&quot; data-ke-size=&quot;size16&quot;&gt;이 파라미터는 중괄호 {} 안에 정의되며, 이름을 붙여서 값을 전달합니다. 순서와 관계없이 사용할 수 있고, &lt;b&gt;선택적(optional)&lt;/b&gt; 또는 &lt;b&gt;필수(required)&lt;/b&gt; 로 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744445373584&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void greet({String? name, int? age}) {
  print(&quot;Hello, $name! You are $age years old.&quot;);
}

void main() {
  greet(name: &quot;Bob&quot;, age: 25);   // 정상 호출
  greet(age: 20, name: &quot;Charlie&quot;); // 순서를 바꿔도 정상
  greet();                        // 모두 생략 가능 (null 출력됨)
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;필수로 만들고 싶을 경우: required 키워드 사용&lt;/p&gt;
&lt;pre id=&quot;code_1744445398152&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void greet({required String name, int age = 0}) {
  print(&quot;Hello, $name! You are $age years old.&quot;);
}

void main() {
  greet(name: &quot;David&quot;);         // 정상: age는 기본값 사용
  greet(name: &quot;Eve&quot;, age: 20);  // 정상
  // greet(age: 20);            // 오류: name은 필수지만 누락됨
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1294&quot; data-start=&quot;1231&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1266&quot; data-start=&quot;1231&quot;&gt;required 키워드를 붙이면 반드시 전달해야 합니다.&lt;/li&gt;
&lt;li data-end=&quot;1294&quot; data-start=&quot;1267&quot;&gt;선택적인 파라미터는 기본값을 줄 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1299&quot; data-start=&quot;1296&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-end=&quot;1355&quot; data-start=&quot;1301&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1355&quot; data-start=&quot;1301&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1355&quot; data-start=&quot;1301&quot; data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;Optional Positional Parameters (선택적 위치 파라미터)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;이 파라미터는 대괄호 [] 안에 정의되며, 값을 전달하지 않아도 됩니다. 전달하지 않으면 기본값을 사용하게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744445439289&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void greet(String name, [int age = 0]) {
  print(&quot;Hello, $name! You are $age years old.&quot;);
}

void main() {
  greet(&quot;Frank&quot;, 35);  // 정상 호출
  greet(&quot;Grace&quot;);      // age는 기본값 0으로 처리
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1357&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Flutter</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/811</guid>
      <comments>https://scribblinganything.tistory.com/811#entry811comment</comments>
      <pubDate>Sat, 12 Apr 2025 17:11:15 +0900</pubDate>
    </item>
    <item>
      <title>무선 자석 충전식 선풍기 실제 사용 후기(샤오미, Wireless, 리뷰, Review)</title>
      <link>https://scribblinganything.tistory.com/810</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYlGYj/btsHbkwUXhq/Ccvt8VmQTYYewaGN4jKKR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYlGYj/btsHbkwUXhq/Ccvt8VmQTYYewaGN4jKKR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYlGYj/btsHbkwUXhq/Ccvt8VmQTYYewaGN4jKKR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYlGYj%2FbtsHbkwUXhq%2FCcvt8VmQTYYewaGN4jKKR1%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;670&quot; height=&quot;587&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;무선&amp;nbsp;자석&amp;nbsp;충전식&amp;nbsp;선풍기&amp;nbsp;실제&amp;nbsp;사용&amp;nbsp;후기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKtrM/btsHbAlZaHw/ydK3rbbWPTkxSCIyUTfGaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKtrM/btsHbAlZaHw/ydK3rbbWPTkxSCIyUTfGaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKtrM/btsHbAlZaHw/ydK3rbbWPTkxSCIyUTfGaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKtrM%2FbtsHbAlZaHw%2FydK3rbbWPTkxSCIyUTfGaK%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;657&quot; height=&quot;472&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&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;무선&amp;nbsp;충전식이라&amp;nbsp;이동이&amp;nbsp;편리합니다.&amp;nbsp;&lt;b&gt;완충&amp;nbsp;시&amp;nbsp;약&amp;nbsp;11시간&amp;nbsp;정도&amp;nbsp;사용가능&lt;/b&gt;&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;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjYBLt/btsHecjDBmQ/R7lBBo9ZZ69wnUUjpMaL20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjYBLt/btsHecjDBmQ/R7lBBo9ZZ69wnUUjpMaL20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjYBLt/btsHecjDBmQ/R7lBBo9ZZ69wnUUjpMaL20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjYBLt%2FbtsHecjDBmQ%2FR7lBBo9ZZ69wnUUjpMaL20%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;628&quot; height=&quot;428&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;그리고&amp;nbsp;&lt;b&gt;장점은&amp;nbsp;팬의&amp;nbsp;소음이&amp;nbsp;작습니다.&lt;/b&gt;&amp;nbsp;스펙&amp;nbsp;상으로는&amp;nbsp;약&amp;nbsp;30.63dB라고&amp;nbsp;하는데&amp;nbsp;일상&amp;nbsp;대화가&amp;nbsp;60dB정도이니&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; &lt;br /&gt;&lt;br /&gt;별도의&amp;nbsp;&lt;b&gt;리모콘은&amp;nbsp;없지만&amp;nbsp;스마트&amp;nbsp;앱을&amp;nbsp;제공&lt;/b&gt;해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4DCYn/btsHbVcmOgK/iExDMZCSB1sgfVDKKsKge1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4DCYn/btsHbVcmOgK/iExDMZCSB1sgfVDKKsKge1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4DCYn/btsHbVcmOgK/iExDMZCSB1sgfVDKKsKge1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4DCYn%2FbtsHbVcmOgK%2FiExDMZCSB1sgfVDKKsKge1%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;612&quot; height=&quot;384&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;왠만한&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;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;이번에&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;쿠팡에서&amp;nbsp;15%&amp;nbsp;할인된&amp;nbsp;109,530원에&amp;nbsp;판매를&amp;nbsp;한다고&amp;nbsp;하니&amp;nbsp;관심&amp;nbsp;있으시면&amp;nbsp;아래&amp;nbsp;링크를&amp;nbsp;통해&amp;nbsp;방문&lt;/span&gt;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bAyblv&quot;&gt;https://link.coupang.com/a/bAyblv&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714961188010&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;샤오미 미지아 충전식 스탠딩 선풍기&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bAyblv&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7286676534?vendorItemId=86055993561&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fDf59/hyVZt6s5H5/kIAbyIOHfe29815TKy9oQK/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492,https://scrap.kakaocdn.net/dn/csnmAd/hyVZqu6BTt/71JWQDoNom2lKfFxI7RWok/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bAyblv&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bAyblv&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fDf59/hyVZt6s5H5/kIAbyIOHfe29815TKy9oQK/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492,https://scrap.kakaocdn.net/dn/csnmAd/hyVZqu6BTt/71JWQDoNom2lKfFxI7RWok/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;샤오미 미지아 충전식 스탠딩 선풍기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3c3d3f; text-align: left;&quot;&gt;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;무선 자석 충전식 선풍기 상세 스펙&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnJLwq/btsHa4nw7BY/vwiMzkdQjZCDzaDkguzk10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnJLwq/btsHa4nw7BY/vwiMzkdQjZCDzaDkguzk10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnJLwq/btsHa4nw7BY/vwiMzkdQjZCDzaDkguzk10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnJLwq%2FbtsHa4nw7BY%2FvwiMzkdQjZCDzaDkguzk10%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;490&quot; height=&quot;370&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/40QX0/btsHediyUxy/dQ0d2tJPW5FQ1vDS8xn9fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/40QX0/btsHediyUxy/dQ0d2tJPW5FQ1vDS8xn9fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/40QX0/btsHediyUxy/dQ0d2tJPW5FQ1vDS8xn9fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F40QX0%2FbtsHediyUxy%2FdQ0d2tJPW5FQ1vDS8xn9fk%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;456&quot; height=&quot;457&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kONE1/btsHbeKjsZb/0ZgKlx98IN1KdkqssR4MyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kONE1/btsHbeKjsZb/0ZgKlx98IN1KdkqssR4MyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kONE1/btsHbeKjsZb/0ZgKlx98IN1KdkqssR4MyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkONE1%2FbtsHbeKjsZb%2F0ZgKlx98IN1KdkqssR4MyK%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;453&quot; height=&quot;232&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/spHGA/btsHddb1lBU/ucHtVmB1uF3hPdfOZdGjjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/spHGA/btsHddb1lBU/ucHtVmB1uF3hPdfOZdGjjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/spHGA/btsHddb1lBU/ucHtVmB1uF3hPdfOZdGjjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FspHGA%2FbtsHddb1lBU%2FucHtVmB1uF3hPdfOZdGjjK%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;433&quot; height=&quot;251&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/810</guid>
      <comments>https://scribblinganything.tistory.com/810#entry810comment</comments>
      <pubDate>Mon, 6 May 2024 11:11:03 +0900</pubDate>
    </item>
    <item>
      <title>[도커] apache 웹서버 설치 및 동작(Web server, Docker)</title>
      <link>https://scribblinganything.tistory.com/809</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjo7Tv/btsF4YAEMj5/mr4NTKDMtyV1YzTkV6quRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjo7Tv/btsF4YAEMj5/mr4NTKDMtyV1YzTkV6quRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjo7Tv/btsF4YAEMj5/mr4NTKDMtyV1YzTkV6quRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjo7Tv%2FbtsF4YAEMj5%2Fmr4NTKDMtyV1YzTkV6quRK%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;396&quot; height=&quot;257&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;apache 웹서버 설치 및 실행&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;도커(Docker)에서&amp;nbsp;&lt;b&gt;웹&amp;nbsp;서버를&amp;nbsp;설정할&amp;nbsp;때&amp;nbsp;가장&amp;nbsp;일반적으로&amp;nbsp;사용되는&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;소프트웨어는&amp;nbsp;Apache와&amp;nbsp;Nginx&lt;/b&gt;입니다.&amp;nbsp;이&amp;nbsp;중에서&amp;nbsp;Apache가&amp;nbsp;더&amp;nbsp;널리&amp;nbsp;사용됩니다.&amp;nbsp;&lt;b&gt;Apache&amp;nbsp;웹&amp;nbsp;서버는&amp;nbsp;도커에서는&amp;nbsp;httpd라는&amp;nbsp;이름으로&amp;nbsp;알려져&amp;nbsp;있습니다&lt;/b&gt;.&amp;nbsp;이는&amp;nbsp;Apache의&amp;nbsp;공식적인&amp;nbsp;프로젝트&amp;nbsp;이름인&amp;nbsp;&quot;HTTP&amp;nbsp;Daemon&quot;의&amp;nbsp;약자입니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Docker에서&amp;nbsp;이미지를&amp;nbsp;찾을&amp;nbsp;때&amp;nbsp;docker&amp;nbsp;search&amp;nbsp;명령어를&amp;nbsp;사용&lt;/b&gt;합니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;Apache&amp;nbsp;웹&amp;nbsp;서버의&amp;nbsp;도커&amp;nbsp;이미지를&amp;nbsp;찾기&amp;nbsp;위해서는&amp;nbsp;httpd라는&amp;nbsp;이름으로&amp;nbsp;검색합니다.&amp;nbsp;명령어에서&amp;nbsp;--limit=5는&amp;nbsp;검색&amp;nbsp;결과의&amp;nbsp;수를&amp;nbsp;5개로&amp;nbsp;제한하라는&amp;nbsp;의미입니다.&amp;nbsp;따라서,&amp;nbsp;docker&amp;nbsp;search&amp;nbsp;httpd&amp;nbsp;--limit=5&amp;nbsp;명령어를&amp;nbsp;실행하면&amp;nbsp;Apache&amp;nbsp;웹&amp;nbsp;서버의&amp;nbsp;도커&amp;nbsp;이미지&amp;nbsp;중&amp;nbsp;가장&amp;nbsp;인기&amp;nbsp;있거나&amp;nbsp;추천되는&amp;nbsp;상위&amp;nbsp;5개의&amp;nbsp;이미지를&amp;nbsp;보여줍니다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711357970945&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker search httpd --limit=5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위와 같이 명령을 입력하면 아래와 같이 결과를 확인할 수 있습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1711358014501&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker search httpd --limit=5
NAME                     DESCRIPTION                                     STARS     OFFICIAL
httpd                    The Apache HTTP Server Project                  23        [OK]
clearlinux/httpd         httpd HyperText Transfer Protocol (HTTP) ser&amp;hellip;   5
paketobuildpacks/httpd                                                   0
vulhub/httpd                                                             0
jitesoft/httpd           Apache httpd on Alpine linux.                   0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;위 이미지 중에 httpd를 설치 합니다.&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 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;pre id=&quot;code_1711358166491&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d httpd&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;docker run httpd 명령어는 Docker에서 Apache 웹 서버를 설치하고 실행하는 과정을 한 번의 단계로 간소화&lt;/b&gt;합니다. 여기서 httpd는 Apache 웹 서버의 Docker 이미지 이름입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;이미지 다운로드&lt;/b&gt;: 만약 로컬 시스템에 httpd 이미지가 없다면, Docker는 자동으로 Docker Hub(또는 설정된 다른 레지스트리)에서 httpd 이미지를 찾아서 다운로드합니다. 이미지는 Apache 웹 서버를 실행하는 데 필요한 모든 파일과 설정을 포함하고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨테이너 생성 및 실행&lt;/b&gt;: 이미지 다운로드 후, Docker는 해당 이미지를 기반으로 새로운 컨테이너를 생성하고 실행합니다. 컨테이너는 격리된 환경에서 Apache 웹 서버를 실행합니다. 기본적으로 Apache는 80번 포트를 사용하여 웹 서버를 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;웹&amp;nbsp;서버&amp;nbsp;실행&lt;/b&gt;:&amp;nbsp;컨테이너&amp;nbsp;내부에서&amp;nbsp;Apache&amp;nbsp;웹&amp;nbsp;서버가&amp;nbsp;자동으로&amp;nbsp;시작됩니다.&amp;nbsp;이&amp;nbsp;때부터&amp;nbsp;Apache&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;/li&gt;
&lt;/ol&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-d 를 사용해서 백그라운드로 동작&lt;/b&gt; 합니다.&amp;nbsp;&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;pre id=&quot;code_1711358359956&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS                     PORTS     NAMES
49c1217b6077   httpd     &quot;httpd-foreground&quot;   17 seconds ago   Up 16 seconds              80/tcp    stupefied_poitras
d7298bb36015   httpd     &quot;-d&quot;                 25 seconds ago   Created                    80/tcp    busy_mendel
a647da0fcb2b   httpd     &quot;httpd-foreground&quot;   3 minutes ago    Exited (0) 2 minutes ago             jovial_hofstadter
b5af3fadfb4e   ubuntu    &quot;/bin/bash&quot;          19 minutes ago   Up 19 minutes                        goofy_liskov&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;apache 웹서버 접속 방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711360822627&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -p 8888:80 httpd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker&amp;nbsp;run&amp;nbsp;-d&amp;nbsp;-p&amp;nbsp;8888:80&amp;nbsp;httpd&amp;nbsp;명령어에서&amp;nbsp;-p&amp;nbsp;8888:80&amp;nbsp;부분은&amp;nbsp;Docker&amp;nbsp;컨테이너의&amp;nbsp;80번&amp;nbsp;포트를&amp;nbsp;호스트의&amp;nbsp;8888번&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 data-ke-size=&quot;size16&quot;&gt;기본적으로 Apache 웹 서버는 80번 포트를 사용하여 HTTP 트래픽을 처리합니다. 하지만, &lt;b&gt;Docker를 사용할 때 컨테이너 내부의 포트와 호스트 시스템의 포트를 연결해야 외부에서 컨테이너 내부로의 접근이 가능&lt;/b&gt;해집니다. 여기서 8888:80이 의미하는 바는 호스트 시스템의 8888번 포트와 컨테이너 내부의 80번 포트를 연결한다는 것입니다. 이렇게 설정함으로써, 사용자는 호스트 시스템의 8888번 포트를 통해 Apache 웹 서버에 접근할 수 있게 됩니다.&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;호스트 시스템에서 이미 80번 포트를 다른 서비스가 사용하고 있는 경우가 있을 수 있습니다. 이런 상황에서 Docker 컨테이너의 80번 포트를 직접 호스트의 80번 포트에 연결하려고 하면 포트 충돌 문제가 발생할 수 있습니다. 따라서, 다른 번호(예: 8888)를 사용하여 포트를 매핑함으로써 이러한 충돌을 방지할 수 있습니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 AWS EC2의 Instance에서 Public IPv4 주소를 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1469&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZSkKm/btsF5vyqHVo/VcauGm6aQGcKaxmUMHBu0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZSkKm/btsF5vyqHVo/VcauGm6aQGcKaxmUMHBu0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZSkKm/btsF5vyqHVo/VcauGm6aQGcKaxmUMHBu0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZSkKm%2FbtsF5vyqHVo%2FVcauGm6aQGcKaxmUMHBu0k%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;1469&quot; height=&quot;765&quot; data-origin-width=&quot;1469&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Security groups를 클릭해서 inbound 조건을 아래와 같이 추가 하여야 합니다. 기존의 80에서 8888을 추가해야 8888로 접근이 가능 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1469&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RJI6n/btsF6JCG8WH/fJQL0TDMAtcMkyXYV9C370/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RJI6n/btsF6JCG8WH/fJQL0TDMAtcMkyXYV9C370/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RJI6n/btsF6JCG8WH/fJQL0TDMAtcMkyXYV9C370/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRJI6n%2FbtsF6JCG8WH%2FfJQL0TDMAtcMkyXYV9C370%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;1469&quot; height=&quot;797&quot; data-origin-width=&quot;1469&quot; data-origin-height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;설정후 아래와 같이 정상 접속이 됨을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2qfl4/btsF10fAsBN/nyqmPl17MSsiUy8J9ltkJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2qfl4/btsF10fAsBN/nyqmPl17MSsiUy8J9ltkJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2qfl4/btsF10fAsBN/nyqmPl17MSsiUy8J9ltkJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2qfl4%2FbtsF10fAsBN%2FnyqmPl17MSsiUy8J9ltkJK%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;778&quot; height=&quot;228&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/Docker(도커)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/809</guid>
      <comments>https://scribblinganything.tistory.com/809#entry809comment</comments>
      <pubDate>Wed, 27 Mar 2024 08:43:49 +0900</pubDate>
    </item>
    <item>
      <title>[LSH]Min Hashing이란? (Locality Sensitive Hashing#2)</title>
      <link>https://scribblinganything.tistory.com/808</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/by4rGl/btsFVVw8HuW/GlbQDjizFjoUT7d7yPoZKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/by4rGl/btsFVVw8HuW/GlbQDjizFjoUT7d7yPoZKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/by4rGl/btsFVVw8HuW/GlbQDjizFjoUT7d7yPoZKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fby4rGl%2FbtsFVVw8HuW%2FGlbQDjizFjoUT7d7yPoZKK%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;805&quot; height=&quot;505&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oCnAJ/btsFWkQYW5D/F2YBRv8lgqQ8t6fwFywHLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oCnAJ/btsFWkQYW5D/F2YBRv8lgqQ8t6fwFywHLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oCnAJ/btsFWkQYW5D/F2YBRv8lgqQ8t6fwFywHLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoCnAJ%2FbtsFWkQYW5D%2FF2YBRv8lgqQ8t6fwFywHLk%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;939&quot; height=&quot;402&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Min&amp;nbsp;Hashing이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Min-Hashing은 대규모 집합을 짧은 서명(signature)으로 변환하는 기법&lt;/b&gt;이며,&lt;b&gt; 이 과정에서 원래 &lt;u&gt;집합 간의 유사성을 보존&lt;/u&gt;하는 것을 목표&lt;/b&gt;로 합니다. 이 방법은 특히 대용량 데이터에서 유사한 항목을 효율적으로 비교하기 위해 사용됩니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;&lt;b&gt;1. 0/1 벡터 인코딩&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 집합(universal set)의 각 원소에 대해, 해당 원소가 주어진 집합에 포함되면 1로, 그렇지 않으면 0으로 표시하는 벡터로 집합을 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 예를 들어, 전체 집합이 {A, B, C, D}이고, 주어진 집합이 {A, C}라면, 이 집합은 [1, 0, 1, 0]으로 표현됩니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2. 집합 연산의 비트 연산으로의 해석&lt;/b&gt;&lt;/span&gt;&lt;/u&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;집합 교집합: 두 집합의 교집합은 두 집합에 공통으로 포함된 원소들의 집합입니다. 비트 연산에서는 이를 &quot;비트별 AND 연산&quot;으로 해석할 수 있습니다. 두 벡터의 동일한 위치에 있는 비트가 모두 1일 경우에만 결과 벡터의 해당 위치의 비트가 1이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 예: [1, 0, 1, 0] AND [0, 1, 1, 0] = [0, 0, 1, 0] (C 원소만 공통)&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;합집합:&amp;nbsp;두&amp;nbsp;집합의&amp;nbsp;합집합은&amp;nbsp;두&amp;nbsp;집합의&amp;nbsp;모든&amp;nbsp;원소를&amp;nbsp;포함하는&amp;nbsp;집합입니다.&amp;nbsp;비트&amp;nbsp;연산에서는&amp;nbsp;&quot;비트별&amp;nbsp;OR&amp;nbsp;연산&quot;으로&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;1이면&amp;nbsp;결과&amp;nbsp;벡터의&amp;nbsp;해당&amp;nbsp;위치의&amp;nbsp;비트가&amp;nbsp;1이&amp;nbsp;됩니다. &lt;br /&gt;&amp;gt;&amp;gt; 예: [1, 0, 1, 0] OR [0, 1, 1, 0] = [1, 1, 1, 0] (A, B, C 원소 포함)&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;3. 해싱&lt;/u&gt;&lt;/span&gt;&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4. 최소값 선택&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 해시 함수에 대해, 변환된 해시 값들 중 최소값을 선택합니다. 이 최소값들은 해당 집합의 &quot;서명&quot;을 구성합니다. 여러 해시 함수를 사용함으로써, 각 집합은 고유한 서명을 갖게 됩니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;5. 유사성 비교&lt;/b&gt;&lt;/span&gt;&lt;/u&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;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Min-Hashing은&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;중복을&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;만한&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;장점&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;효율성&lt;/b&gt;: 대규모 데이터 집합 간의 유사성을 비교할 때, 원본 데이터를 직접 비교하는 것보다 훨씬 적은 계산량으로 비교가 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유사성 보존&lt;/b&gt;: Min-Hashing은 원본 집합의 유사성을 잘 보존하는 서명을 생성합니다. 따라서, 서명을 비교함으로써 원본 데이터의 유사도를 간접적으로 추정할 수 있습니다.&lt;/li&gt;
&lt;/ul&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Min Hashing 예제 실습#1&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D1 = &quot;aacbba&quot; Document에서 k = 2인 Shingles로 Set을 구하면 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; S(D1) = {aa, ac, ba, bb} &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 hash로 Shingles를 간단하게 표현하겠습니다.&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;0 = aa&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 = ab&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2 = ac&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3 = ba&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4 = bb&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 data-ke-size=&quot;size16&quot;&gt;위와 같이 5가지에 대해 hash를 정의하면 아래와 같이 표현할 수 있습니다.&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;D1을 벡터 인코딩을 사용해서 C1으로 변환하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;C1 =&amp;nbsp; 10111&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0은 해당 값이 없다는 의미 입니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C2 = 10011 으로 가정하겠습니다.&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 data-ke-size=&quot;size16&quot;&gt;C1과 C2의 교집합과 합집합의 수는 아래와 같이 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Size of intersection = 3,&amp;nbsp; size of union = 4&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jaccard similarity를 구하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;sim(C1, C2) = 3 / 4&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; d(C1,C2) = 1 - (Jaccard similarity) = 3/6 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Min Hashing 예제 실습#2&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mq5GQ/btsFU6Mul3z/u8ucm6qIvW6EWhDZ5A9Nv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mq5GQ/btsFU6Mul3z/u8ucm6qIvW6EWhDZ5A9Nv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mq5GQ/btsFU6Mul3z/u8ucm6qIvW6EWhDZ5A9Nv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMq5GQ%2FbtsFU6Mul3z%2Fu8ucm6qIvW6EWhDZ5A9Nv1%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;298&quot; height=&quot;464&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림과 같이 Document와 Shingles가 정리되어있다고 가정하겠습니다. Document를 벡터 변환한 C1을 첫번째 열이고 C2는 두번째 열입니다.&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;유사성(Simularity)를 구하면 아래와 같습니다.&amp;nbsp;이때 주의할 점은 0, 0은 set이 없다는 의미 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; Size of intersection = 3, size of union = 6 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sim(C1, C2) = 3/6&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Min Hashing 예제 실습#3&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Min Hashing에서 Hashing을 사용해서 데이터의 사이즈를 줄이고 유사성(Similarity)도 크게 변하지 않는 C를 찾아 보겠습니다.&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 data-ke-size=&quot;size16&quot;&gt;이번 실습의 목표는 아래 조건을 만족 하는 Hash Function을 찾는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; if sim(C1,C2) is high, then with high probability of h(C1) = h(C2)&amp;nbsp; &lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;if sim(C1,C2) is low, then with high probability of h(C1) &amp;ne; h(C2) &lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BODnJ/btsFVUSC77Z/UBX6WmEiuSqK7H025r33k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BODnJ/btsFVUSC77Z/UBX6WmEiuSqK7H025r33k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BODnJ/btsFVUSC77Z/UBX6WmEiuSqK7H025r33k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBODnJ%2FbtsFVUSC77Z%2FUBX6WmEiuSqK7H025r33k1%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;853&quot; height=&quot;577&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림은 앞서 예제2의 Shingles X Document 행렬을 사용해서 Hash를 이용해서 Signature 행렬을 만드는 과정입니다.&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;우선 랜덤하게 순열(Permutation)을 만듭니다. 여기서는 3개의 순열을 만들었습니다. 3개의 순열은 Signature 행렬의 3개의 Shingles로 바뀌게 됩니다.&amp;nbsp;&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;Permutation의 1부터 순차적으로 검색해서 1이 나올때까지 찾습니다. 1이 나오면 해당 index 번호를 Signature 행렬에 기록 합니다.&amp;nbsp;&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;위 과정을 반복해서 Signature 행렬을 완성 합니다.&amp;nbsp;&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;이렇게 만들어진 Signature 행렬과 기본 행렬의 Similarity를 비교하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMPZ0m/btsFTb864NP/4bDglCqp7n32S6Wp1OWmTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMPZ0m/btsFTb864NP/4bDglCqp7n32S6Wp1OWmTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMPZ0m/btsFTb864NP/4bDglCqp7n32S6Wp1OWmTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMPZ0m%2FbtsFTb864NP%2F4bDglCqp7n32S6Wp1OWmTK%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;399&quot; height=&quot;159&quot; data-origin-width=&quot;399&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Col/Col 은 기본 테이블의 Document를 비교해서 Similarity를 계산한 것이고 Sig/Sig는 Signature 행렬을 사용해서 Similarity를 계산한 것입니다.&amp;nbsp;&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;위와 같이 Similarity 테이블를 다른 Permutation 조합으로 만들어서 유사성 값이 비슷한 형태의 Hash 함수를 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여러가지공부/머신러닝(Machine Learning)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/808</guid>
      <comments>https://scribblinganything.tistory.com/808#entry808comment</comments>
      <pubDate>Tue, 26 Mar 2024 08:59:23 +0900</pubDate>
    </item>
    <item>
      <title>[도커] 컨테이너 실행 및 종료, 백그라운드 동작 (start, run, Docker, Container, background)</title>
      <link>https://scribblinganything.tistory.com/807</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl3xtr/btsFJBtt1KM/kXNE4PSKbDk3mhEG7mug80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl3xtr/btsFJBtt1KM/kXNE4PSKbDk3mhEG7mug80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl3xtr/btsFJBtt1KM/kXNE4PSKbDk3mhEG7mug80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl3xtr%2FbtsFJBtt1KM%2FkXNE4PSKbDk3mhEG7mug80%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;396&quot; height=&quot;257&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;컨테이너 실행 Create&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. ps -a 로 현재 실행 중이거나 실행 가능한 도커 이미지를 검색합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710320718231&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                  PORTS     NAMES
3aa7ae8b50f9   ubuntu        &quot;/bin/bash&quot;   2 minutes ago   Created                           laughing_chebyshev
7fc5d1fcff44   hello-world   &quot;/hello&quot;      8 days ago      Exited (0) 8 days ago             great_cerf&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;2. 구분 되어지는 아이디 일부 값을 입력해서 start로 도커를 실행합니다. 결과로 입력에 사용한 ID가 return 출력 됩니다. start에 별도의 입력을 넣지 않아 /bin/bash 쉘 명령은 실행 후 종료 될 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710320758455&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker start 3aa7ae
3aa7ae&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Status 창을 통해 해당 도커가 실행 후 Exited 되었음을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710320827111&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                          PORTS     NAMES
3aa7ae8b50f9   ubuntu        &quot;/bin/bash&quot;   16 minutes ago   Exited (0) About a minute ago             laughing_chebyshev
7fc5d1fcff44   hello-world   &quot;/hello&quot;      8 days ago       Exited (0) 8 days ago                     great_cerf&lt;/code&gt;&lt;/pre&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;컨테이너 실행 Run&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker&amp;nbsp;start&amp;nbsp;명령어를&amp;nbsp;사용할&amp;nbsp;때&amp;nbsp;표준&amp;nbsp;입력(STDIN)을&amp;nbsp;직접&amp;nbsp;넣는&amp;nbsp;기능은&amp;nbsp;직접적으로&amp;nbsp;지원되지&amp;nbsp;않습니다.&amp;nbsp;docker&amp;nbsp;start&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;맞춰져&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 data-ke-size=&quot;size16&quot;&gt;그러므로 초기 설정 및 사용을 위해서 컨테이너를 RUN을 통해 실행합니다.&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 data-ke-size=&quot;size16&quot;&gt;1. run 으로 ubuntu 이미지를 컨테이너로 만들고 실행 해줍니다. 이때 -it는 i를 통해 입력을 받을 수 있게 하고 t를 통해 터미널을 생성합니다. 아래와 같이 실행 후 터미널 입력으로 바뀜을 알 수 있습니다.&amp;nbsp; exit를 통해 터미널을 종료 할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710321655535&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker run -it ubuntu
root@1b0d3c18eebe:/#&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아래와 같이 -d 옵션을 사용하게 되면 백그라운드(Background)로 프로 그램이 동작하게 됩니다. 아래와 같이 ps로 확인한 결과 status가 up 임을 알 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710322169191&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker run -it -d ubuntu
dd87a1b65a4cd48874d7ea585da7c5225e72e895304e976d83976ec41d989252
ubuntu@ip-172-31-4-29:~$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
dd87a1b65a4c   ubuntu    &quot;/bin/bash&quot;   4 seconds ago   Up 3 seconds             happy_nobel&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp; attach 명령을 사용해서 백그라운드로 동작하는 우분투에 접속할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710322320622&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker attach dd87
root@dd87a1b65a4c:/#&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 앞서 start를 사용해서 종료된 도커를 다시 실행할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710322567095&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker start dd87
dd87
ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                      PORTS     NAMES
dd87a1b65a4c   ubuntu        &quot;/bin/bash&quot;   7 minutes ago    Up 17 seconds                         happy_nobel
1b0d3c18eebe   ubuntu        &quot;/bin/bash&quot;   15 minutes ago   Exited (0) 7 minutes ago              xenodochialhaw
3aa7ae8b50f9   ubuntu        &quot;/bin/bash&quot;   45 minutes ago   Exited (0) 30 minutes ago             laughing_chyshev
7fc5d1fcff44   hello-world   &quot;/hello&quot;      8 days ago       Exited (0) 8 days ago                 great_cerf&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 도커 리스트에 있는 컨테이너를 삭제하는 방법은 아래와 같이 exit로 종료 후 rm을 통해서 삭제를 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710322670519&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker attach dd87
root@dd87a1b65a4c:/# exit
exit
ubuntu@ip-172-31-4-29:~$ docker rm dd87
dd87&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 모든 도커 컨테이너를 삭제하고 싶으면 아래와 같이 prune 명령을 사용 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710322748735&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
1b0d3c18eebe1a2d664bf2e3603151b2e82af5bf88be371d594b5f9d333af40e
3aa7ae8b50f938304f7c71adbb340f2f9f2c9ccb29f77b15c028cede7f178803
7fc5d1fcff4422d52712394945729bf25cf8eceef1c8185142ff0d54966499fc

Total reclaimed space: 5B
ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/Docker(도커)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/807</guid>
      <comments>https://scribblinganything.tistory.com/807#entry807comment</comments>
      <pubDate>Mon, 25 Mar 2024 17:59:48 +0900</pubDate>
    </item>
    <item>
      <title>[도커] Docker Image와 Container란?(이미지, 컨테이너)</title>
      <link>https://scribblinganything.tistory.com/806</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6VdeW/btsFNaOcpzY/WJGIDP6IsOtPfl78jAnkAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6VdeW/btsFNaOcpzY/WJGIDP6IsOtPfl78jAnkAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6VdeW/btsFNaOcpzY/WJGIDP6IsOtPfl78jAnkAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6VdeW%2FbtsFNaOcpzY%2FWJGIDP6IsOtPfl78jAnkAK%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;396&quot; height=&quot;257&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Image로&amp;nbsp;Container생성&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;도커 이미지 (Docker Image)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;도커 이미지는 컨테이너를 생성하기 위한 템플릿 역할&lt;/b&gt;을 합니다. 이미지는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하고 있습니다. 예를 들어, 특정 소프트웨어 또는 서비스를 실행하는 데 필요한 코드, 런타임, 라이브러리, 환경 변수, 설정 파일 등이 이미지 안에 포함됩니다.&lt;/li&gt;
&lt;li&gt;이미지는 불변의(read-only) 특성을 가지고 있으며, 이미지 자체를 수정하는 대신 새로운 이미지를 생성하여 업데이트합니다.&lt;/li&gt;
&lt;li&gt;이미지는 Dockerfile이라는 스크립트를 통해 생성되며, 이 Dockerfile에는 이미지를 만들기 위한 명령어들이 담겨 있습니다.&lt;/li&gt;
&lt;li&gt;이미지는 도커 허브(Docker Hub)와 같은 레지스트리에 저장되며, 여기서 이미지를 다운로드하여 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;도커 컨테이너 (Docker Container)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;도커 컨테이너는 도커 이미지를 실행한 인스턴스&lt;/b&gt;입니다. 컨테이너는 이미지를 기반으로 하여 실제로 실행되고 있는 응용 프로그램입니다.&lt;/li&gt;
&lt;li&gt;컨테이너는 격리된 환경에서 실행되므로, 다른 컨테이너와 시스템의 나머지 부분으로부터 독립적입니다.&lt;/li&gt;
&lt;li&gt;컨테이너는 생성, 시작, 중지, 이동, 삭제 등을 할 수 있으며, 이러한 동작들은 도커 CLI나 도커 API를 통해 관리됩니다.&lt;/li&gt;
&lt;li&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;삭제하면&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;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;1. 아래와 같이 ls로 이미지를 검색합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710319813185&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        latest    ca2b0f26964c   2 weeks ago     77.9MB
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. create와 이미지명을 입력 해서 콘테이너를 만들어 줍니다. 만들면 아래와 같이 id값이 출력 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710319898320&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker create ubuntu
3aa7ae8b50f938304f7c71adbb340f2f9f2c9ccb29f77b15c028cede7f178803&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. ps 명령으로 현재 실행 중인 도커 컨테이너를 보여 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1710320009409&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                  PORTS     NAMES
3aa7ae8b50f9   ubuntu        &quot;/bin/bash&quot;   2 minutes ago   Created                           laughing_chebyshev
7fc5d1fcff44   hello-world   &quot;/hello&quot;      8 days ago      Exited (0) 8 days ago             great_cerf&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CONTAINER ID:&lt;/b&gt; 컨테이너의 고유 식별자입니다. 이 ID는 도커 시스템 내에서 컨테이너를 구분하기 위해 사용됩니다. 예시에서는 3aa7ae8b50f9와 7fc5d1fcff44가 컨테이너 ID입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IMAGE&lt;/b&gt;: 컨테이너를 생성할 때 사용된 도커 이미지입니다. 이 이미지는 컨테이너 실행에 필요한 코드, 라이브러리, 환경 설정 등을 포함하고 있습니다. 예시에서는 ubuntu와 hello-world 이미지가 사용되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;COMMAND&lt;/b&gt;: 컨테이너가 시작될 때 실행되는 기본 명령어입니다. 이 명령은 이미지 내부에 정의되어 있거나, 컨테이너를 시작할 때 명시적으로 지정할 수 있습니다. 예시에서는 ubuntu 컨테이너가 /bin/bash를, hello-world 컨테이너가 /hello를 실행하도록 설정되어 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CREATED&lt;/b&gt;: 컨테이너가 생성된 시간입니다. 이 정보는 얼마나 오래전에 컨테이너가 만들어졌는지를 나타냅니다. 예시에서는 ubuntu 컨테이너가 2 minutes ago에, hello-world 컨테이너가 8 days ago에 생성되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;STATUS&lt;/b&gt;: 컨테이너의 현재 상태를 나타냅니다. 상태에는 Created, Running, Exited, Paused 등이 있을 수 있으며, Exited 상태일 경우 종료 코드와 함께 표시됩니다. 예시에서 ubuntu 컨테이너는 아직 시작되지 않은 상태(Created)이며, hello-world 컨테이너는 Exited (0) 상태로 정상 종료되었음을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PORTS&lt;/b&gt;: 컨테이너가 사용하는 네트워크 포트와 관련된 매핑 정보입니다. 외부에서 컨테이너 내부의 애플리케이션에 접근하기 위해 사용됩니다. 예시에서는 포트 매핑이 설정되지 않았습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NAMES&lt;/b&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;할당합니다.&amp;nbsp;예시에서는&amp;nbsp;laughing_chebyshev와&amp;nbsp;great_cerf가&amp;nbsp;컨테이너&amp;nbsp;이름으로&amp;nbsp;사용되었습니다.&lt;/li&gt;
&lt;/ul&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/Docker(도커)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/806</guid>
      <comments>https://scribblinganything.tistory.com/806#entry806comment</comments>
      <pubDate>Mon, 25 Mar 2024 08:38:39 +0900</pubDate>
    </item>
    <item>
      <title>자카드 거리/유사도란? 예제로 이해하기 (Jaccard, distance, similarity)</title>
      <link>https://scribblinganything.tistory.com/805</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZtQtt/btsFLsg5ccO/zNfiboSn4bxFu1qBpgK7aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZtQtt/btsFLsg5ccO/zNfiboSn4bxFu1qBpgK7aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZtQtt/btsFLsg5ccO/zNfiboSn4bxFu1qBpgK7aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZtQtt%2FbtsFLsg5ccO%2FzNfiboSn4bxFu1qBpgK7aK%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;805&quot; height=&quot;505&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;자카드&amp;nbsp;거리/유사도란?&amp;nbsp;(Jaccard,&amp;nbsp;distance,&amp;nbsp;similarity)&lt;/b&gt;&lt;/span&gt;&lt;/h3&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 data-ke-size=&quot;size16&quot;&gt;고차원 공간에서 &quot;가까운 이웃&quot;을 찾는 것은, 예를 들어 인터넷 상의 다양한 상품, 영화, 또는 문서들 중에서 비슷한 것들을 찾아내는 과정을 말합니다. 여기서 &quot;가까운&quot;이라는 개념을 정확히 정의하기 위해 우리는 &quot;거리&quot;라는 개념을 사용합니다. 이 거리는 물리적인 거리가 아니라, 상품, 영화, 문서 등의 속성이 얼마나 유사한지를 수치화한 것입니다.&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;이번에 우리가 살펴볼 거리의 종류는 &quot;자카드 거리&quot;입니다. 자카드 거리는 두 집합 사이의 유사성을 측정하는 방법 중 하나로, 자카드 유사도를 통해 계산됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;자카드&amp;nbsp;유사도&lt;/u&gt;&lt;/span&gt; &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;원소의&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vPkI9/btsFIh2EKFd/eqK4O8YHDo0wkYuoDoK501/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vPkI9/btsFIh2EKFd/eqK4O8YHDo0wkYuoDoK501/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vPkI9/btsFIh2EKFd/eqK4O8YHDo0wkYuoDoK501/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvPkI9%2FbtsFIh2EKFd%2FeqK4O8YHDo0wkYuoDoK501%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;477&quot; height=&quot;55&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;∣&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;cap;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;2∣&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;는 두 집합 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;과 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;가 공유하는 원소의 수, &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;∣&lt;/span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;cup;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;C&lt;/span&gt;&lt;span&gt;2∣&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;는 두 집합의 합집합의 원소 수를 의미합니다. 예를 들어, 두 영화의 장르 집합을 비교할 때, 두 집합이 공유하는 장르의 수를 두 영화가 가진 전체 장르의 수로 나누어 그 비율을 구할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;자카드 거리&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자카드 거리는 자카드 유사도를 바탕으로 두 집합 사이의 거리를 측정합니다. 자카드 유사도가 1에 가까울수록 두 집합은 매우 유사하다고 볼 수 있으며, 0에 가까울수록 두 집합은 서로 다르다고 볼 수 있습니다. 자카드 거리는 다음과 같이 정의됩니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnVbAl/btsFJIFducR/crH9gtzrhjUfDNfp0tjoe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnVbAl/btsFJIFducR/crH9gtzrhjUfDNfp0tjoe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnVbAl/btsFJIFducR/crH9gtzrhjUfDNfp0tjoe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnVbAl%2FbtsFJIFducR%2FcrH9gtzrhjUfDNfp0tjoe1%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;482&quot; height=&quot;56&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 자카드 거리는 1에서 자카드 유사도를 뺀 값입니다. 이 값은 0에서 1 사이의 값을 가지며, 값이 작을수록 두 집합은 서로 더 가까운 것으로 간주됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;자카드 거리 예제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hi627/btsFGLQsQJd/E3Tu4iDS27cSu9vgm0D550/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hi627/btsFGLQsQJd/E3Tu4iDS27cSu9vgm0D550/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hi627/btsFGLQsQJd/E3Tu4iDS27cSu9vgm0D550/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHi627%2FbtsFGLQsQJd%2FE3Tu4iDS27cSu9vgm0D550%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;666&quot; height=&quot;175&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>여러가지공부/머신러닝(Machine Learning)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/805</guid>
      <comments>https://scribblinganything.tistory.com/805#entry805comment</comments>
      <pubDate>Wed, 20 Mar 2024 08:31:14 +0900</pubDate>
    </item>
    <item>
      <title>[LSH]K Shingling(K gram)이란?(Locality Sensitive Hashing#1)</title>
      <link>https://scribblinganything.tistory.com/804</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJRSCl/btsFS1SOYTV/XLwJUecipwKY4UVCyW758k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJRSCl/btsFS1SOYTV/XLwJUecipwKY4UVCyW758k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJRSCl/btsFS1SOYTV/XLwJUecipwKY4UVCyW758k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJRSCl%2FbtsFS1SOYTV%2FXLwJUecipwKY4UVCyW758k%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;805&quot; height=&quot;505&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNcYwI/btsFUlww7Pz/zzqhKAecPjKaJHClqjCoe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNcYwI/btsFUlww7Pz/zzqhKAecPjKaJHClqjCoe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNcYwI/btsFUlww7Pz/zzqhKAecPjKaJHClqjCoe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNcYwI%2FbtsFUlww7Pz%2FzzqhKAecPjKaJHClqjCoe0%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;934&quot; height=&quot;391&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Shingling이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;Shingling&quot;이라는 용어는 문서&lt;b&gt;(Document)&lt;/b&gt; 를 집합(Set)으로 변환하는 과정&lt;/b&gt;을 말합니다. 이 과정은 문서의 내용을 분석하고, 비교하고, &lt;b&gt;유사성&lt;b&gt;(Similarity)&lt;/b&gt;을 측정하는 데 유용한 방법&lt;/b&gt;입니다. 여기서 '&lt;b&gt;집합'이라는 것은 문서 내의 모든 유니크한 요소(예: 단어, 문자열, 토큰 등)의 모임을 의미&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Shingling 과정&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;문서 정의&lt;/b&gt;: 우리가 비교하고 싶은 텍스트 또는 문서가 무엇인지 정의합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;토큰화(Tokenization)&lt;/b&gt;: 문서를 더 작은 단위(토큰)로 나눕니다. 이 토큰들은 문자, 단어, 문장 등이 될 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Shingling&lt;/b&gt;: 이제 토큰화된 문서에서 연속적인 토큰의 시퀀스(쉬잉글)를 생성합니다. 각 쉬잉글은 k개의 연속적인 토큰으로 구성되며, 이 k는 우리가 선택하는 값입니다(예: k=3일 경우 3개의 연속된 토큰으로 이루어진 쉬잉글을 생성합니다).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;집합으로 변환&lt;/b&gt;: 생성된 쉬잉글을 모아서 집합으로 만듭니다. 이 집합은 문서의 '지문'처럼 작용하여 문서의 고유한 내용을 나타냅니다. 중복된 쉬잉글은 제거되므로, 각 문서는 유니크한 쉬잉글의 집합으로 표현됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Shingling의 이점&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유사도(Similarity) 측정&lt;/b&gt;: 두 문서의 쉬잉글 집합을 비교함으로써, 우리는 두 문서가 얼마나 유사한지를 정량적으로 측정할 수 있습니다. 즉, 집합 간의 교집합과 합집합을 사용하여 유사도 점수를 계산할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중복 내용 탐지&lt;/b&gt;: 특히 대용량의 데이터에서 중복되거나 매우 유사한 문서를 식별하는 데 유용합니다. 예를 들어, 인터넷 상의 콘텐츠에서 표절을 탐지하는 데 사용될 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;효율성&lt;/b&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;있습니다.&amp;nbsp;짧은&amp;nbsp;쉬잉글의&amp;nbsp;집합만을&amp;nbsp;비교함으로써&amp;nbsp;계산&amp;nbsp;비용을&amp;nbsp;크게&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;K Shingling 예제 실습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D1 = &quot;abcab&quot; Document에서 k = 2인 Shingles로 Set을 구하면 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; S(D1) = {ab, bc, ca} &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 hash로 Shingles를 간단하게 표현하겠습니다.&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;0 = aa&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 = ab&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2 = ac&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3 = ba&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;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7 = cc&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;위와 같이 hash를 정의하면 아래와 같이 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;S(D1)&lt;/b&gt;&amp;nbsp; &amp;rArr; h(D1) = {1, 5, 7} &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;문서 D2의 h(D2) = {1, 3, 4, 7}이라고 가정하고 D1과 D2의 Similarity를 Jaccard로 구하면 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIHs63/btsFTcmvYu7/gPEHKBl4tfdDM5XL4IyhO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIHs63/btsFTcmvYu7/gPEHKBl4tfdDM5XL4IyhO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIHs63/btsFTcmvYu7/gPEHKBl4tfdDM5XL4IyhO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIHs63%2FbtsFTcmvYu7%2FgPEHKBl4tfdDM5XL4IyhO0%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;386&quot; height=&quot;210&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;sim(D1, D2) = 2 / 5&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여러가지공부/머신러닝(Machine Learning)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/804</guid>
      <comments>https://scribblinganything.tistory.com/804#entry804comment</comments>
      <pubDate>Tue, 19 Mar 2024 17:35:44 +0900</pubDate>
    </item>
    <item>
      <title>시간 복잡도 O(n^2)이란?(Time Complexity)</title>
      <link>https://scribblinganything.tistory.com/803</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQz97V/btsFIxjKnZ0/wwAWmFeVxvaktxFauiKlh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQz97V/btsFIxjKnZ0/wwAWmFeVxvaktxFauiKlh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQz97V/btsFIxjKnZ0/wwAWmFeVxvaktxFauiKlh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQz97V%2FbtsFIxjKnZ0%2FwwAWmFeVxvaktxFauiKlh0%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;805&quot; height=&quot;505&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;시간&amp;nbsp;복잡도&amp;nbsp;O(n^2)이란?(Time&amp;nbsp;Complexity)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KxYzq/btsFKagZKW5/gIvLdrBWVjPzYJvhDocskK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KxYzq/btsFKagZKW5/gIvLdrBWVjPzYJvhDocskK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KxYzq/btsFKagZKW5/gIvLdrBWVjPzYJvhDocskK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKxYzq%2FbtsFKagZKW5%2FgIvLdrBWVjPzYJvhDocskK%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;620&quot; height=&quot;654&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;O(n^2)이란?&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;O(n&amp;sup2;)는 입력 크기에 따라 알고리즘 실행 시간이 제곱으로 증가한다는 것을 의미&lt;/b&gt;합니다. 예를 들어, &lt;b&gt;입력 크기가 두 배가 되면 실행 시간은 네 배로 증가&lt;/b&gt;합니다. 이런 알고리즘은 큰 입력에 대해 느려질 수 있으며, 더 효율적인 알고리즘에 비해 성능이 떨어질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;u&gt;O(n^2) 계산 방법&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;O(n&amp;sup2;)&amp;nbsp;시간&amp;nbsp;복잡도를&amp;nbsp;nC2와&amp;nbsp;관련하여&amp;nbsp;설명하자면,&amp;nbsp;&lt;b&gt;nC2는&amp;nbsp;n개의&amp;nbsp;항목&amp;nbsp;중에서&amp;nbsp;2개를&amp;nbsp;고르는&amp;nbsp;조합의&amp;nbsp;수&lt;/b&gt;를 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는&amp;nbsp;&lt;b&gt;(n*(n-1))/2로&amp;nbsp;계산&lt;/b&gt;되며,&amp;nbsp;이&amp;nbsp;식에서&amp;nbsp;가장&amp;nbsp;&lt;b&gt;큰&amp;nbsp;영향을&amp;nbsp;미치는&amp;nbsp;항은&amp;nbsp;n&amp;sup2;&lt;/b&gt;입니다. 따라서, nC2의 성장률이 n&amp;sup2;에 비례한다고 볼 수 있습니다. 배열에서 모든 쌍의 요소를 비교하여 중복을 확인하는 알고리즘이 있다면, 이 알고리즘은 nC2번 비교를 수행하게 되므로, 시간 복잡도는 O(n&amp;sup2;)입니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;u&gt;O(n^2) 예제 실습&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를&amp;nbsp;들어,&amp;nbsp;&lt;b&gt;n명의&amp;nbsp;사람들&amp;nbsp;중에서&amp;nbsp;2명을&amp;nbsp;선택하여&amp;nbsp;팀을&amp;nbsp;만드는&amp;nbsp;모든&amp;nbsp;경우의&amp;nbsp;수를&amp;nbsp;찾고&amp;nbsp;싶다고&amp;nbsp;가정&lt;/b&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;팀을&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이러한&amp;nbsp;과정은&amp;nbsp;n*(n-1)/2번&amp;nbsp;반복되므로,&amp;nbsp;이&amp;nbsp;알고리즘의&amp;nbsp;시간&amp;nbsp;복잡도는&amp;nbsp;O(n^2)입니다.&amp;nbsp;이는&amp;nbsp;큰&amp;nbsp;n&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;/p&gt;</description>
      <category>여러가지공부/머신러닝(Machine Learning)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/803</guid>
      <comments>https://scribblinganything.tistory.com/803#entry803comment</comments>
      <pubDate>Fri, 15 Mar 2024 09:16:05 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 로그인, 로그아웃, 이미지 다운로드(Login, Logout, Image, ID, Password)</title>
      <link>https://scribblinganything.tistory.com/802</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VT4fa/btsFJA0BRZy/kvIWHkrGvg7jb8MC1nVtmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VT4fa/btsFJA0BRZy/kvIWHkrGvg7jb8MC1nVtmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VT4fa/btsFJA0BRZy/kvIWHkrGvg7jb8MC1nVtmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVT4fa%2FbtsFJA0BRZy%2FkvIWHkrGvg7jb8MC1nVtmK%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;396&quot; height=&quot;257&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;도커 로그인, 로그아웃(ID, PW)&lt;/b&gt;&lt;/span&gt;&lt;/h3&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 data-ke-size=&quot;size16&quot;&gt;우분투에서&amp;nbsp;도커를&amp;nbsp;사용하기&amp;nbsp;위해&amp;nbsp;로그인하려면,&amp;nbsp;먼저&amp;nbsp;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hub.docker.com/&lt;/a&gt;&amp;nbsp;웹사이트에&amp;nbsp;가입해야&amp;nbsp;합니다.&amp;nbsp;가입&amp;nbsp;후&amp;nbsp;'My&amp;nbsp;Account'(내&amp;nbsp;계정)&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;pre id=&quot;code_1710149268081&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker login
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/

Username: rodgnal
Password:
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;위 와 같이 docker login으로 로그인을 실행하고 username과 password는 앞서 웹사이트에서 설정한 값을 입력 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710149314447&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker logout
Removing login credentials for https://index.docker.io/v1/
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;로그아웃은 위와 같이 docker logout으로 실행합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 이미지 설치하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;도커 이미지란?&lt;/b&gt;&lt;/u&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;도커(Docker) 이미지는 도커 컨테이너를 생성하는 데 사용되는 경량, 독립적, 실행 가능한 소프트웨어 패키지입니다. 이 이미지에는 컨테이너가 실행될 때 필요한 모든 것이 포함되어 있습니다. 즉, 코드, 런타임, 라이브러리, 환경 변수, 구성 파일 등이 포함됩니다. 도커 이미지는 애플리케이션과 그 의존성을 포함하며, 이를 사용하여 도커가 설치된 어떤 시스템에서도 동일하게 애플리케이션을 실행할 수 있습니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;도커 이미지 설치 방법&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;도커 설치: 먼저, 시스템에 도커가 설치되어 있어야 합니다. 도커는 대부분의 리눅스 배포판, macOS, Windows에 설치할 수 있습니다. 공식 도커 웹사이트에서 운영 체제에 맞는 설치 지침을 찾을 수 있습니다.&lt;/li&gt;
&lt;li&gt;도커 이미지 검색: 필요한 도커 이미지를 찾으려면 Docker Hub를 사용할 수 있습니다. Docker Hub는 수많은 공개 도커 이미지를 제공하는 공식 레지스트리입니다. 웹사이트에서 필요한 이미지를 검색하거나 docker search 명령어를 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;도커 이미지 가져오기: 필요한 이미지를 찾았다면 docker pull [이미지 이름] 명령어를 사용하여 이미지를 로컬 시스템으로 가져올 수 있습니다. 예를 들어, Ubuntu 이미지를 가져오려면 docker pull ubuntu 명령어를 사용합니다.&lt;/li&gt;
&lt;li&gt;도커 컨테이너 실행: 이미지를 성공적으로 가져온 후에는 docker run 명령어를 사용하여 컨테이너를 생성하고 실행할 수 있습니다. 예를 들어, 가져온 Ubuntu 이미지를 사용하여 컨테이너를 실행하려면 docker run -it ubuntu 명령어를 사용할 수 있습니다. -it 옵션은 대화형 터미널을 제공합니다.&lt;/li&gt;
&lt;/ul&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 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;사용할&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710149745588&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker search ubuntu --limit=10
NAME                 DESCRIPTION                                     STARS     OFFICIAL
ubuntu               Ubuntu is a Debian-based Linux operating sys&amp;hellip;   16934     [OK]
ubuntu-debootstrap   DEPRECATED; use &quot;ubuntu&quot; instead                52        [OK]
open-liberty         Open Liberty multi-architecture images based&amp;hellip;   64        [OK]
websphere-liberty    WebSphere Liberty multi-architecture images &amp;hellip;   298       [OK]
neurodebian          NeuroDebian provides neuroscience research s&amp;hellip;   106       [OK]
ubuntu-upstart       DEPRECATED, as is Upstart (find other proces&amp;hellip;   115       [OK]
ubuntu/nginx         Nginx, a high-performance reverse proxy &amp;amp; we&amp;hellip;   112
ubuntu/squid         Squid is a caching proxy for the Web. Long-t&amp;hellip;   86
ubuntu/cortex        Cortex provides storage for Prometheus. Long&amp;hellip;   4
ubuntu/prometheus    Prometheus is a systems and service monitori&amp;hellip;   58&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 search로 검색을 하였습니다. Official은 개인이 아닌 정식업체에서 만든 이미지 입니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710149911175&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
bccd10f490ab: Pull complete
Digest: sha256:77906da86b60585ce12215807090eb327e7386c8fafb5402369e421f44eff17e
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 pull 명령을 통해 이미지를 다운로드 받습니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710149973975&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        latest    ca2b0f26964c   12 days ago     77.9MB
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;images 명령으로 설치된 도커 이미지를 확인할 수 있습니다.&amp;nbsp;&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 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>웹관련프로그래밍(web programming)/Docker(도커)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/802</guid>
      <comments>https://scribblinganything.tistory.com/802#entry802comment</comments>
      <pubDate>Wed, 13 Mar 2024 08:43:19 +0900</pubDate>
    </item>
    <item>
      <title>[Ubuntu] usermod, groupadd 그룹 만들기 및 권한 허용 변경 예제 실습</title>
      <link>https://scribblinganything.tistory.com/801</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmyiQB/btsFvY2LrQ3/nIEQSOv2LwpU433QMAfdK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmyiQB/btsFvY2LrQ3/nIEQSOv2LwpU433QMAfdK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmyiQB/btsFvY2LrQ3/nIEQSOv2LwpU433QMAfdK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmyiQB%2FbtsFvY2LrQ3%2FnIEQSOv2LwpU433QMAfdK0%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;657&quot; height=&quot;355&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;usermod,&amp;nbsp;groupadd&amp;nbsp;그룹&amp;nbsp;만들기&amp;nbsp;및&amp;nbsp;권한&amp;nbsp;허용&amp;nbsp;변경&amp;nbsp;예제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu에서 &lt;b&gt;usermod 명령어는 기존 사용자의 설정을 변경&lt;/b&gt;할 때 사용됩니다. 이 명령어는 다양한 옵션을 포함할 수 있으며, 사용자를 그룹에 추가하는 것과 같은 여러 작업을 수행할 수 있습니다. 여기에는 몇 가지 주요 usermod 옵션과 사용자를 그룹에 추가하는 예제, 그리고&lt;b&gt; id -nG 명령어를 사용하여 사용자가 속한 그룹을 확인하는 방법&lt;/b&gt;을 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;usermod 명령어의 주요 옵션&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-a, --append: 사용자를 추가할 그룹에 추가할 때 기존의 그룹 멤버십을 유지하면서 추가합니다. 주로 -G 옵션과 함께 사용됩니다.&lt;/li&gt;
&lt;li&gt;-G,&amp;nbsp;--groups:&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;-l, --login: 사용자의 로그인 이름을 변경합니다.&lt;/li&gt;
&lt;li&gt;-d, --home: 사용자의 홈 디렉토리를 변경합니다.&lt;/li&gt;
&lt;li&gt;-s, --shell: 사용자의 로그인 쉘을 변경합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자를 그룹에 추가하는 예제&lt;/p&gt;
&lt;pre id=&quot;code_1709623512937&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo groupadd newgroup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 그룹 생성: 먼저, groupadd 명령어를 사용하여 새로운 그룹을 생성합니다. 예를 들어, newgroup이라는 이름의 그룹을 만들려면 다음과 같이 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자를 새 그룹에 추가: 사용자를 newgroup 그룹에 추가하려면 -a (append) 옵션과 -G (groups) 옵션을 함께 사용합니다. 예를 들어, username 사용자를 newgroup에 추가하려면 다음 명령어를 실행합니다.&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;pre id=&quot;code_1709623549855&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo usermod -a -G newgroup username&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 username 사용자를 newgroup 그룹에 추가하면서 기존의 그룹 멤버십(권한)을 유지합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709623582558&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo usermod -a -G newgroup {USER}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{USER}은 whoami로 확인한 현재 사용자를 추가하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;id -nG를 사용하여 사용자 그룹 확인하기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가&amp;nbsp;속한&amp;nbsp;그룹을&amp;nbsp;확인하려면&amp;nbsp;id&amp;nbsp;-nG&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;username&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;pre id=&quot;code_1709623645948&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;id -nG username&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 명령어는 username 사용자가 속한 모든 그룹의 이름을 출력합니다, 여기에는 위 예제에서 추가한 newgroup도 포함될 것입니다.&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;단계를&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/801</guid>
      <comments>https://scribblinganything.tistory.com/801#entry801comment</comments>
      <pubDate>Tue, 12 Mar 2024 08:37:34 +0900</pubDate>
    </item>
    <item>
      <title>[전기자전거 리뷰] 오토바이 같은 디자인의 전기 자전거 Deepower Fatire(X20)</title>
      <link>https://scribblinganything.tistory.com/800</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dup7oR/btsFFJ6aHdf/8WKwNzEA7EAfkXNcfEE8m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dup7oR/btsFFJ6aHdf/8WKwNzEA7EAfkXNcfEE8m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dup7oR/btsFFJ6aHdf/8WKwNzEA7EAfkXNcfEE8m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdup7oR%2FbtsFFJ6aHdf%2F8WKwNzEA7EAfkXNcfEE8m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;400&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;전기 자전거 Deepower Fatire 리뷰&lt;/b&gt;&lt;/span&gt;&lt;/h3&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 data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;가격부터 말하자면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;딥파워(Deepower)의 전기자전거는 원래 가격이 340만원이지만, 38% 할인을 통해 약 209만원에 판매&lt;/b&gt;&lt;/span&gt;되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥파워 자전거는 2000W 48V 25Ah의 고용량 리튬이온 배터리를 사용하며, 특히 산악용이나 거친 도로에 적합하게 설계된 20인치 팻타이어를 장착하고 있습니다. 독일 제조 제품으로, 품질을 신뢰할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mIrKy/btsFJAfggqh/CIllIWs3eEN9kL22DQVYP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mIrKy/btsFJAfggqh/CIllIWs3eEN9kL22DQVYP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mIrKy/btsFJAfggqh/CIllIWs3eEN9kL22DQVYP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmIrKy%2FbtsFJAfggqh%2FCIllIWs3eEN9kL22DQVYP0%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;553&quot; height=&quot;626&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이즈는 105 x 163 cm 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXBX8K/btsFGMnrWdY/nyVGR1pYtsjplQMpQ3d4nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXBX8K/btsFGMnrWdY/nyVGR1pYtsjplQMpQ3d4nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXBX8K/btsFGMnrWdY/nyVGR1pYtsjplQMpQ3d4nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXBX8K%2FbtsFGMnrWdY%2FnyVGR1pYtsjplQMpQ3d4nk%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;627&quot; height=&quot;506&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bINncK/btsFI5047kA/AK6gbtmoVUijgC5YIM6u31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bINncK/btsFI5047kA/AK6gbtmoVUijgC5YIM6u31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bINncK/btsFI5047kA/AK6gbtmoVUijgC5YIM6u31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbINncK%2FbtsFI5047kA%2FAK6gbtmoVUijgC5YIM6u31%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;586&quot; height=&quot;451&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;이 자전거는 7단 변속이 가능하며, 주행 속도는 5단계로 조절할 수 있습니다.&amp;nbsp;&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;설치된&amp;nbsp;LED&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;두&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MqMlu/btsFGDj9PBI/2lCEaGnG1ASGjDLLcA7fVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MqMlu/btsFGDj9PBI/2lCEaGnG1ASGjDLLcA7fVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MqMlu/btsFGDj9PBI/2lCEaGnG1ASGjDLLcA7fVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMqMlu%2FbtsFGDj9PBI%2F2lCEaGnG1ASGjDLLcA7fVK%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;544&quot; height=&quot;576&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;또한, 자전거에 부착된 LCD 스크린을 통해 배터리 잔량, 주행 거리, 현재 속도, 총 주행 거리 등의 정보를 확인할 수 있습니다.&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 data-ke-size=&quot;size16&quot;&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;전기 자전거 Deepower Fatire 상세 스펙&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전기자전거 스펙 요약: X20 모델&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모터 및 배터리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2000W 브러시리스 모터&lt;/li&gt;
&lt;li&gt;48V, 25Ah 분리 가능한 리튬 배터리&lt;/li&gt;
&lt;li&gt;중앙 프레임에 숨겨진 탈착 가능 배터리, 열쇠로 잠글 수 있음&lt;/li&gt;
&lt;li&gt;충전 시간: 약 6-8시간&lt;/li&gt;
&lt;li&gt;충전 사이클: 2000회 이상&lt;/li&gt;
&lt;li&gt;추천 키: 최소 5'6&quot;(약 168cm)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고성능 구성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시마노 7단 기어 모터&lt;/li&gt;
&lt;li&gt;5가지 속도 모드 제공&lt;/li&gt;
&lt;li&gt;최대 31-35마일(약 50-56km) 주행 가능&lt;/li&gt;
&lt;li&gt;속도, 배터리, 주행 거리 등을 보여주는 LCD 디스플레이&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작동 모드&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보조 모드: 페달을 밟을 때 모터가 적당한 힘을 제공. 최대 70-90km 주행 가능&lt;/li&gt;
&lt;li&gt;전기 모드: 스로틀 조작으로 모터 구동. 최대 50-55km 주행 가능&lt;/li&gt;
&lt;li&gt;수동 모드: 일반 자전거처럼 페달 밟기&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조립 및 품질&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;95% 조립 완료, 쉬운 나머지 조립&lt;/li&gt;
&lt;li&gt;알루미늄 합금 프레임, 알루미늄 서스펜션 포크, 전/후방 오일 디스크 브레이크&lt;/li&gt;
&lt;li&gt;전조등, 테일 라이트(주행/브레이크 라이트 포함)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스펙 상세&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프레임: 20인치 알루미늄 합금&lt;/li&gt;
&lt;li&gt;전면 포크: 유압식 쇼크 업소버&lt;/li&gt;
&lt;li&gt;배터리 유형: 18650 리튬 배터리&lt;/li&gt;
&lt;li&gt;변속기: 시마노 7단&lt;/li&gt;
&lt;li&gt;브레이크 시스템: 전/후방 오일 디스크 브레이크&lt;/li&gt;
&lt;li&gt;타이어: 20&quot;*4.00&lt;/li&gt;
&lt;li&gt;최대 부하: 200kg&lt;/li&gt;
&lt;li&gt;최대 속도: 55km/h&lt;/li&gt;
&lt;li&gt;순중량: 37kg, 총중량: 41kg&lt;/li&gt;
&lt;li&gt;차지: 3A 충전기&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;전기 자전거 Deepower Fatire 쿠팡 구매 링크&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 얘기한것과 같이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;현재 38% 할인된 가격(341만원 &amp;gt;&amp;gt; 209만원)&lt;/b&gt;&lt;/span&gt;으로 판매중에 있습니다. 현재 6대 남았다고 표시 뜹니다. 관심 있으시면 아래 링크 통해 구경하시면 됩니다~! :)&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/btK9df&quot;&gt;https://link.coupang.com/a/btK9df&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710152148075&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;DEEPOWER 최신형 2000W 48V 25Ah 전기자전거 MTB 산악 자전거 20인치 팻바이크 7단 변속&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/btK9df&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6502717044&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QHaGu/hyVxo5hnku/UlBLpLhw5J0brhgsMWjQH1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/btK9df&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/btK9df&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QHaGu/hyVxo5hnku/UlBLpLhw5J0brhgsMWjQH1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;DEEPOWER 최신형 2000W 48V 25Ah 전기자전거 MTB 산악 자전거 20인치 팻바이크 7단 변속&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3c3d3f; text-align: left;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/800</guid>
      <comments>https://scribblinganything.tistory.com/800#entry800comment</comments>
      <pubDate>Mon, 11 Mar 2024 19:17:23 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 Compose와 Container란? 설치 방법(ubuntu)</title>
      <link>https://scribblinganything.tistory.com/799</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJL3f/btsFvYochdJ/EbbLSGKLTON3jqos2efpmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJL3f/btsFvYochdJ/EbbLSGKLTON3jqos2efpmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJL3f/btsFvYochdJ/EbbLSGKLTON3jqos2efpmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJL3f%2FbtsFvYochdJ%2FEbbLSGKLTON3jqos2efpmk%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;396&quot; height=&quot;257&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;도커 Container란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5PNcX/btsFuKwS51T/nAJjn7jQYwfm9byZ2DngB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5PNcX/btsFuKwS51T/nAJjn7jQYwfm9byZ2DngB0/img.png&quot; data-alt=&quot;https://www.docker.com/resources/what-container/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5PNcX/btsFuKwS51T/nAJjn7jQYwfm9byZ2DngB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5PNcX%2FbtsFuKwS51T%2FnAJjn7jQYwfm9byZ2DngB0%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;449&quot; height=&quot;373&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;373&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.docker.com/resources/what-container/&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;컨테이너는 코드와 모든 종속성을 패키징하여, 애플리케이션이 다양한 컴퓨팅 환경에서도 빠르고 신뢰성 있게 실행될 수 있게 만드는 &lt;b&gt;표준 소프트웨어 단위&lt;/b&gt;입니다. Docker 컨테이너 이미지는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정)을 포함하는 &lt;b&gt;가벼우면서 독립적인, 실행 가능한 소프트웨어 패키지&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이미지는 런타임에 컨테이너가 되며, &lt;b&gt;Docker 컨테이너의 경우 Docker Engine에서 실행될 때 컨테이너가 됩니다. 리눅스 및 윈도우 기반 애플리케이션 모두에 사용할 수 있는 컨테이너화된 소프트웨어는 인프라에 상관없이 항상 동일하게 실행&lt;/b&gt;됩니다. &lt;b&gt;컨테이너는 소프트웨어를 그 환경으로부터 격리시켜, 예를 들어 개발과 스테이징 환경 사이의 차이에도 불구하고 일관되게 작동하도록 보장&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Engine에서 실행되는 Docker 컨테이너는 다음과 같은 특징을 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;표준화: Docker는 컨테이너에 대한 업계 표준을 만들어, 어디서나 포터블하게 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;경량화: 컨테이너는 기계의 OS 시스템 커널을 공유하므로, 애플리케이션 당 OS가 필요하지 않게 됩니다. 이는 서버 효율성을 높이고 서버 및 라이선스 비용을 줄입니다.&lt;/li&gt;
&lt;li&gt;보안: 애플리케이션은 컨테이너 안에서 더 안전하며, Docker는 업계에서 가장 강력한 기본 격리 기능을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 컨테이너는 애플리케이션을 더 휴대성 있고, 경량화하며, 보안적으로 실행할 수 있게 해주는 기술입니다. 이를 통해 다양한 환경에서도 일관된 방식으로 소프트웨어를 실행할 수 있습니다. &lt;br /&gt;&lt;br /&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;도커 Compose란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구&lt;/b&gt;입니다. 개발과 배포 과정을 간소화하고 효율적으로 만들어주는 열쇠와 같은 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 말해서, &lt;b&gt;Compose는 당신의 애플리케이션을 구성하는 모든 부분(서비스, 네트워크, 볼륨 등)을 하나의 YAML 파일에 명시하게 해주어, 관리를 용이&lt;/b&gt;하게 해줍니다. 그리고 단 한 번의 명령으로 이 파일에 정의된 모든 서비스를 생성하고 시작할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Compose는 생산, 스테이징, 개발, 테스트 환경 및 CI 워크플로우 등 모든 환경에서 작동합니다. 또한, 애플리케이션의 전체 생명 주기를 관리하는 명령어들을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스 시작, 정지, 재구축&lt;/li&gt;
&lt;li&gt;실행 중인 서비스의 상태 보기&lt;/li&gt;
&lt;li&gt;실행 중인 서비스의 로그 출력 스트리밍&lt;/li&gt;
&lt;li&gt;서비스에서 일회성 명령 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Compose는 애플리케이션의 모든 구성 요소를 쉽게 관리할 수 있게 해주어, 복잡한 작업을 단순화시켜 줍니다.&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;도커 Compose 설치 방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 설치 방법은 링크를 참조하시면 됩니다.(&lt;a href=&quot;https://docs.docker.com/compose/install/standalone/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.docker.com/compose/install/standalone/&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 아래와 같이 서버에서 설치 파일을 가져와서 설치 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709624549183&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo curl -SL https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 정상 설치됨을 알 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709625610213&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:/usr/local/bin$ ls
docker-compose&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;2. 파일에 실행 권한(x)을 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709625374349&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/docker-compose&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;3. 실행이 되는지 확인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709624571551&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709625686287&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:/usr/local/bin$ docker-compose

Usage:  docker compose [OPTIONS] COMMAND

Define and run multi-container applications with Docker

Options:
      --ansi string                Control when to print ANSI control characters
                                   (&quot;never&quot;|&quot;always&quot;|&quot;auto&quot;) (default &quot;auto&quot;)
      --compatibility              Run compose in backward compatibility mode
      --dry-run                    Execute command in dry run mode
      --env-file stringArray       Specify an alternate environment file
  -f, --file stringArray           Compose configuration files
      --parallel int               Control max parallelism, -1 for unlimited (default -1)
      --profile stringArray        Specify a profile to enable
      --progress string            Set type of progress output (auto, tty, plain, quiet)
                                   (default &quot;auto&quot;)
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the, first specified, Compose file)
  -p, --project-name string        Project name

Commands:
  attach      Attach local standard input, output, and error streams to a service's running container
  build       Build or rebuild services
  config      Parse, resolve and render compose file in canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service
  down        Stop and remove containers, networks
  events      Receive real time events from containers
  exec        Execute a command in a running container
  images      List images used by the created containers
  kill        Force stop service containers
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart service containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service
  scale       Scale services
  start       Start services
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information
  wait        Block until the first service container stops
  watch       Watch build context for service and rebuild/refresh containers when files are updated&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/Docker(도커)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/799</guid>
      <comments>https://scribblinganything.tistory.com/799#entry799comment</comments>
      <pubDate>Mon, 11 Mar 2024 18:18:59 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 프로그램 패키지 업데이트와 업그레이드 차이점 및 프로그램 설치 삭제 방법(ubuntu, apt get update, upgrade, install, remove, purge)</title>
      <link>https://scribblinganything.tistory.com/798</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctuqfQ/btsFydrIaW4/UbtMs7QIk7jqtOnnvP94x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctuqfQ/btsFydrIaW4/UbtMs7QIk7jqtOnnvP94x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctuqfQ/btsFydrIaW4/UbtMs7QIk7jqtOnnvP94x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctuqfQ%2FbtsFydrIaW4%2FUbtMs7QIk7jqtOnnvP94x0%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;657&quot; height=&quot;355&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;우분투&amp;nbsp;프로그램&amp;nbsp;패키지&amp;nbsp;업데이트와&amp;nbsp;업그레이드&amp;nbsp;차이점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-get update와 apt-get upgrade는 Ubuntu와 같은 Debian 기반 시스템에서 패키지 관리를 위해 사용되는 명령어입니다. 이 두 명령어는 패키지 관리 과정에서 서로 다른 역할을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;apt-get update&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 &lt;b&gt;시스템의 패키지 목록을 업데이트&lt;/b&gt;합니다. 구체적으로는, 설정된 소스(소프트웨어 저장소)에서 사용 가능한 패키지와 그 버전 정보를 최신 상태로 갱신합니다. 이 과정에서 &lt;b&gt;실제로 소프트웨어를 업데이트하거나 설치하지는 않지만, upgrade나 dist-upgrade 명령어를 통해 실제 업데이트를 진행하기 전에 수행해야 하는 필수 단계&lt;/b&gt;입니다. apt-get update를 실행하면, 이후에 설치 또는 업그레이드할 소프트웨어의 최신 버전 정보를 얻을 수 있습니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;apt-get upgrade&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 시스템에 이미 &lt;b&gt;설치된 패키지들을 최신 버전으로 업그레이드&lt;/b&gt;합니다. apt-get update를 통해 업데이트된 패키지 목록을 바탕으로, 설치된 패키지 중에서 새로운 버전이 있을 경우 그것으로 업데이트합니다. 단, 설치된 패키지의 업그레이드가 다른 패키지의 삭제나 새로운 패키지의 설치를 요구하는 경우, upgrade 명령어는 그런 패키지들을 업그레이드하지 않습니다. 이러한 경우, dist-upgrade 명령어를 사용할 수 있습니다.&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 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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;프로그램&amp;nbsp;설치&amp;nbsp;삭제&amp;nbsp;방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709619755014&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-get install 패키지명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 리눅스 시스템에 새로운 소프트웨어 패키지를 설치할 때 사용됩니다. 사용자는 특정 패키지명을 명령어 뒤에 붙여서 해당 패키지와 그 의존성을 만족시키는 다른 패키지들을 함께 설치할 수 있습니다. 의존성이란 해당 소프트웨어가 정상적으로 작동하기 위해 필요한 다른 소프트웨어나 라이브러리를 말합니다.&lt;/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;예시: apt-get install nginx 명령어는 nginx 웹 서버를 시스템에 설치합니다.&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;pre id=&quot;code_1709619774866&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-get --purge remove 패키지명&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어는 시스템에서 이미 &lt;b&gt;설치된 소프트웨어 패키지를 제거할 때 사용&lt;/b&gt;됩니다. &lt;b&gt;--purge 옵션&lt;/b&gt;은 단순히 패키지를 제거하는 것 뿐만 아니라, 패키지 설치 시 생성된 &lt;b&gt;설정 파일들까지 모두 삭제하고자 할 때 사용&lt;/b&gt;합니다. 이는 패키지를 완전히 제거하고, 남아 있는 설정 파일로 인해 발생할 수 있는 문제를 예방하고자 할 때 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시: apt-get --purge remove nginx 명령어는 nginx 웹 서버와 관련된 설정 파일들까지 모두 제거합니다.&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;말해서,&amp;nbsp;apt-get&amp;nbsp;install은&amp;nbsp;새로운&amp;nbsp;패키지를&amp;nbsp;설치하는&amp;nbsp;명령어이며,&amp;nbsp;apt-get&amp;nbsp;--purge&amp;nbsp;remove는&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/798</guid>
      <comments>https://scribblinganything.tistory.com/798#entry798comment</comments>
      <pubDate>Wed, 6 Mar 2024 08:44:25 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 프로세스 검색 및 종료 방법 예제로 익히기(ps, grep, kill, 우분투, ubuntu)</title>
      <link>https://scribblinganything.tistory.com/797</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tneQk/btsFlTgqJyq/qF9dznDf0aIv6wkA2uoSMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tneQk/btsFlTgqJyq/qF9dznDf0aIv6wkA2uoSMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tneQk/btsFlTgqJyq/qF9dznDf0aIv6wkA2uoSMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtneQk%2FbtsFlTgqJyq%2FqF9dznDf0aIv6wkA2uoSMk%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;657&quot; height=&quot;355&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;프로세스&amp;nbsp;검색&amp;nbsp;및&amp;nbsp;종료&amp;nbsp;방법&amp;nbsp;예제로&amp;nbsp;익히기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 프로세스를 검색하고 특정 프로세스를 종료하는 것은 시스템 관리의 일반적인 작업 중 하나입니다. 여기서는 ps, grep, 그리고 kill 명령어를 사용하여 특정 프로세스를 찾고 종료하는 방법을 설명하겠습니다. 이 과정을 단일 명령어 라인으로 수행할 수 있으며, 이는 자동화 스크립트를 작성할 때 매우 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로세스 검색하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps 명령어는 현재 실행 중인 프로세스 목록을 보여줍니다. grep 명령어는 텍스트 검색을 수행하므로, 이 두 명령어를 결합하여 특정 프로세스를 찾을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709115083890&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  1.1 169408 11264 ?        Ss   Feb26   0:09 /sbin/init
root           2  0.0  0.0      0     0 ?        S    Feb26   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [slub_flushwq
root           6  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [netns]
root           7  0.0  0.0      0     0 ?        I    Feb26   0:00 [kworker/0:0-
root           8  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kworker/0:0H
root          10  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [mm_percpu_wq
root          11  0.0  0.0      0     0 ?        S    Feb26   0:00 [rcu_tasks_ru
root          12  0.0  0.0      0     0 ?        S    Feb26   0:00 [rcu_tasks_tr
root          13  0.0  0.0      0     0 ?        S    Feb26   0:00 [ksoftirqd/0]
root          14  0.0  0.0      0     0 ?        I    Feb26   0:00 [rcu_sched]
root          15  0.0  0.0      0     0 ?        S    Feb26   0:01 [migration/0]
root          16  0.0  0.0      0     0 ?        S    Feb26   0:00 [idle_inject/
root          18  0.0  0.0      0     0 ?        S    Feb26   0:00 [cpuhp/0]
root          19  0.0  0.0      0     0 ?        S    Feb26   0:00 [kdevtmpfs]
root          20  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [inet_frag_wq
root          21  0.0  0.0      0     0 ?        S    Feb26   0:00 [kauditd]
root          22  0.0  0.0      0     0 ?        S    Feb26   0:00 [khungtaskd]
root          23  0.0  0.0      0     0 ?        S    Feb26   0:00 [oom_reaper]
root          24  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [writeback]
root          25  0.0  0.0      0     0 ?        S    Feb26   0:05 [kcompactd0]
root          26  0.0  0.0      0     0 ?        SN   Feb26   0:00 [ksmd]
root          27  0.0  0.0      0     0 ?        SN   Feb26   0:00 [khugepaged]
root          73  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kintegrityd]
root          74  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kblockd]
root          75  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [blkcg_punt_b
root          76  0.0  0.0      0     0 ?        S    Feb26   0:00 [xen-balloon]
root          77  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [tpm_dev_wq]
root          78  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [ata_sff]
root          79  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [md]
root          80  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [edac-poller]
root          81  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [devfreq_wq]
root          82  0.0  0.0      0     0 ?        S    Feb26   0:00 [watchdogd]
root          86  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kworker/0:1H
root          88  0.0  0.0      0     0 ?        S    Feb26   0:00 [kswapd0]
root          89  0.0  0.0      0     0 ?        S    Feb26   0:00 [ecryptfs-kth
root          91  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kthrotld]
root          92  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [acpi_thermal
root          93  0.0  0.0      0     0 ?        S    Feb26   0:00 [xenbus]
root          94  0.0  0.0      0     0 ?        S    Feb26   0:00 [xenwatch]
root          95  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [nvme-wq]
root          96  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [nvme-reset-w
root          97  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [nvme-delete-
root          98  0.0  0.0      0     0 ?        S    Feb26   0:00 [scsi_eh_0]
root          99  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [scsi_tmf_0]
root         100  0.0  0.0      0     0 ?        S    Feb26   0:00 [scsi_eh_1]
root         101  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [scsi_tmf_1]
root         103  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [vfio-irqfd-c
root         104  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [mld]
root         105  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [ipv6_addrcon
root         114  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kstrp]
root         117  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [zswap-shrink
root         118  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kworker/u31:
root         123  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [charger_mana
root         124  0.0  0.0      0     0 ?        S    Feb26   0:00 [jbd2/xvda1-8
root         125  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [ext4-rsv-con
root         163  0.0  1.5  54000 14824 ?        S&amp;lt;s  Feb26   0:01 /lib/systemd/
root         199  0.0  0.4   9684  4724 ?        Ss   Feb26   0:00 /lib/systemd/
root         210  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [cryptd]
root         282  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kaluad]
root         283  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kmpath_rdacd
root         284  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kmpathd]
root         285  0.0  0.0      0     0 ?        I&amp;lt;   Feb26   0:00 [kmpath_handl
root         286  0.0  1.8 280208 18004 ?        SLsl Feb26   0:12 /sbin/multipa
systemd+     317  0.0  0.4  90668  4712 ?        Ssl  Feb26   0:00 /lib/systemd/
systemd+     389  0.0  0.5  27280  5380 ?        Ss   Feb26   0:00 /lib/systemd/
systemd+     393  0.0  1.0  24692 10556 ?        Ss   Feb26   0:00 /lib/systemd/
root         492  0.0  0.7 241060  7672 ?        Ssl  Feb26   0:03 /usr/lib/acco
root         493  0.0  0.0   2548   780 ?        Ss   Feb26   0:00 /usr/sbin/acp
root         500  0.0  0.2   8548  2596 ?        Ss   Feb26   0:00 /usr/sbin/cro
message+     501  0.0  0.4   7684  4548 ?        Ss   Feb26   0:00 /usr/bin/dbus
root         511  0.0  1.3  29628 13460 ?        Ss   Feb26   0:00 /usr/bin/pyth
root         514  0.0  0.7 236448  7624 ?        Ssl  Feb26   0:00 /usr/lib/poli
syslog       528  0.0  0.4 224500  4408 ?        Ssl  Feb26   0:00 /usr/sbin/rsy
root         540  0.0  0.6  17452  6528 ?        Ss   Feb26   0:00 /lib/systemd/
root         541  0.0  0.9 395460  9676 ?        Ssl  Feb26   0:00 /usr/lib/udis
daemon       548  0.0  0.2   3804  2096 ?        Ss   Feb26   0:00 /usr/sbin/atd
root         569  0.0  0.0      0     0 ?        I    Feb26   0:10 [kworker/0:3-
root         679  0.0  0.9 318788  8812 ?        Ssl  Feb26   0:00 /usr/sbin/Mod
root         681  0.0  1.6 108132 15796 ?        Ssl  Feb26   0:00 /usr/bin/pyth
root        1145  0.0  1.2 1241300 12040 ?       Ssl  Feb26   0:04 /snap/amazon-
root        1192  0.0  0.1   7360  1724 ttyS0    Ss+  Feb26   0:00 /sbin/agetty
root        1194  0.0  0.1   5836  1572 tty1     Ss+  Feb26   0:00 /sbin/agetty
root        1639  0.0  2.1 1319540 21460 ?       Ssl  Feb26   0:08 /usr/lib/snap
root       21316  0.0  0.5  12192  5236 ?        Ss   Feb27   0:00 sshd: /usr/sb
root       28895  0.0  0.0      0     0 ?        I&amp;lt;   Feb27   0:00 [xfsalloc]
root       28896  0.0  0.0      0     0 ?        I&amp;lt;   Feb27   0:00 [xfs_mru_cach
root       37517  0.0  0.0      0     0 ?        I    08:39   0:00 [kworker/u30:
root       37534  0.0  0.9  13816  8912 ?        Ss   09:41   0:00 sshd: ubuntu
ubuntu     37537  0.0  0.9  18936  9488 ?        Ss   09:41   0:00 /lib/systemd/
root       37538  0.0  0.0      0     0 ?        I    09:41   0:00 [kworker/u30:
ubuntu     37539  0.0  0.4 170624  4564 ?        S    09:41   0:00 (sd-pam)
ubuntu     37639  0.0  0.5  13952  5424 ?        S    09:41   0:00 sshd: ubuntu@
ubuntu     37640  0.0  0.5  10040  5068 pts/0    Ss   09:41   0:00 -bash
ubuntu     37668  0.0  0.3  10620  3304 pts/0    R+   10:10   0:00 ps aux
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;예를&amp;nbsp;들어,&amp;nbsp;myapp라는&amp;nbsp;이름의&amp;nbsp;프로세스를&amp;nbsp;찾으려면&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;입력합니다&lt;/p&gt;
&lt;pre id=&quot;code_1709114882152&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ ps aux | grep myapp
ubuntu     37665  0.0  0.0   8168   724 pts/0    S+   10:07   0:00 grep --color=auto myapp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ps aux는 모든 사용자의 모든 프로세스에 대한 상세 정보를 출력합니다.&lt;/li&gt;
&lt;li&gt;grep myapp는 출력된 목록에서 myapp을 포함하는 라인만 필터링합니다.&lt;/li&gt;
&lt;/ul&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 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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특정 프로세스 종료하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스를 찾은 후에는 kill 명령어를 사용하여 종료할 수 있습니다. kill 명령어는 프로세스 ID(PID)를 사용하여 특정 프로세스를 종료합니다.&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;예를 들어, myapp 프로세스의 PID가 1234라면, 다음과 같이 입력하여 종료합니다&lt;/p&gt;
&lt;pre id=&quot;code_1709115007928&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kill -9 1234&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 -9를 옵션으로 넣어서 강제로 종료를 하게 합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;한 줄로 찾아서 종료하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ps,&amp;nbsp;grep,&amp;nbsp;그리고&amp;nbsp;kill&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;/p&gt;
&lt;pre id=&quot;code_1709115149132&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kill $(ps aux | grep '[m]yapp' | awk '{print $2}')&lt;/code&gt;&lt;/pre&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ps aux | grep '[m]yapp'는 myapp 프로세스를 찾습니다. grep에서 [m]yapp을 사용하는 것은 grep 프로세스 자체가 결과에 나타나지 않도록 하는 트릭입니다.&lt;/li&gt;
&lt;li&gt;awk '{print $2}'는 찾은 라인에서 두 번째 필드(PID)만 추출합니다.&lt;/li&gt;
&lt;li&gt;$(...)는 명령어 치환을 사용하여 kill 명령어에 PID를 넘깁니다.&lt;/li&gt;
&lt;/ul&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 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;프로세스가&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/797</guid>
      <comments>https://scribblinganything.tistory.com/797#entry797comment</comments>
      <pubDate>Tue, 5 Mar 2024 09:19:56 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 리다이렉션과 파이프(검색, 쓰기, grep, &amp;lt;&amp;lt;, &amp;gt;&amp;gt;, 방향키, Redirection, Pipe)</title>
      <link>https://scribblinganything.tistory.com/796</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kz9RK/btsFjJL4Xl8/iVdGkAQHLDnMU3vIDEA7j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kz9RK/btsFjJL4Xl8/iVdGkAQHLDnMU3vIDEA7j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kz9RK/btsFjJL4Xl8/iVdGkAQHLDnMU3vIDEA7j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKz9RK%2FbtsFjJL4Xl8%2FiVdGkAQHLDnMU3vIDEA7j1%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;657&quot; height=&quot;355&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;리다이렉션과&amp;nbsp;파이프&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;리눅스에서는 프로그램이 실행될 때 세 가지 주요 통신 경로, 즉 &quot;표준 스트림&quot;을 사용하여 데이터를 주고받습니다. 이 세 가지 스트림은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;표준 입력 스트림(stdin)&lt;/b&gt;: 프로그램에 데이터를 입력하기 위한 경로입니다. 예를 들어, 키보드 입력이 여기에 해당됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표준 출력 스트림(stdout)&lt;/b&gt;: 프로그램에서 처리한 결과를 출력하기 위한 경로입니다. 예를 들어, 터미널이나 콘솔 창에 나타나는 텍스트가 여기에 해당됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오류 출력 스트림(stderr)&lt;/b&gt;: 프로그램 실행 중 발생한 오류 메시지를 출력하기 위한 경로입니다. 이 스트림을 통해 오류 메시지는 표준 출력과 구분되어 표시됩니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;리다이렉션(Redirection)&lt;/u&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; : 표준 출력을 파일로 리다이렉션합니다. 만약 파일이 이미 존재하면, 파일의 내용을 덮어씁니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709113927561&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls &amp;gt; files.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 디렉토리의 목록을 files.txt 파일에 저장합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt;: 표준 출력을 파일로 리다이렉션하지만, 파일의 끝에 추가합니다. 파일이 존재하지 않으면 새로 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709113944916&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;새로운 내용&quot; &amp;gt;&amp;gt; files.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;새로운 내용&quot;을 files.txt 파일의 끝에 추가합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;lt;: 파일의 내용을 명령어의 표준 입력으로 리다이렉션합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709113965174&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sort &amp;lt; files.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;files.txt 파일의 내용을 정렬 명령어로 전달합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;파이프(Pipe)&lt;/u&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;현재 디렉토리의 파일 목록 중에서 &quot;txt&quot;를 포함하는 파일만을 검색하여 표시합니다. 여기서 ls 명령의 출력이 grep &quot;txt&quot; 명령의 입력으로 전달됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1709114002097&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls | grep &quot;txt&quot;&lt;/code&gt;&lt;/pre&gt;
&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;방식을&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;있게&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/796</guid>
      <comments>https://scribblinganything.tistory.com/796#entry796comment</comments>
      <pubDate>Mon, 4 Mar 2024 07:59:48 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] Chmod 권한 변경 숫자로 쉽게 정리, 주요 옵션 설명</title>
      <link>https://scribblinganything.tistory.com/795</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p5C2w/btsFhhWHr0I/tDYnxy1byo79OGVe5EgAN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p5C2w/btsFhhWHr0I/tDYnxy1byo79OGVe5EgAN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p5C2w/btsFhhWHr0I/tDYnxy1byo79OGVe5EgAN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp5C2w%2FbtsFhhWHr0I%2FtDYnxy1byo79OGVe5EgAN0%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;831&quot; height=&quot;409&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Chmod&amp;nbsp;권한&amp;nbsp;변경&amp;nbsp;숫자로&amp;nbsp;쉽게&amp;nbsp;정리&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;chmod 명령어에서 사용하는 숫자 형태의 권한을 rwx (읽기, 쓰기, 실행) 형태로 변환하는 것은 간단합니다. 각 숫자는 다음과 같은 권한을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;7 = rwx (읽기, 쓰기, 실행 권한 모두 있음)&lt;/li&gt;
&lt;li&gt;6 = rw- (읽기, 쓰기 권한 있음, 실행 권한 없음)&lt;/li&gt;
&lt;li&gt;5 = r-x (읽기, 실행 권한 있음, 쓰기 권한 없음)&lt;/li&gt;
&lt;li&gt;4 = r-- (읽기 권한만 있음, 쓰기 및 실행 권한 없음)&lt;/li&gt;
&lt;li&gt;3 = -wx (쓰기, 실행 권한 있음, 읽기 권한 없음)&lt;/li&gt;
&lt;li&gt;2 = -w- (쓰기 권한만 있음, 읽기 및 실행 권한 없음)&lt;/li&gt;
&lt;li&gt;1 = --x (실행 권한만 있음, 읽기 및 쓰기 권한 없음)&lt;/li&gt;
&lt;li&gt;0&amp;nbsp;=&amp;nbsp;---&amp;nbsp;(모든&amp;nbsp;권한&amp;nbsp;없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예를 들어, chmod에서 자주 사용되는 숫자 형태로 755과 644가 있습니다.&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;755는 rwxr-xr-x로 변환됩니다. 이는 소유자에게 모든 권한을 주고, 그룹과 다른 사용자에게는 읽기와 실행 권한만 주는 것을 의미합니다.&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;644는 rw-r--r--로 변환됩니다. 이는 소유자에게 읽기와 쓰기 권한을 주고, 그룹과 다른 사용자에게는 읽기 권한만 주는 것을 의미합니다.&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;권한&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 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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Chmod&amp;nbsp; 주요 옵션&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;chmod 명령어에서 가장 많이 사용되는 옵션들은 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-R 또는 --recursive: 디렉토리와 그 안의 모든 파일 및 서브디렉토리에 대해 재귀적으로 권한을 변경합니다.&lt;/li&gt;
&lt;li&gt;-v 또는 --verbose: chmod가 수행하는 각 변경 사항에 대해 설명을 출력합니다.&lt;/li&gt;
&lt;li&gt;-c 또는 --changes: 변경이 이루어진 경우에만 설명을 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 옵션들은 파일이나 디렉토리의 권한을 변경할 때 다양한 상황에서 유용하게 사용됩니다. 예를 들어, 특정 디렉토리 내의 모든 파일과 서브디렉토리의 권한을 변경하고자 할 때 -R 옵션을 사용하거나, 변경 사항을 추적하고자 할 때 -v 또는 -c 옵션을 사용할 수 있습니다.&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/795</guid>
      <comments>https://scribblinganything.tistory.com/795#entry795comment</comments>
      <pubDate>Wed, 28 Feb 2024 08:30:12 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] ls 명령, 옵션과 파일 권한 예제로 익히기(읽고(r), 쓰고(w), 실행(x))</title>
      <link>https://scribblinganything.tistory.com/794</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3TfFY/btsFit3nwFs/Ir8cF0uwqVP4cJ2u8kDmok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3TfFY/btsFit3nwFs/Ir8cF0uwqVP4cJ2u8kDmok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3TfFY/btsFit3nwFs/Ir8cF0uwqVP4cJ2u8kDmok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3TfFY%2FbtsFit3nwFs%2FIr8cF0uwqVP4cJ2u8kDmok%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;581&quot; height=&quot;410&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;ls 명령과 옵션&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls 명령은 Linux와 Unix 시스템에서 사용되며, 현재 디렉토리 또는 지정된 디렉토리의 내용을 나열합니다. 파일과 하위 디렉토리의 목록을 보여주어 사용자가 디렉토리의 내용을 파악할 수 있게 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본&amp;nbsp;사용법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1709027077666&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명령 옵션&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls 명령은 다양한 옵션을 통해 출력을 조정할 수 있습니다. 몇 가지 유용한 옵션을 예로 들어보겠습니다:&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;-l:&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-a:&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-h:&amp;nbsp;파일&amp;nbsp;크기를&amp;nbsp;쉽게&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;KB,&amp;nbsp;MB&amp;nbsp;등으로&amp;nbsp;표시합니다.&amp;nbsp;-l&amp;nbsp;옵션과&amp;nbsp;함께&amp;nbsp;사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-r:&amp;nbsp;파일&amp;nbsp;목록을&amp;nbsp;역순으로&amp;nbsp;표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-t:&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;ls 파일 권한 예제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709027224556&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-4-29:~$ ls -al
total 28
drwxr-xr-x 4 ubuntu ubuntu 4096 Feb 27 09:32 .
drwxr-xr-x 3 root   root   4096 Feb 26 09:48 ..
-rw-r--r-- 1 ubuntu ubuntu  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Feb 25  2020 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Feb 26 10:26 .cache
-rw-r--r-- 1 ubuntu ubuntu  807 Feb 25  2020 .profile
drwx------ 2 ubuntu ubuntu 4096 Feb 26 09:48 .ssh
-rw-r--r-- 1 ubuntu ubuntu    0 Feb 27 09:32 .sudo_as_admin_successful
ubuntu@ip-172-31-4-29:~$&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위 예제는 Linux 시스템에서 파일과 디렉토리의 권한을 보여주는 ls -l 명령의 출력 예입니다. 각 항목의 권한과 관련된 정보를 해석하면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;디렉토리 및 파일 권한 구조&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 항목의 첫 번째 문자는 항목의 타입을 나타냅니다. -는 파일을, d는 디렉토리를 의미합니다. 이어지는 9개의 문자는 세 그룹으로 나뉘며, 각각 소유자(owner), 그룹(group), 그리고 기타(other) 사용자의 권한을 나타냅니다.&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 data-ke-size=&quot;size16&quot;&gt;각 권한 그룹은 세 가지 권한을 나타냅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;r: 읽기 권한(read)&lt;/li&gt;
&lt;li&gt;w: 쓰기 권한(write)&lt;/li&gt;
&lt;li&gt;x: 실행 권한(execute)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;예제 해석&lt;/b&gt;&lt;/u&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;drwxr-xr-x: 첫 번째 항목은 디렉토리를 나타냅니다(d). 소유자(ubuntu)는 디렉토리를 읽고(r), 쓰고(w), 실행(x)할 수 있는 권한이 있습니다. 그룹(ubuntu) 사용자는 디렉토리를 읽고(r), 실행할 수 있지만(x), 쓸 수는 없습니다(-). 기타 사용자도 그룹 사용자와 동일한 권한을 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-rw-r--r--: 두 번째 항목은 파일을 나타냅니다(-). 소유자(ubuntu)는 파일을 읽고(r), 쓸 수 있는(w) 권한이 있습니다. 그룹(ubuntu) 사용자와 기타 사용자는 파일을 읽을 수만 있습니다(r).&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;추가 설명&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.과 ..는 현재 디렉토리와 상위 디렉토리를 각각 나타냅니다.&lt;/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;.bash_logout과 .bashrc 파일은 사용자의 홈 디렉토리에 위치한 설정 파일들로, 사용자의 쉘 환경을 구성하는 데 사용됩니다. .bash_logout은 로그아웃 시 실행되는 스크립트이며, .bashrc는 새 쉘 세션 시작 시 실행되는 스크립트입니다.&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;파일과 디렉토리의 소유자와 그룹이 모두 ubuntu로 설정되어 있으며, 이는 ubuntu 사용자가 해당 항목들을 관리할 수 있음을 의미합니다.&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;크기는&amp;nbsp;바이트&amp;nbsp;단위로&amp;nbsp;표시되며,&amp;nbsp;.bash_logout&amp;nbsp;파일의&amp;nbsp;크기는&amp;nbsp;220바이트,&amp;nbsp;.bashrc&amp;nbsp;파일의&amp;nbsp;크기는&amp;nbsp;3771바이트입니다. &lt;br /&gt;마지막&amp;nbsp;수정&amp;nbsp;날짜와&amp;nbsp;시간&amp;nbsp;정보도&amp;nbsp;표시됩니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;.bash_logout과&amp;nbsp;.bashrc&amp;nbsp;파일은&amp;nbsp;2020년&amp;nbsp;2월&amp;nbsp;25일에&amp;nbsp;마지막으로&amp;nbsp;수정되었습니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹관련프로그래밍(web programming)/linux(리눅스)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/794</guid>
      <comments>https://scribblinganything.tistory.com/794#entry794comment</comments>
      <pubDate>Tue, 27 Feb 2024 18:50:45 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 온도, 습도 값 파이썬으로 그래프 출력 - 커서 값 출력하기(Arduino, Cursor, Python, Cordination, graph)</title>
      <link>https://scribblinganything.tistory.com/793</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8d0Sv/btsDWsjFDT7/lvpempCAkBabN6hoNZEDBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8d0Sv/btsDWsjFDT7/lvpempCAkBabN6hoNZEDBK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8d0Sv/btsDWsjFDT7/lvpempCAkBabN6hoNZEDBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8d0Sv%2FbtsDWsjFDT7%2FlvpempCAkBabN6hoNZEDBK%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;파이썬으로 그래프 출력 - 커서 값 출력하기#1&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 아두이노(Arduino)를 사용하여 온도와 습도 데이터를 랜덤으로 생성하고, 이를 시리얼 통신을 통해 컴퓨터로 전송하였습니다. 컴퓨터는 받은 데이터를 파이썬(Python)을 이용해 그래프로 나타냈으며, 이번 프로젝트에서는 그래프 위에 마우스를 올렸을 때 해당 위치의 온도와 습도 값을 표시하는 이벤트 처리 코드를 작성하는 것입니다.&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;이를 구현하기 위한 방법을 자세히 설명하겠습니다. 먼저, 아두이노는 온도와 습도 센서를 통해 데이터를 수집합니다. 이 데이터는 아두이노의 시리얼 포트를 통해 컴퓨터로 전송됩니다. 파이썬에서는 pyserial과 같은 라이브러리를 사용하여 이 시리얼 데이터를 읽을 수 있습니다.&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;데이터를 읽은 후, 파이썬에서는 matplotlib 같은 시각화 라이브러리를 이용해 데이터를 그래프로 표현합니다. matplotlib에서는 figure.canvas.mpl_connect 메소드를 사용하여 마우스 이벤트를 처리할 수 있습니다. 예를 들어, motion_notify_event를 사용하면 마우스 포인터가 그래프 위를 움직일 때마다 이벤트가 발생하고, 이를 통해 해당 위치의 데이터 값을 얻을 수 있습니다. &lt;br /&gt;&lt;br /&gt;아두이노 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704707821332&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void setup() {
  // 시리얼 통신을 시작합니다. 보드에 맞는 속도로 설정하세요.
  Serial.begin(9600);
}

void loop() {
  // 가상의 온도와 습도 값을 생성합니다.
  // 예를 들어, 온도는 20~30도 사이, 습도는 40~60% 사이의 값으로 설정할 수 있습니다.
  float temperature = 20 + random(100) / 10.0;  // 20.0 ~ 29.9 사이의 값
  float humidity = 40 + random(200) / 10.0;    // 40.0 ~ 59.9 사이의 값

  // 시리얼 통신을 통해 온도와 습도 값을 전송합니다.
//  Serial.print(&quot;온도: &quot;);
//  Serial.print(temperature);
//  Serial.print(&quot; &amp;deg;C, 습도: &quot;);
//  Serial.print(humidity);
//  Serial.println(&quot; %&quot;);
  Serial.println(String(temperature) + &quot;,&quot; + String(humidity));

  // 0.5초 동안 대기합니다.
  delay(500);
}&lt;/code&gt;&lt;/pre&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;파이썬으로 그래프 출력 - 커서 값 출력하기#2&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704707888375&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import serial
import threading

# 시리얼 포트 설정
ser = serial.Serial('COM6', 9600)

# 그래프 창 및 스레드 관리를 위한 변수
graph_window = None
thread = None
continue_reading = False
max_data_points = 60

def start_graph():
    global graph_window, thread, continue_reading

    if graph_window is not None:
        return

    graph_window = tk.Toplevel()
    graph_window.title(&quot;Arduino Temperature and Humidity Graph&quot;)

    # 그래프 설정
    fig, (ax1, ax2) = plt.subplots(2, 1)
    temp_line, = ax1.plot([], [], label='Temperature', color='blue')
    humi_line, = ax2.plot([], [], label='Humidity', color='orange')
    ax1.legend(loc='upper left')
    ax2.legend(loc='upper right')

    # 어노테이션 초기화
    annot1 = ax1.annotate(&quot;&quot;, xy=(0,0), xytext=(-20,20), textcoords=&quot;offset points&quot;,
                         bbox=dict(boxstyle=&quot;round&quot;, fc=&quot;w&quot;), arrowprops=dict(arrowstyle=&quot;-&amp;gt;&quot;))
    annot1.set_visible(False)

    annot2 = ax2.annotate(&quot;&quot;, xy=(0,0), xytext=(-20,20), textcoords=&quot;offset points&quot;,
                         bbox=dict(boxstyle=&quot;round&quot;, fc=&quot;w&quot;), arrowprops=dict(arrowstyle=&quot;-&amp;gt;&quot;))
    annot2.set_visible(False)

    canvas = FigureCanvasTkAgg(fig, master=graph_window)
    widget = canvas.get_tk_widget()
    widget.pack(fill=tk.BOTH, expand=True)

    def update_annot(annot, line, ind):
        x, y = line.get_xdata()[ind], line.get_ydata()[ind]
        annot.xy = (x, y)
        annot.set_text(f&quot;x={x:.2f}, y={y:.2f}&quot;)
        annot.get_bbox_patch().set_alpha(0.4)

    def on_plot_hover(event):
        vis = annot1.get_visible()
        if event.inaxes == ax1:
            cont, ind = temp_line.contains(event)
            if cont:
                update_annot(annot1, temp_line, ind[&quot;ind&quot;][0])
                annot1.set_visible(True)
                fig.canvas.draw_idle()
            elif vis:
                annot1.set_visible(False)
                fig.canvas.draw_idle()
        
        vis = annot2.get_visible()
        if event.inaxes == ax2:
            cont, ind = humi_line.contains(event)
            if cont:
                update_annot(annot2, humi_line, ind[&quot;ind&quot;][0])
                annot2.set_visible(True)
                fig.canvas.draw_idle()
            elif vis:
                annot2.set_visible(False)
                fig.canvas.draw_idle()

    canvas.mpl_connect(&quot;motion_notify_event&quot;, on_plot_hover)

    continue_reading = True

    def read_from_arduino():
        x, y_temp, y_humi = [0], [0], [0]
        while continue_reading:
            try:
                line = ser.readline().decode('utf-8').strip()
                temperature, humidity = map(float, line.split(','))
                x.append(x[-1] + 1)
                y_temp.append(temperature)
                y_humi.append(humidity)

                if len(x) &amp;gt; max_data_points:
                    x = x[-max_data_points:]
                    y_temp = y_temp[-max_data_points:]
                    y_humi = y_humi[-max_data_points:]

                temp_line.set_xdata(x)
                temp_line.set_ydata(y_temp)
                humi_line.set_xdata(x)
                humi_line.set_ydata(y_humi)
                ax1.relim()
                ax1.autoscale_view()
                ax2.relim()
                ax2.autoscale_view()
                canvas.draw()
            except ValueError:
                pass

    thread = threading.Thread(target=read_from_arduino)
    thread.daemon = True
    thread.start()

def close_graph():
    global graph_window, continue_reading
    continue_reading = False
    if graph_window is not None:
        graph_window.destroy()
        graph_window = None

def update_data_points():
    global max_data_points
    try:
        max_data_points = int(data_points_entry.get())
    except ValueError:
        print(&quot;Please enter a valid integer for data points.&quot;)

root = tk.Tk()
root.title(&quot;Arduino Data Viewer&quot;)

start_button = tk.Button(root, text=&quot;Start Graph&quot;, command=start_graph)
start_button.pack()

close_button = tk.Button(root, text=&quot;Close Graph&quot;, command=close_graph)
close_button.pack()

data_points_label = tk.Label(root, text=&quot;Set Data Points:&quot;)
data_points_label.pack()
data_points_entry = tk.Entry(root)
data_points_entry.pack()
data_points_button = tk.Button(root, text=&quot;Set&quot;, command=update_data_points)
data_points_button.pack()

root.mainloop()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;제공된 코드에서 그래프에 커서를 올렸을 때 해당 위치의 값을 출력하는 부분은 on_plot_hover 함수를 통해 처리됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;어노테이션 초기화&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;annot1과 annot2는 matplotlib의 어노테이션 객체입니다. 이들은 각각 온도 그래프(ax1)와 습도 그래프(ax2)에 대한 정보를 표시하는 데 사용됩니다. 어노테이션은 set_visible(False)를 사용하여 초기에는 보이지 않게 설정됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;on_plot_hover 함수&lt;/u&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;온도 그래프(ax1)에 대한 이벤트 처리&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if event.inaxes == ax1: 코드를 통해 마우스 이벤트가 온도 그래프에서 발생했는지 확인합니다. cont, ind = temp_line.contains(event)를 사용하여 마우스 포인터가 온도 그래프의 데이터 포인트 중 하나를 가리키고 있는지 확인합니다. 만약 가리키고 있다면 (cont가 True일 경우), update_annot 함수를 호출하여 해당 데이터 포인트에 대한 정보를 어노테이션으로 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;습도 그래프(ax2)에 대한 이벤트 처리&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;온도 그래프와 유사하게, 마우스 이벤트가 습도 그래프에서 발생했는지 확인합니다. 마찬가지로 cont, ind = humi_line.contains(event)를 사용하여 마우스 포인터가 습도 그래프의 데이터 포인트를 가리키는지 확인하고, 가리키고 있다면 해당 정보를 어노테이션으로 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;update_annot 함수&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 어노테이션 객체를 업데이트하여 그래프에 표시할 텍스트와 위치를 설정합니다. annot.set_text(f&quot;x={x:.2f}, y={y:.2f}&quot;) 라인에서는 선택된 데이터 포인트의 x(시간)와 y(온도 또는 습도) 값을 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;그래프 업데이트&lt;/u&gt;&lt;br /&gt;마지막으로&amp;nbsp;fig.canvas.draw_idle()을&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 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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkUQmj/btsDfWSpemS/iIQsq7mMGh4ZQ9yNR0uwSK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkUQmj/btsDfWSpemS/iIQsq7mMGh4ZQ9yNR0uwSK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkUQmj/btsDfWSpemS/iIQsq7mMGh4ZQ9yNR0uwSK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bkUQmj/btsDfWSpemS/iIQsq7mMGh4ZQ9yNR0uwSK/img.gif&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;998&quot; height=&quot;637&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;코드 다운로드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cv4YLf/btsC75QWPtj/znCrKqzuv2rgD4kTzNosdK/test00.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;test00.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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아두이노 Arduino/파이썬(Python)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/793</guid>
      <comments>https://scribblinganything.tistory.com/793#entry793comment</comments>
      <pubDate>Thu, 25 Jan 2024 08:44:28 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 온도, 습도 값 파이썬으로 그래프 출력하기, 일정 개수만 출력, 버튼으로 그래프 만들기</title>
      <link>https://scribblinganything.tistory.com/792</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8uSi6/btsC354UOIo/aeteYEk9767PTtz8o5ddnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8uSi6/btsC354UOIo/aeteYEk9767PTtz8o5ddnk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8uSi6/btsC354UOIo/aeteYEk9767PTtz8o5ddnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8uSi6%2FbtsC354UOIo%2FaeteYEk9767PTtz8o5ddnk%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;아두이노&amp;nbsp;온도,&amp;nbsp;습도&amp;nbsp;값&amp;nbsp;파이썬으로&amp;nbsp;그래프&amp;nbsp;출력하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704621268177&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void setup() {
  // 시리얼 통신을 시작합니다. 보드에 맞는 속도로 설정하세요.
  Serial.begin(9600);
}

void loop() {
  // 가상의 온도와 습도 값을 생성합니다.
  // 예를 들어, 온도는 20~30도 사이, 습도는 40~60% 사이의 값으로 설정할 수 있습니다.
  float temperature = 20 + random(100) / 10.0;  // 20.0 ~ 29.9 사이의 값
  float humidity = 40 + random(200) / 10.0;    // 40.0 ~ 59.9 사이의 값

  // 시리얼 통신을 통해 온도와 습도 값을 전송합니다.
//  Serial.print(&quot;온도: &quot;);
//  Serial.print(temperature);
//  Serial.print(&quot; &amp;deg;C, 습도: &quot;);
//  Serial.print(humidity);
//  Serial.println(&quot; %&quot;);
  Serial.println(String(temperature) + &quot;,&quot; + String(humidity));

  // 0.5초 동안 대기합니다.
  delay(500);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 범위의 온도와 습도를 랜덤하게 생성하고 serial 통신을 통해 , 컴마 기호로 분리해서 println으로 &quot;\n&quot;과 함께 전송합니다.&amp;nbsp;&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 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 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;파이썬으로 일정 개수만 출력, 버튼으로 그래프 만들기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 Python으로 별도의 버튼을 만들고 버튼을 클릭하면 그래프가 실행되게 하겠습니다. 그리고 이전에는 그래프에 포인트들이 계속 추가되어 정보가 쌓였는데 이번에는 default로 60개의 포인트에 대한 값만 그래프로 출력하고 사용자가 text box에 숫자를 입력하면 그 숫자만큼 출력되게 만들겠습니다.&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704621733154&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import serial
import threading

# 시리얼 포트 설정
ser = serial.Serial('COM15', 9600)  

# 그래프 창 및 스레드 관리를 위한 변수
graph_window = None
thread = None
continue_reading = False
max_data_points = 60  # 초기 데이터 포인트 개수

def start_graph():
    global graph_window, thread, continue_reading

    if graph_window is not None:
        return  # 이미 그래프 창이 열려 있으면 아무것도 하지 않음

    graph_window = tk.Toplevel()
    graph_window.title(&quot;Arduino Temperature and Humidity Graph&quot;)

    # 그래프 설정
    fig, (ax1, ax2) = plt.subplots(2, 1)  # 두 개의 subplot 생성
    temp_line, = ax1.plot([], [], label='Temperature', color='blue')
    humi_line, = ax2.plot([], [], label='Humidity', color='orange')
    ax1.legend(loc='upper left')
    ax2.legend(loc='upper right')

    canvas = FigureCanvasTkAgg(fig, master=graph_window)
    widget = canvas.get_tk_widget()
    widget.pack(fill=tk.BOTH, expand=True)

    continue_reading = True

    # 아두이노에서 데이터 읽는 스레드 시작
    def read_from_arduino():
        x, y_temp, y_humi = [0], [0], [0]
        while continue_reading:
            try:
                line = ser.readline().decode('utf-8').strip()
                temperature, humidity = map(float, line.split(','))
                x.append(x[-1] + 1)
                y_temp.append(temperature)
                y_humi.append(humidity)

                # 설정된 데이터 포인트 수만큼 유지
                if len(x) &amp;gt; max_data_points:
                    x = x[-max_data_points:]
                    y_temp = y_temp[-max_data_points:]
                    y_humi = y_humi[-max_data_points:]

                temp_line.set_xdata(x)
                temp_line.set_ydata(y_temp)
                humi_line.set_xdata(x)
                humi_line.set_ydata(y_humi)
                ax1.relim()
                ax1.autoscale_view()
                ax2.relim()
                ax2.autoscale_view()
                canvas.draw()
            except ValueError:
                pass

    thread = threading.Thread(target=read_from_arduino)
    thread.daemon = True
    thread.start()

def close_graph():
    global graph_window, continue_reading
    continue_reading = False
    if graph_window is not None:
        graph_window.destroy()
        graph_window = None

def update_data_points():
    global max_data_points
    try:
        max_data_points = int(data_points_entry.get())
    except ValueError:
        print(&quot;Please enter a valid integer for data points.&quot;)

# 메인 윈도우 설정
root = tk.Tk()
root.title(&quot;Arduino Data Viewer&quot;)

# 시작 버튼
start_button = tk.Button(root, text=&quot;Start Graph&quot;, command=start_graph)
start_button.pack()

# 종료 버튼
close_button = tk.Button(root, text=&quot;Close Graph&quot;, command=close_graph)
close_button.pack()

# 데이터 포인트 설정
data_points_label = tk.Label(root, text=&quot;Set Data Points:&quot;)
data_points_label.pack()
data_points_entry = tk.Entry(root)
data_points_entry.pack()
data_points_button = tk.Button(root, text=&quot;Set&quot;, command=update_data_points)
data_points_button.pack()

root.mainloop()&lt;/code&gt;&lt;/pre&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704622292938&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def read_from_arduino():&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지속적으로 아두이노에서 값을 읽어와야 하기 때문에 threading으로 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704622396731&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global graph_window, thread, continue_reading&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 외부에서 영향을 주는 변수 들로 global로 관리 합니다.&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CHOX1/btsC4dol52h/sNY3uk5bQufKAMKHe1KvrK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CHOX1/btsC4dol52h/sNY3uk5bQufKAMKHe1KvrK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CHOX1/btsC4dol52h/sNY3uk5bQufKAMKHe1KvrK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/CHOX1/btsC4dol52h/sNY3uk5bQufKAMKHe1KvrK/img.gif&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;998&quot; height=&quot;637&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;코드 다운로드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 코드 다운로드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/DFNxS/btsC844H97Z/0reEnN1Rw6gCdNTQ4iGLpk/test00.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;test00.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 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>아두이노 Arduino/파이썬(Python)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/792</guid>
      <comments>https://scribblinganything.tistory.com/792#entry792comment</comments>
      <pubDate>Thu, 18 Jan 2024 09:13:04 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 온도, 습도 값 파이썬으로 그래프 출력하기(Arduino, Python, Serial, Graph)</title>
      <link>https://scribblinganything.tistory.com/791</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GrBkr/btsC1IbaS6p/Kf5kJKnTDIQ3tHQjWEFEL0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GrBkr/btsC1IbaS6p/Kf5kJKnTDIQ3tHQjWEFEL0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GrBkr/btsC1IbaS6p/Kf5kJKnTDIQ3tHQjWEFEL0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGrBkr%2FbtsC1IbaS6p%2FKf5kJKnTDIQ3tHQjWEFEL0%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;아두이노 온도, 습도 값 파이썬으로 그래프 출력하기#1&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704530677547&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void setup() {
  // 시리얼 통신을 시작합니다. 보드에 맞는 속도로 설정하세요.
  Serial.begin(9600);
}

void loop() {
  // 가상의 온도와 습도 값을 생성합니다.
  // 예를 들어, 온도는 20~30도 사이, 습도는 40~60% 사이의 값으로 설정할 수 있습니다.
  float temperature = 20 + random(100) / 10.0;  // 20.0 ~ 29.9 사이의 값
  float humidity = 40 + random(200) / 10.0;    // 40.0 ~ 59.9 사이의 값

  // 시리얼 통신을 통해 온도와 습도 값을 전송합니다.
//  Serial.print(&quot;온도: &quot;);
//  Serial.print(temperature);
//  Serial.print(&quot; &amp;deg;C, 습도: &quot;);
//  Serial.print(humidity);
//  Serial.println(&quot; %&quot;);
  Serial.println(String(temperature) + &quot;,&quot; + String(humidity));

  // 0.5초 동안 대기합니다.
  delay(500);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 사용하면 임의의 온습도 값이 serial 통신을 통해 , (컴마) 기호로 구분되어 전송됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704530752858&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  Serial.print(&quot;온도: &quot;);
  Serial.print(temperature);
  Serial.print(&quot; &amp;deg;C, 습도: &quot;);
  Serial.print(humidity);
  Serial.println(&quot; %&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 부분은 주석 처리했는데 아두이노 serial monitor로 직접 확인하고 싶으시면 사용하시면 됩니다.&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 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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;아두이노 온도, 습도 값 파이썬으로 그래프 출력하기#2&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 파이썬 코드를 사용해서 시리얼 통신으로 입력 받은 값을 그래프로 출력 해보겠습니다.&lt;/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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704531477977&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import serial
import threading

# 시리얼 포트 설정
ser = serial.Serial('COM15', 9600) 

# 데이터를 읽어서 그래프에 추가하는 함수
def read_from_arduino():
    while True:
        try:
            line = ser.readline().decode('utf-8').strip()
            temperature, humidity = map(float, line.split(','))
            # 그래프에 데이터 추가
            x.append(x[-1] + 1)
            y_temp.append(temperature)
            y_humi.append(humidity)
            temp_line.set_xdata(x)
            temp_line.set_ydata(y_temp)
            humi_line.set_xdata(x)
            humi_line.set_ydata(y_humi)
            ax1.relim()
            ax1.autoscale_view()
            ax2.relim()
            ax2.autoscale_view()
            canvas.draw()
        except ValueError:
            pass

# GUI 설정
root = tk.Tk()
root.title(&quot;Arduino Temperature and Humidity&quot;)

# 그래프 설정
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
x, y_temp, y_humi = [0], [0], [0]  # 초기값 설정

temp_line, = ax1.plot(x, y_temp, label='Temperature', color='blue')
humi_line, = ax2.plot(x, y_humi, label='Humidity', color='orange')
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

canvas = FigureCanvasTkAgg(fig, master=root)
widget = canvas.get_tk_widget()
widget.pack(fill=tk.BOTH, expand=True)

# 아두이노에서 데이터 읽는 스레드 시작
thread = threading.Thread(target=read_from_arduino)
thread.daemon = True
thread.start()

root.mainloop()&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;주석&amp;gt;&amp;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;혹시 처음 serial을 실행하면서 아래와 같은 에러 메세지가 발생했다면&lt;/p&gt;
&lt;pre id=&quot;code_1704530946994&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;AttributeError: module 'serial' has no attribute 'Serial'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 설치를 진행해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1704531182146&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install pyserial&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1704531506986&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ser = serial.Serial('COM15', 9600)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시리얼 포트 번호를 통해 아두이노에 연결된 포트 번호를 입력합니다. 저는 COM15에 연결되어 있어서 COM15로 설정하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704531656994&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;line = ser.readline().decode('utf-8').strip()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어온 byte 값을 utf-8 인코딩 방식으로 문자열로 바꿔 줍니다. strip으로 공백 등을 제거 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704532390408&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;            temp_line.set_xdata(x)
            temp_line.set_ydata(y_temp)
            humi_line.set_xdata(x)
            humi_line.set_ydata(y_humi)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set_xdata, ydata를 통해서 값을 지속적으로 업데이트 합니다.&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;pre id=&quot;code_1704532452066&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;            ax1.relim()
            ax1.autoscale_view()
            ax2.relim()
            ax2.autoscale_view()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어온 값에 맞춰서 축의 범위를 autoscale 해줍니다.&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 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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3NrOV/btsC4qU97UY/bEK7G7sHSl0GDlmqFC0an0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3NrOV/btsC4qU97UY/bEK7G7sHSl0GDlmqFC0an0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3NrOV/btsC4qU97UY/bEK7G7sHSl0GDlmqFC0an0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/3NrOV/btsC4qU97UY/bEK7G7sHSl0GDlmqFC0an0/img.gif&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;836&quot; height=&quot;520&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;코드 다운로드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/pk0TW/btsC89kvr3C/zNU1ucEJQ6bwQ8OgDgS0H0/rnd_temp_humid.ino?attach=1&amp;amp;knm=tfile.ino&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;rnd_temp_humid.ino&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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bEPuWJ/btsC77gcmfT/lBFoU4KemnCtiJREBi4mkK/test01.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;test01.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 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 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>아두이노 Arduino/파이썬(Python)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/791</guid>
      <comments>https://scribblinganything.tistory.com/791#entry791comment</comments>
      <pubDate>Sun, 14 Jan 2024 21:29:37 +0900</pubDate>
    </item>
    <item>
      <title>갤럭시 탭 리뷰 - 화면 분할 기능(필기에 유용, Samsung Galaxy Tab S9, 키보드)</title>
      <link>https://scribblinganything.tistory.com/790</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ye8Ab/btsDhgquVvJ/cpkT1MVMhHzARcEQx6zWGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ye8Ab/btsDhgquVvJ/cpkT1MVMhHzARcEQx6zWGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ye8Ab/btsDhgquVvJ/cpkT1MVMhHzARcEQx6zWGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYe8Ab%2FbtsDhgquVvJ%2FcpkT1MVMhHzARcEQx6zWGk%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;718&quot; height=&quot;600&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;갤럭시&amp;nbsp;탭&amp;nbsp;리뷰&amp;nbsp;-&amp;nbsp;화면&amp;nbsp;분할&amp;nbsp;기능&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;그리고 학기 내내 수업 중에 필기를 같이 했던 전자펜도 있습니다.요즘 교수님들도 책보다는 강의 자료를 PPT로 띄우고 하시다 보니 갤럭시 탭은 이제 필수가 되는 거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글은 삼성 갤럭시 제품을 너무 좋아하는 제가 갤럭시 탭에 대해 리뷰 겸 기능 소개를 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 학교를 다니면서 아주 유용하게 쓰는 기능 중 하나는 화면 분할입니다. 이 기능은 생각보다 많은 사람들이 모르더라고요. 화면 분할 기능을 사용하면 &lt;b&gt;여러 애플리케이션을 동시에 실행할 수 있어서 공부나 업무에 매우 효율적&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 방법은 아주 간단합니다. 먼저, 사용하고 싶은 앱을 엽니다. 그 다음, 화면 하단의 '최근 사용 앱' 버튼을 눌러 다른 앱을 선택합니다. 이렇게 하면 두 앱이 화면에 나란히 표시되며, 각 앱의 크기를 조절하여 더 편리하게 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갤럭시 탭의 화면 분할 기능은 특히 문서 작업과 인터넷 검색을 동시에 해야 할 때 유용합니다. 예를 들어, 한쪽 화면에서는 워드 문서를 작성하고, 다른 한쪽에서는 필요한 정보를 검색할 수 있습니다. 또한, 온라인 강의를 들으면서 동시에 노트를 할 수도 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기능의 또 다른 장점은 멀티태스킹을 할 때의 효율성입니다. 예를 들어, 이메일을 확인하면서 동시에 캘린더를 열어 일정을 확인할 수 있습니다. 이렇게 하면 시간을 절약하고 작업의 흐름을 유지할 수 있죠.&lt;/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;갤럭시&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;효율성을&amp;nbsp;높일&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;상세 사용 방법은 아래를 참조하세요.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.설정의 유용한 기능에서 멀티윈도우(Multi Window)에서 아래 그림과 같이 &quot;하나의 창에서 멀티윈도우 메뉴 표시&quot;를 클릭합니다. 클릭을 하면 아래 그림처럼 상단 중간과 같이 줄선이 생긴 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot_20240109_180557_Settings.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;2560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8QP3P/btsDdI2axQd/5IMMAtKf3lgZVD2NqoZLkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8QP3P/btsDdI2axQd/5IMMAtKf3lgZVD2NqoZLkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8QP3P/btsDdI2axQd/5IMMAtKf3lgZVD2NqoZLkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8QP3P%2FbtsDdI2axQd%2F5IMMAtKf3lgZVD2NqoZLkk%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;1600&quot; height=&quot;2560&quot; data-filename=&quot;Screenshot_20240109_180557_Settings.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;2560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;2. 상단 중간의 줄선을 클릭하면 아래와 같이 분할 화면을 선택할 지 팝업 화면을 선택할지를 결정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot_20240109_180608_Settings.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;2560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpksa3/btsDdBoqDi3/2gyngHIqwd1LMtctDaJ3Z0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpksa3/btsDdBoqDi3/2gyngHIqwd1LMtctDaJ3Z0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpksa3/btsDdBoqDi3/2gyngHIqwd1LMtctDaJ3Z0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpksa3%2FbtsDdBoqDi3%2F2gyngHIqwd1LMtctDaJ3Z0%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;1600&quot; height=&quot;2560&quot; data-filename=&quot;Screenshot_20240109_180608_Settings.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;2560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;3. 최종적으로 아래와 같이 멋지게(?) 분할 화면을 이용해서 작업을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nhSb0/btsDhyEslhI/xjlU5LYkuegRwRV8TWfFP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nhSb0/btsDhyEslhI/xjlU5LYkuegRwRV8TWfFP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nhSb0/btsDhyEslhI/xjlU5LYkuegRwRV8TWfFP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnhSb0%2FbtsDhyEslhI%2FxjlU5LYkuegRwRV8TWfFP1%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;828&quot; height=&quot;566&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;갤럭시 탭, 키보드 최저가 링크&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 삼성에서 갤럭시 제품에 대해 할인을 많이 하고 있습니다. 혹시&lt;span style=&quot;color: #ee2323;&quot;&gt; 관심 있으시면 아래 링크를 통해 구경&lt;/span&gt;하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpMvh&quot;&gt;https://link.coupang.com/a/bmpMvh&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704792512750&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시탭 A9 플러스 태블릿PC&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bmpMvh&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7684881341&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kPf2b/hyU2lnk3Kx/wRQ9Gcy1NKdVudwYTsShPK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/dpMyMC/hyU2iD9DPQ/e7PkgIq5f74lr0B8730vK1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpMvh&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bmpMvh&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kPf2b/hyU2lnk3Kx/wRQ9Gcy1NKdVudwYTsShPK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/dpMyMC/hyU2iD9DPQ/e7PkgIq5f74lr0B8730vK1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시탭 A9 플러스 태블릿PC&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpM4r&quot;&gt;https://link.coupang.com/a/bmpM4r&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704792604521&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시탭 S9&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bmpM4r&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7759777879&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b4G9LH/hyU2rujxGb/DBjhEjAIfCqQmeQDfUpVh1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cm8khr/hyU2nlamRS/XTFa9kYKpg6MW6wf4akut0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpM4r&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bmpM4r&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b4G9LH/hyU2rujxGb/DBjhEjAIfCqQmeQDfUpVh1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cm8khr/hyU2nlamRS/XTFa9kYKpg6MW6wf4akut0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시탭 S9&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpMTW&quot;&gt;https://link.coupang.com/a/bmpMTW&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704792577432&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성 정품 갤럭시 탭S9 키보드 슬림 키보드 북커버 EF-DX710 (탭S9 FE 호환)&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bmpMTW&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7504089154&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Hq0Bu/hyU2oEnaGa/9mxYZNMgPh7teFQk4B54WK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=91_23_155_93,https://scrap.kakaocdn.net/dn/bl25ze/hyU2i5cVio/IRocuxy5i4zOxCBOu2G7K0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=91_23_155_93&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bmpMTW&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bmpMTW&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Hq0Bu/hyU2oEnaGa/9mxYZNMgPh7teFQk4B54WK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=91_23_155_93,https://scrap.kakaocdn.net/dn/bl25ze/hyU2i5cVio/IRocuxy5i4zOxCBOu2G7K0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=91_23_155_93');&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;삼성 정품 갤럭시 탭S9 키보드 슬림 키보드 북커버 EF-DX710 (탭S9 FE 호환)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/790</guid>
      <comments>https://scribblinganything.tistory.com/790#entry790comment</comments>
      <pubDate>Tue, 9 Jan 2024 18:34:28 +0900</pubDate>
    </item>
    <item>
      <title>가지급금이란? 영수증 없이 비용처리된 경우</title>
      <link>https://scribblinganything.tistory.com/789</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;790&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdllL/btsC7obbLQj/o2kI2QR47RxwAHRbqbaKy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdllL/btsC7obbLQj/o2kI2QR47RxwAHRbqbaKy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdllL/btsC7obbLQj/o2kI2QR47RxwAHRbqbaKy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdllL%2FbtsC7obbLQj%2Fo2kI2QR47RxwAHRbqbaKy0%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;805&quot; height=&quot;790&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;가지급금이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&quot;가지급금&quot;은 회사의 재정 관리에서 중요한 개념입니다. 간단히 말해서, &lt;b&gt;가지급금이란 회사에서 현금이나 예금을 인출했지만, 그 사용 목적에 대한 증빙서류(영수증 등)가 없는 경우에 회계상 발생하는 금액&lt;/b&gt;을 말합니다. 이는 재무상태표에서 주로 &lt;b&gt;단기 대여금&lt;/b&gt;으로 분류됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;업무상 지출&lt;/b&gt;: 직원이 회사를 대신해서 비용을 지출했으나 아직 영수증을 제출하지 않은 경우. 이런 경우는 일반적으로 문제가 되지 않으며, 영수증 제출 후 정산이 이루어집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개인적 사용&lt;/b&gt;: 대표이사나 회사와 특수관계에 있는 사람들이 개인적인 목적으로 회사 자금을 사용한 경우. 이러한 가지급금은 회사의 순이익에 영향을 미치고, 세금 및 법적 문제를 야기할 수 있습니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;한국의 세법에서는 가지급금에 대해 엄격한 규정을 두고 있습니다. 특히, &lt;b&gt;대표이사 등이 회사 자금을 개인적으로 사용했을 경우, 이는 불법적인 자금 유용으로 간주될 수 있으며, 이에 대한 세금 부과나 법적 처벌&lt;/b&gt;을 받을 수 있습니다. 가지급금이 오랜 기간 동안 정산되지 않으면, 이는 소득으로 간주되어 소득세가 부과될 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사는&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;적절한&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;데&amp;nbsp;도움이&amp;nbsp;됩니다.&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 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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;가지급금에 따른 불이익&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가지급금에 대한 세법상의 제재를 쉽게 설명하자면, 가지급금은 회사가 대표이사나 다른 특수 관계인에게 빌려준 것으로 간주되어 여러 가지 세금 문제를 야기할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;가지급금 인정이자:&lt;/b&gt; 회사에서 돈을 인출했는데 영수증이 없을 경우, 이 금액은 회사가 대표이사에게 빌려준 것으로 간주됩니다. 이 경우, 회사는 마치 대표이사에게 돈을 빌려주고 &lt;b&gt;연리 4.6%의 이자를 받는 것처럼 처리&lt;/b&gt;되며, 이 이자에 대해 법인세를 납부해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상여처분&lt;/b&gt;: 회사가 지출한 것으로 보이는 금액이 실제로는 대표이사가 인출한 것으로 간주될 때, 이 금액은 대표이사에게 주어진 상여로 처리됩니다. 이 경우, 해당 금액에 대해 대표이사에게 &lt;b&gt;소득세가 부과&lt;/b&gt;됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지급이자 손금불산입&lt;/b&gt;: 회사가 은행으로부터 돈을 빌린 상태에서 가지급금이 있는 경우, 은행에 지급하는 이자 중 가지급금에 해당하는 부분은 회사의 &lt;b&gt;이자비용으로 인정받지 못합니다&lt;/b&gt;. 즉, 회사는 이 부분의 이자에 대해 세금 혜택을 받을 수 없습니다.&lt;/li&gt;
&lt;/ul&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;제재들은&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;가지급금에&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 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>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/789</guid>
      <comments>https://scribblinganything.tistory.com/789#entry789comment</comments>
      <pubDate>Tue, 9 Jan 2024 08:45:02 +0900</pubDate>
    </item>
    <item>
      <title>[아두이노] 일정 시간 간격으로 시리얼 출력하기(Arduino, millis, delay, 1초)</title>
      <link>https://scribblinganything.tistory.com/788</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndMAP/btsC6UHlzHt/T5e07jTw6GBIjxyPtzlkak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndMAP/btsC6UHlzHt/T5e07jTw6GBIjxyPtzlkak/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndMAP/btsC6UHlzHt/T5e07jTw6GBIjxyPtzlkak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndMAP%2FbtsC6UHlzHt%2FT5e07jTw6GBIjxyPtzlkak%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;[아두이노]&amp;nbsp;일정&amp;nbsp;시간&amp;nbsp;간격으로&amp;nbsp;시리얼&amp;nbsp;출력하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아두이노에서&amp;nbsp;1초에&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;b&gt;millis()&amp;nbsp;함수를&amp;nbsp;사용하여&amp;nbsp;현재&amp;nbsp;시간을&amp;nbsp;체크&lt;/b&gt;하고,&amp;nbsp;마지막으로&amp;nbsp;데이터를&amp;nbsp;보낸&amp;nbsp;시간과&amp;nbsp;현재&amp;nbsp;시간의&amp;nbsp;차이가&amp;nbsp;1000밀리초(1초)&amp;nbsp;이상이&amp;nbsp;되었을&amp;nbsp;때&amp;nbsp;데이터를&amp;nbsp;보내는&amp;nbsp;것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;delay(1000)를&amp;nbsp;사용하는&amp;nbsp;경우&amp;nbsp;정확한&amp;nbsp;1초의&amp;nbsp;지연을&amp;nbsp;보장하지&amp;nbsp;않는&amp;nbsp;이유는&amp;nbsp;아두이노의&amp;nbsp;delay()&amp;nbsp;함수가&amp;nbsp;프로그램의&amp;nbsp;나머지&amp;nbsp;부분을&amp;nbsp;&quot;블록(block)&quot;&amp;nbsp;또는&amp;nbsp;일시&amp;nbsp;중지&amp;nbsp;시키기&amp;nbsp;때문입니다.&amp;nbsp;delay(1000)을&amp;nbsp;호출하면&amp;nbsp;프로그램은&amp;nbsp;1000밀리초&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;시리얼&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 data-ke-size=&quot;size16&quot;&gt;예제 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704364785294&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;unsigned long previousMillis = 0;  // 마지막으로 데이터를 보낸 시간을 저장할 변수
const long interval = 1000;        // 메시지를 보내는 간격 (밀리초 단위), 여기서는 1초

void setup() {
  Serial.begin(9600);  // 시리얼 통신을 시작 (9600 보드레이트)
}

void loop() {
  unsigned long currentMillis = millis();  // 현재 시간을 밀리초 단위로 가져옴

  if (currentMillis - previousMillis &amp;gt;= interval) {
    // 마지막으로 메시지를 보낸 시간에서 1초가 지났는지 확인
    previousMillis = currentMillis;  // 현재 시간을 '마지막으로 메시지를 보낸 시간'으로 업데이트

    // 1초마다 실행할 코드
    Serial.println(&quot;1초마다 보내는 메시지&quot;);  // 시리얼 모니터에 메시지 보내기
  }
}&lt;/code&gt;&lt;/pre&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;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드는&amp;nbsp;아두이노의&amp;nbsp;loop()&amp;nbsp;함수&amp;nbsp;내에서&amp;nbsp;지속적으로&amp;nbsp;현재&amp;nbsp;시간을&amp;nbsp;체크하고,&amp;nbsp;마지막으로&amp;nbsp;메시지를&amp;nbsp;보낸&amp;nbsp;시간과의&amp;nbsp;차이가&amp;nbsp;1초&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;자주&amp;nbsp;사용됩니다.&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;아두이노에서 long 데이터 타입은 32비트 정수 값을 저장하는 데 사용됩니다. millis() 함수는 프로그램이 시작된 이후의 밀리초 단위 시간을 반환하며, 이 값은 시간이 지남에 따라 계속 증가합니다. 아두이노가 오랜 시간 동안 실행될 경우, millis()에서 반환되는 값은 매우 큰 수가 될 수 있습니다. 따라서, long 타입은 이러한 큰 값을 안전하게 저장하기 위해 사용됩니다.&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;const 키워드는 상수(constant)를 정의하는 데 사용됩니다. 상수는 프로그램 실행 중에 그 값이 변경되지 않는 변수를 의미합니다. 이 코드에서 const long interval = 1000; 구문은 interval이라는 이름의 상수를 선언하고, 이를 1000으로 초기화합니다. interval은 시간 간격을 나타내며, 이 값은 프로그램 실행 중에 변경되어서는 안 됩니다. const를 사용하여 이 변수의 값이 프로그램 내에서 실수로 변경되는 것을 방지할 수 있습니다.&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;unsigned long의 빼기 연산은 모듈로 2^32의 산술을 사용하기 때문에, 오버플로가 발생해도 currentMillis - previousMillis의 계산 결과가 올바르게 유지되기 때문에 Overflow를 고려하지 않아도 됩니다.&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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QQV1F/btsC4GivjLO/K1GS2UoirNa9QCD5laKlt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QQV1F/btsC4GivjLO/K1GS2UoirNa9QCD5laKlt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QQV1F/btsC4GivjLO/K1GS2UoirNa9QCD5laKlt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQQV1F%2FbtsC4GivjLO%2FK1GS2UoirNa9QCD5laKlt0%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;685&quot; height=&quot;372&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아두이노 Arduino</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/788</guid>
      <comments>https://scribblinganything.tistory.com/788#entry788comment</comments>
      <pubDate>Mon, 8 Jan 2024 09:02:43 +0900</pubDate>
    </item>
    <item>
      <title>[아두이노] 1:1 캔통신 연결하기(Arduino, CAN Communication, Bus, MCP2515)</title>
      <link>https://scribblinganything.tistory.com/787</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buXNH0/btsC4frj83l/0dqdENlDqH7MmCVMG4kVv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buXNH0/btsC4frj83l/0dqdENlDqH7MmCVMG4kVv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buXNH0/btsC4frj83l/0dqdENlDqH7MmCVMG4kVv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuXNH0%2FbtsC4frj83l%2F0dqdENlDqH7MmCVMG4kVv0%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;[아두이노] 1:1 캔통신 연결하기: 준비&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이번 실습에서는 MCP2515 CAN 통신 트랜시버를 사용하여 아두이노 보드 간의 1대1 통신을 진행할 것입니다. MCP2515는 Controller Area Network (CAN) 프로토콜을 지원하는 트랜시버로, 자동차 및 산업용 기기에서 널리 사용되는 통신 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 아&lt;b&gt;두이노 프로그래밍을 위해 아래 웹사이트에서 MCP2515 라이브러리를 zip 파일로 다운로드&lt;/b&gt; 받습니다. 이 라이브러리는 아두이노와 MCP2515 모듈 간의 통신을 용이하게 해주며, 송수신 코드를 구현하는 데 필요한 함수들을 포함하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/autowp/arduino-mcp2515&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/autowp/arduino-mcp2515&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습에서는 두 아두이노 우노 보드를 사용합니다. 하나는 송신측으로, 다른 하나는 수신측으로 설정됩니다. &lt;b&gt;송신측에서는 수신측의 ID와 데이터 길이(DLC, Data Length Code) 값을 전송&lt;/b&gt;합니다. 이 정보는 CAN 프레임의 일부로, 수신측이 올바른 데이터를 수신하고 해석할 수 있도록 합니다.&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;수신측 아두이노는 별도의 필터링 없이 CAN 버스 라인 상의 모든 데이터를 읽습니다. CAN 시스템에서 데이터는 프레임 형식으로 전송되며, 각 프레임에는 식별자(ID)와 데이터 필드가 포함됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctf87G/btsC32MlnRY/KGCpslgjwG0vTfzDS51UL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctf87G/btsC32MlnRY/KGCpslgjwG0vTfzDS51UL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctf87G/btsC32MlnRY/KGCpslgjwG0vTfzDS51UL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctf87G%2FbtsC32MlnRY%2FKGCpslgjwG0vTfzDS51UL0%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;791&quot; height=&quot;417&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 실습을 위해 필요한 재료는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2개의 아두이노 우노 보드&lt;/li&gt;
&lt;li&gt;2개의 MCP2515 CAN 통신 모듈&lt;/li&gt;
&lt;li&gt;다수의 점퍼 케이블&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;아두이노 보드와 MCP2515 모듈의 핀 연결은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;D2 &amp;rarr; INT (인터럽트)&lt;/li&gt;
&lt;li&gt;D13 &amp;rarr; SCK (시리얼 클록)&lt;/li&gt;
&lt;li&gt;D12 &amp;rarr; SO (시리얼 아웃)&lt;/li&gt;
&lt;li&gt;D11 &amp;rarr; SI (시리얼 인)&lt;/li&gt;
&lt;li&gt;D10 &amp;rarr; CS (칩 셀렉트)&lt;/li&gt;
&lt;/ul&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;MCP2515&amp;nbsp;모듈은&amp;nbsp;서로&amp;nbsp;High(H)&amp;nbsp;핀은&amp;nbsp;High(H)끼리,&amp;nbsp;Low(L)&amp;nbsp;핀은&amp;nbsp;Low(L)끼리&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;/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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[아두이노] 1:1 캔통신 연결하기: 실습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 라이브러리를 ZIP 파일로 아두이노에 추가하면 아래와 같이 예제 파일이 만들어 집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0cTvd/btsC4sRxKOr/0LaaKDiRrvjKke8qu0LGjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0cTvd/btsC4sRxKOr/0LaaKDiRrvjKke8qu0LGjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0cTvd/btsC4sRxKOr/0LaaKDiRrvjKke8qu0LGjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0cTvd%2FbtsC4sRxKOr%2F0LaaKDiRrvjKke8qu0LGjK%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;561&quot; height=&quot;955&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아두이노 보드 하나에는 CAN_write를 프로그램 하고 다른 하나는 CAN_read를 프로그램 합니다. 각 각의 코드는 아래와 같습니다.&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;CAN_write 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704272636256&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;SPI.h&amp;gt;
#include &amp;lt;mcp2515.h&amp;gt;

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {
  canMsg1.can_id  = 0x0F6; //슬레이브1의 ID
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036; //슬레이브2의 ID
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
  
  while (!Serial);
  Serial.begin(115200);
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS);
  mcp2515.setNormalMode();
  
  Serial.println(&quot;Example: Write to CAN&quot;);
}

void loop() {
  mcp2515.sendMessage(&amp;amp;canMsg1);
  mcp2515.sendMessage(&amp;amp;canMsg2);

  Serial.println(&quot;Messages sent&quot;);
  
  delay(500);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 2개의 캔 메세지를 0.5초 단위로 전송합니다. 각 메세지는 8바이트 사이즈이고 ID는 코드를 참조하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캔 속도는 125kbps로 설정되었습니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CAN_read 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704272670943&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;SPI.h&amp;gt;
#include &amp;lt;mcp2515.h&amp;gt;

struct can_frame canMsg;
MCP2515 mcp2515(10);


void setup() {
  Serial.begin(115200);
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS);
  mcp2515.setNormalMode();
  
  Serial.println(&quot;------- CAN Read ----------&quot;);
  Serial.println(&quot;ID  DLC   DATA&quot;);
}

void loop() {
  if (mcp2515.readMessage(&amp;amp;canMsg) == MCP2515::ERROR_OK) {
    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(&quot; &quot;); 
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(&quot; &quot;);
    
    for (int i = 0; i&amp;lt;canMsg.can_dlc; i++)  {  // print the data
      Serial.print(canMsg.data[i],HEX);
      Serial.print(&quot; &quot;);
    }

    Serial.println();      
  }
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;3. 아래와 같이 수신측의 Serial Monitoring을 통해 정상적으로 캔 메세지를 출력함을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLz3MF/btsC00uYHIJ/moik6RmOIV6p1oqwL62Cr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLz3MF/btsC00uYHIJ/moik6RmOIV6p1oqwL62Cr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLz3MF/btsC00uYHIJ/moik6RmOIV6p1oqwL62Cr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLz3MF%2FbtsC00uYHIJ%2Fmoik6RmOIV6p1oqwL62Cr0%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;685&quot; height=&quot;372&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>아두이노 Arduino</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/787</guid>
      <comments>https://scribblinganything.tistory.com/787#entry787comment</comments>
      <pubDate>Fri, 5 Jan 2024 08:38:30 +0900</pubDate>
    </item>
    <item>
      <title>[실제사용후기] 갤럭시버즈2프로와 보스QC이어버드2 비교 리뷰(Galaxy vs Bose)</title>
      <link>https://scribblinganything.tistory.com/786</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYXChi/btsC4Dli0Cw/PB2ZeCLAuaU5IYyriDhvp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYXChi/btsC4Dli0Cw/PB2ZeCLAuaU5IYyriDhvp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYXChi/btsC4Dli0Cw/PB2ZeCLAuaU5IYyriDhvp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYXChi%2FbtsC4Dli0Cw%2FPB2ZeCLAuaU5IYyriDhvp0%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;740&quot; height=&quot;484&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;갤럭시 버즈2 프로 vs 보스 QC 이어버드2&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLDjWe/btsC0axIu4O/FoBjcVJJNfFyzSJndPasf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLDjWe/btsC0axIu4O/FoBjcVJJNfFyzSJndPasf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLDjWe/btsC0axIu4O/FoBjcVJJNfFyzSJndPasf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLDjWe%2FbtsC0axIu4O%2FFoBjcVJJNfFyzSJndPasf1%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;777&quot; height=&quot;416&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3KT8O/btsCX4R3rI4/kUnvKzccqreAzWJnaSBuY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3KT8O/btsCX4R3rI4/kUnvKzccqreAzWJnaSBuY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3KT8O/btsCX4R3rI4/kUnvKzccqreAzWJnaSBuY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3KT8O%2FbtsCX4R3rI4%2FkUnvKzccqreAzWJnaSBuY1%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;773&quot; height=&quot;514&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 스펙은 다음 문단에 적을 테니 이번 문단에서는 &lt;b&gt;제가 실제로 사용하면서 느꼈던 장단점을 비교&lt;/b&gt; 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt; &lt;span style=&quot;text-align: start;&quot;&gt;BOSE QC2 이어버드&amp;nbsp;&lt;/span&gt; &lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 처음으로 구매한 제품은 BOSE QC2 이어버드 였습니다.이유는&amp;nbsp;소문으로만&amp;nbsp;듣던&amp;nbsp;강력한&amp;nbsp;노이즈&amp;nbsp;캔슬링이었습니다.&amp;nbsp; &lt;br /&gt;말&amp;nbsp;그대로&amp;nbsp;&lt;b&gt;노이즈&amp;nbsp;캔슬링&amp;nbsp;기능은&amp;nbsp;강력&amp;nbsp;&lt;/b&gt;했습니다.&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 data-ke-size=&quot;size16&quot;&gt;하지만&amp;nbsp;&lt;b&gt;단점은&amp;nbsp;비번한&amp;nbsp;고장과&amp;nbsp;스마트폰과의&amp;nbsp;연결성&lt;/b&gt;이었습니다. &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;b&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;다시&amp;nbsp;하는&amp;nbsp;방법을&amp;nbsp;사용&lt;/b&gt;했습니다. &lt;br /&gt;그리고&amp;nbsp;&lt;b&gt;강제적으로&amp;nbsp;리셋하는&amp;nbsp;버튼이&amp;nbsp;없어서&amp;nbsp;초기화를&amp;nbsp;할&amp;nbsp;수가&amp;nbsp;없습니다&lt;/b&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;다른&amp;nbsp;새&amp;nbsp;제품으로&amp;nbsp;교환해주었습니다. &lt;br /&gt;이때&amp;nbsp;&lt;b&gt;구매&amp;nbsp;당시&amp;nbsp;영수증이&amp;nbsp;없으면&amp;nbsp;교체가&amp;nbsp;안되니&amp;nbsp;주의하세요.&amp;nbsp;그리고&amp;nbsp;1년&amp;nbsp;내에&amp;nbsp;고장&amp;nbsp;날&amp;nbsp;경우만&amp;nbsp;교체&amp;nbsp;가능&amp;nbsp;합니다.&lt;/b&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt; 삼성 갤럭시 버즈2 프로&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;고장에&amp;nbsp;대한&amp;nbsp;불만으로&amp;nbsp;구매한&amp;nbsp;제품이&amp;nbsp;삼성&amp;nbsp;갤럭시&amp;nbsp;버즈2&amp;nbsp;였습니다.&amp;nbsp;우선&amp;nbsp;&lt;b&gt;장점은&amp;nbsp;가격이&amp;nbsp;보스에&amp;nbsp;비해&amp;nbsp;저렴&lt;/b&gt;했습니다.&amp;nbsp;다음으로&amp;nbsp;&lt;b&gt;삼성을&amp;nbsp;사용해서&amp;nbsp;그런지&amp;nbsp;페어링&amp;nbsp;굉장히&amp;nbsp;훌륭&lt;/b&gt;했습니다. 보스제품을&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단점은 확실히 보스 제품 보다는 노이즈 캔슬링이 약했습니다. &lt;/b&gt;다른 삼성의 이어버즈에 비해서 프로 버전은 노이즈 캔슬 기능이 좋아지기는 했으나 보스보다는 못했습니다.&amp;nbsp;&lt;b&gt;그래도&amp;nbsp;귀&amp;nbsp;안쪽으로&amp;nbsp;더&amp;nbsp;밀어&amp;nbsp;넣으니&amp;nbsp;상당히&amp;nbsp;좋은&amp;nbsp;효과의&amp;nbsp;노이캔슬링&amp;nbsp;효과&lt;/b&gt;를&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;고려해서&amp;nbsp;구매&amp;nbsp;하세요~!&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;갤럭시 버즈2 프로 vs 보스 QC 이어버드2 상세 스펙&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;u&gt;삼성 갤럭시 버즈2 프로&lt;/u&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVHJGW/btsCTYkMUWn/q8K9kfiMIVwCUhLhZlYHO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVHJGW/btsCTYkMUWn/q8K9kfiMIVwCUhLhZlYHO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVHJGW/btsCTYkMUWn/q8K9kfiMIVwCUhLhZlYHO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVHJGW%2FbtsCTYkMUWn%2Fq8K9kfiMIVwCUhLhZlYHO0%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;544&quot; height=&quot;800&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;u&gt;&lt;span style=&quot;text-align: start;&quot;&gt;BOSE QC2 이어버드&amp;nbsp;&lt;/span&gt;&lt;/u&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kSc5Q/btsCU19sTns/O77GSX1iekTPEoarJxaL9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kSc5Q/btsCU19sTns/O77GSX1iekTPEoarJxaL9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kSc5Q/btsCU19sTns/O77GSX1iekTPEoarJxaL9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkSc5Q%2FbtsCU19sTns%2FO77GSX1iekTPEoarJxaL9K%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;362&quot; height=&quot;204&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRutGh/btsC4pgnqAV/40eCjAKGch0MpNPnmPwq4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRutGh/btsC4pgnqAV/40eCjAKGch0MpNPnmPwq4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRutGh/btsC4pgnqAV/40eCjAKGch0MpNPnmPwq4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRutGh%2FbtsC4pgnqAV%2F40eCjAKGch0MpNPnmPwq4K%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;460&quot; height=&quot;110&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QflRZ/btsCX785rId/DKklxnRK6UWFqmHiobiRS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QflRZ/btsCX785rId/DKklxnRK6UWFqmHiobiRS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QflRZ/btsCX785rId/DKklxnRK6UWFqmHiobiRS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQflRZ%2FbtsCX785rId%2FDKklxnRK6UWFqmHiobiRS0%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;532&quot; height=&quot;438&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;갤럭시 버즈2 프로 보스 QC 이어버드2 쿠팡 최저가 링크&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 쿠팡에서 두 제품에 대해서 할인을 진행하고 있어서 링크 올립니다. 관심 있으시면 아래 링크 통해서 구경하시면 됩니다~!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;갤럭시는 &lt;u&gt;50프로 할인해서 138,310원에 판매&lt;/u&gt;하고 있고 보스는 &lt;u&gt;35% 할인해서 232,700원에 판매&lt;/u&gt;하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/blOgPg&quot;&gt;https://link.coupang.com/a/blOgPg&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704327911253&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시 버즈2 프로&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/blOgPg&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6675437089&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pDO0j/hyUXZrxPxT/06wYcrzfkMk8nOgFf9Jry1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=117_153_166_207&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/blOgPg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/blOgPg&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pDO0j/hyUXZrxPxT/06wYcrzfkMk8nOgFf9Jry1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=117_153_166_207');&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;삼성전자 갤럭시 버즈2 프로&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/blOg0l&quot;&gt;https://link.coupang.com/a/blOg0l&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704327949617&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;보스 QC 이어버드 2 블루투스 이어폰&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/blOg0l&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6776795202&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Bjmj6/hyUXYznl3W/0tWyepm7UKGGhHE70ASBXK/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/xoFPQ/hyUXWIky2Y/yDQsYoIoJ0OK6NKAJg6UBk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/blOg0l&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/blOg0l&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Bjmj6/hyUXYznl3W/0tWyepm7UKGGhHE70ASBXK/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/xoFPQ/hyUXWIky2Y/yDQsYoIoJ0OK6NKAJg6UBk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;보스 QC 이어버드 2 블루투스 이어폰&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt; &quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/786</guid>
      <comments>https://scribblinganything.tistory.com/786#entry786comment</comments>
      <pubDate>Thu, 4 Jan 2024 09:28:25 +0900</pubDate>
    </item>
    <item>
      <title>[C#] Public이란? 예제로 쉽게 이해하기(사용 이유)</title>
      <link>https://scribblinganything.tistory.com/785</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbCKgv/btsCScoNucJ/6v6vdTvSTUUG7HPkDDy7n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbCKgv/btsCScoNucJ/6v6vdTvSTUUG7HPkDDy7n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbCKgv/btsCScoNucJ/6v6vdTvSTUUG7HPkDDy7n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbCKgv%2FbtsCScoNucJ%2F6v6vdTvSTUUG7HPkDDy7n1%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;566&quot; height=&quot;566&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;[C#]&amp;nbsp;Public이란?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;C#에서&amp;nbsp;public은&amp;nbsp;가장&amp;nbsp;개방적인&amp;nbsp;접근&amp;nbsp;제한자로,&amp;nbsp;타입이나&amp;nbsp;멤버를&amp;nbsp;어디서나&amp;nbsp;접근&lt;/b&gt;할&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 data-ke-size=&quot;size16&quot;&gt;객체지향&amp;nbsp;언어의&amp;nbsp;정보&amp;nbsp;은닉&amp;nbsp;원칙에&amp;nbsp;따라&amp;nbsp;&lt;b&gt;기본적으로&amp;nbsp;멤버는&amp;nbsp;private으로&amp;nbsp;설정&lt;/b&gt;되지만,&amp;nbsp;&lt;b&gt;어셈블리&amp;nbsp;내부나&amp;nbsp;다른&amp;nbsp;어셈블리에서&amp;nbsp;접근해야&amp;nbsp;하는&amp;nbsp;경우에&amp;nbsp;public으로&amp;nbsp;변경&lt;/b&gt;합니다.&amp;nbsp;public은&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;오버로드할&amp;nbsp;때에도&amp;nbsp;필요합니다.&amp;nbsp;public&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;계좌의&amp;nbsp;잔액을&amp;nbsp;표시하는&amp;nbsp;메소드는&amp;nbsp;public으로&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;[C#] Public 예제로 쉽게 이해하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704026174566&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace PublicExample
{
    public class Car
    {
        // public 변수
        public string Color;

        // 생성자
        public Car(string color)
        {
            Color = color;
        }

        // public 메소드
        public void DisplayColor()
        {
            Console.WriteLine($&quot;이 차의 색상은 {Color}입니다.&quot;);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Car 객체 생성
            Car myCar = new Car(&quot;빨강&quot;);

            // public 메소드 호출
            myCar.DisplayColor();
        }
    }
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드에서 public 키워드는 다음과 같은 방식으로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Public 변수 (Color)&lt;/span&gt;: &lt;b&gt;public으로 선언된 변수는 클래스 외부에서도 접근&lt;/b&gt;할 수 있습니다. 여기서 Color는 Car 클래스의 인스턴스에서 어디서나 접근할 수 있는 속성입니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Public 생성자 (Car(string color))&lt;/span&gt;: &lt;b&gt;public 생성자는 클래스 외부에서 이 클래스의 인스턴스를 생성&lt;/b&gt;할 수 있게 해줍니다. 여기서 Car 클래스의 생성자는 외부에서 호출할 수 있으며, 색상을 매개변수로 받습니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Public 메소드 (DisplayColor()):&lt;/span&gt; &lt;b&gt;public 메소드는 클래스 외부에서 호출&lt;/b&gt;할 수 있습니다. DisplayColor() 메소드는 Car 클래스의 현재 색상을 콘솔에 출력합니다.&lt;/li&gt;
&lt;/ul&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;b&gt;예제에서&amp;nbsp;public&amp;nbsp;키워드는&amp;nbsp;Car&amp;nbsp;클래스의&amp;nbsp;멤버들이&amp;nbsp;클래스&amp;nbsp;외부에서&amp;nbsp;접근&amp;nbsp;가능하도록&amp;nbsp;만듭니다&lt;/b&gt;.&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 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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7qAfu/btsCTz4ZNEA/Kt4dB44hTzL3D7TIknde91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7qAfu/btsCTz4ZNEA/Kt4dB44hTzL3D7TIknde91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7qAfu/btsCTz4ZNEA/Kt4dB44hTzL3D7TIknde91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7qAfu%2FbtsCTz4ZNEA%2FKt4dB44hTzL3D7TIknde91%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;979&quot; height=&quot;512&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>C언어 C++ Programming/C#</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/785</guid>
      <comments>https://scribblinganything.tistory.com/785#entry785comment</comments>
      <pubDate>Thu, 4 Jan 2024 08:44:58 +0900</pubDate>
    </item>
    <item>
      <title>[C#]아두이노 시리얼 통신 GUI 만들기(Arduino, Serial Communication, 윈도우)</title>
      <link>https://scribblinganything.tistory.com/784</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eA8yL6/btsCK9y3LLg/fkUtPJbqoioPpV7oAPH4Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eA8yL6/btsCK9y3LLg/fkUtPJbqoioPpV7oAPH4Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eA8yL6/btsCK9y3LLg/fkUtPJbqoioPpV7oAPH4Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeA8yL6%2FbtsCK9y3LLg%2FfkUtPJbqoioPpV7oAPH4Uk%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;356&quot; height=&quot;343&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;C#으로 시리얼 GUI 만들기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 &lt;b&gt;C# 프로그래밍을 활용하여 Arduino에서 보내는 데이터를 읽는 간단한 GUI(Graphical User Interface) 프로그램을 만들 것입니다&lt;/b&gt;. 이 과정을 통해, Visual Studio에서 C#을 사용하는 기본적인 방법들을 살펴보겠습니다. 이 프로그램은 Arduino에서 센서 또는 다른 장치로부터 데이터를 받아, 사용자 친화적인 인터페이스에 표시할 것입니다.&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;C#은 .NET 프레임워크와 잘 통합되어 있으며, 이를 통해 강력하고 유연한 GUI 애플리케이션을 쉽게 개발할 수 있습니다. Visual Studio는 이러한 개발을 위한 다양한 도구와 라이브러리를 제공하여, 효율적인 코딩 환경을 조성합니다. 우리는 이번 프로젝트에서 Serial 통신을 사용하여 Arduino와 PC 간의 데이터 송수신을 구현할 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 핵심 단계는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Arduino 설정: 먼저 Arduino에 적절한 센서나 장치를 연결하고, 데이터를 보낼 수 있도록 코딩합니다.&lt;/li&gt;
&lt;li&gt;C# 프로젝트 설정: Visual Studio에서 C# Windows Forms 애플리케이션 프로젝트를 생성합니다.&lt;/li&gt;
&lt;li&gt;Serial 통신 구현: C#에서 SerialPort 클래스를 사용하여 Arduino와의 Serial 통신을 설정합니다.&lt;/li&gt;
&lt;li&gt;GUI 디자인: Windows Forms를 사용하여 데이터를 표시할 사용자 인터페이스를 디자인합니다.&lt;/li&gt;
&lt;li&gt;데이터 읽기 및 표시: Arduino에서 보낸 데이터를 읽고, 그것을 GUI에 실시간으로 표시합니다.&lt;/li&gt;
&lt;/ol&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 data-ke-size=&quot;size16&quot;&gt;이 프로세스를 통해, C#과 Arduino의 통합 사용, Serial 통신의 기초, 그리고 GUI 기반 애플리케이션 개발에 대한 이해를 깊게 할 수 있을 것입니다. 이러한 기술은 다양한 종류의 프로젝트와 애플리케이션에서 활용될 수 있으며, 특히 IoT(Internet of Things) 관련 작업에 유용하게 사용될 수 있습니다.&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;C#으로 시리얼 GUI 만들기 실습&lt;/span&gt;&lt;/b&gt;&lt;/h3&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 data-ke-size=&quot;size16&quot;&gt;1. 아래와 같이 코드를 작성하고 아두이노 보드에 업로드 합니다. 0.5초 간격으로 hello와 숫자를 보내 줍니다. 이&amp;nbsp;코드를&amp;nbsp;아두이노&amp;nbsp;보드에&amp;nbsp;업로드하면,&amp;nbsp;아두이노는&amp;nbsp;연결된&amp;nbsp;컴퓨터의&amp;nbsp;시리얼&amp;nbsp;모니터를&amp;nbsp;통해&amp;nbsp;&quot;hello&quot;와&amp;nbsp;함께&amp;nbsp;순차적인&amp;nbsp;숫자를&amp;nbsp;보여줄&amp;nbsp;것입니다.&amp;nbsp;숫자는&amp;nbsp;각&amp;nbsp;반복마다&amp;nbsp;1씩&amp;nbsp;증가하며,&amp;nbsp;각&amp;nbsp;메시지&amp;nbsp;사이에는&amp;nbsp;0.5초의&amp;nbsp;간격이&amp;nbsp;있을&amp;nbsp;것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1703742893388&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void setup() {
  // 시리얼 통신을 시작합니다. 9600 보드레이트로 설정합니다.
  Serial.begin(9600);
}

void loop() {
  static int counter = 0; // 숫자를 저장할 변수를 선언합니다.

  // &quot;hello&quot;와 순차적인 숫자를 시리얼 포트를 통해 보냅니다.
  Serial.print(&quot;hello &quot;);
  Serial.println(counter);

  counter++; // 숫자를 1 증가시킵니다.
  
  delay(500); // 0.5초 동안 대기합니다.
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 변수에 static을 붙힌 이유는 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변수의 지속성: loop() 함수는 아두이노 프로그램이 실행되는 동안 지속적으로 반복 실행&lt;/b&gt;됩니다. static을 사용함으로써, counter 변수는 loop() 함수가 새로 시작될 때마다 &lt;b&gt;초기화되지 않고, 마지막으로 저장된 값을 유지&lt;/b&gt;합니다. 이것은 counter가 각 반복에서 1씩 증가할 수 있도록 해줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리 절약: static 변수는 프로그램의 전역 메모리 영역에 저장&lt;/b&gt;됩니다. 함수 내에 static으로 선언된 경우, 이 변수는 프로그램 실행 중 한 번만 메모리 공간을 할당받고, 함수 호출이 끝난 후에도 그 메모리 공간을 계속 차지합니다. 이는 프로그램의 효율적인 메모리 사용에 도움이 됩니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Visual Studio를 실행하고 New Project에서 Windows Forms App 을 아래 그림과 같이 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1573&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWmsIH/btsCP4p0bgW/FpK4oDk0QT0URCXq8tg4P1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWmsIH/btsCP4p0bgW/FpK4oDk0QT0URCXq8tg4P1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWmsIH/btsCP4p0bgW/FpK4oDk0QT0URCXq8tg4P1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWmsIH%2FbtsCP4p0bgW%2FFpK4oDk0QT0URCXq8tg4P1%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;1573&quot; height=&quot;366&quot; data-origin-width=&quot;1573&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아래와 같이 SerialPort를 Toolbox에서 선택하고 더블 클릭하면 해당 속성이 생기고 우측 하단과 가팅 Properties 창에서 확인이 가능 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHaJhP/btsCG3Glvwu/6hrKO6I7I77ALFg70PKGok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHaJhP/btsCG3Glvwu/6hrKO6I7I77ALFg70PKGok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHaJhP/btsCG3Glvwu/6hrKO6I7I77ALFg70PKGok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHaJhP%2FbtsCG3Glvwu%2F6hrKO6I7I77ALFg70PKGok%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;1920&quot; height=&quot;1040&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;4. Toolbox에서 Textbox를 선택해서 더블 클릭하거나 드래그로 원하는 위치에 텍스트 창을 입력 합니다. 그리고 우측 하단에 Text에 COM을 미리 입력 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdS1yP/btsCKseBKtq/kVPkLLU7pC9GOWHCZpohW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdS1yP/btsCKseBKtq/kVPkLLU7pC9GOWHCZpohW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdS1yP/btsCKseBKtq/kVPkLLU7pC9GOWHCZpohW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdS1yP%2FbtsCKseBKtq%2FkVPkLLU7pC9GOWHCZpohW0%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;1920&quot; height=&quot;1040&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 툴박스에서 버튼을 가져와서 아래와 같이 붙여 줍니다.&amp;nbsp; 속성에서 text 값을 &quot;연결&quot; 로 바꿔 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tqa5A/btsCN1N3S9Q/Gvebx5x0QH8UQffbKSVCSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tqa5A/btsCN1N3S9Q/Gvebx5x0QH8UQffbKSVCSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tqa5A/btsCN1N3S9Q/Gvebx5x0QH8UQffbKSVCSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftqa5A%2FbtsCN1N3S9Q%2FGvebx5x0QH8UQffbKSVCSk%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;1920&quot; height=&quot;1040&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;6. 아래 그림과 같이 이번에는 Listbox를 툴박스에서 가져옵니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2cH6z/btsCMyL70wL/9kMKQVECGeqOhtOkHMzb6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2cH6z/btsCMyL70wL/9kMKQVECGeqOhtOkHMzb6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2cH6z/btsCMyL70wL/9kMKQVECGeqOhtOkHMzb6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2cH6z%2FbtsCMyL70wL%2F9kMKQVECGeqOhtOkHMzb6K%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;1920&quot; height=&quot;1040&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;7. 버튼을 더블 클릭하면 아래와 같이 버튼 클릭에 대한 함수가 cs 파일에 자동으로 생성 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1703745093442&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;8. 아래 그림과 같이 serialPort1을 클릭하고 Property에서 DataRecived를 클릭하면 cs 파일에 해당 함수가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xEudH/btsCLrmbbLH/NKkLwKKLpGzrKiqPpWAjJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xEudH/btsCLrmbbLH/NKkLwKKLpGzrKiqPpWAjJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xEudH/btsCLrmbbLH/NKkLwKKLpGzrKiqPpWAjJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxEudH%2FbtsCLrmbbLH%2FNKkLwKKLpGzrKiqPpWAjJ1%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;1920&quot; height=&quot;1040&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1040&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;9. 앞서 5번과 마찬가지로 Disconnect를 위한 버튼을 만들어 줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 최종적으로 아래와 같이 코드를 작성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1704189735845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;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;
using System.IO.Ports; // SerialPort를 사용하기 위한 네임스페이스

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

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string port = textBox1.Text;
            serialPort1.PortName = port;

            if (serialPort1.IsOpen)
            {

            }
            else
            {
                serialPort1.Open();
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                string input = serialPort1.ReadLine();
                string currentTime = DateTime.Now.ToString(&quot;yyyy-MM-dd HH:mm:ss&quot;); // 현재 시간을 문자열로 가져옵니다.

                // listBox1에 현재 시간과 입력값을 추가합니다. UI 스레드에서 실행되어야 합니다.
                this.Invoke((MethodInvoker)delegate
                {
                    listBox1.Items.Add($&quot;{currentTime}: {input}&quot;);
                });
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
            }
        }
    }
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 아래와 같이 결과가 나왔음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kVKwO/btsCVGiXHVG/t0npCXOh1tVKceXKJ1rdm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kVKwO/btsCVGiXHVG/t0npCXOh1tVKceXKJ1rdm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVKwO/btsCVGiXHVG/t0npCXOh1tVKceXKJ1rdm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkVKwO%2FbtsCVGiXHVG%2Ft0npCXOh1tVKceXKJ1rdm0%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;802&quot; height=&quot;482&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;해당 프로젝트는 아래 링크를 통해 다운 받으시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cjj5D4/btsCZ6uEjkx/zgJLtKrPVXONKgBkEVHVZ1/WindowsFormsApp1.zip?attach=1&amp;amp;knm=tfile.zip&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;WindowsFormsApp1.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.06MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C언어 C++ Programming</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/784</guid>
      <comments>https://scribblinganything.tistory.com/784#entry784comment</comments>
      <pubDate>Wed, 3 Jan 2024 08:52:13 +0900</pubDate>
    </item>
    <item>
      <title>기업 고정 자산 비율이란? 이상적인 비율(설비 투자, 중소기업, 중견기업, 고정 장기적합률)</title>
      <link>https://scribblinganything.tistory.com/783</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;790&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn7BOA/btsCODOmWlj/RvZ5Xkx0vfstMCh24JNlRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn7BOA/btsCODOmWlj/RvZ5Xkx0vfstMCh24JNlRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn7BOA/btsCODOmWlj/RvZ5Xkx0vfstMCh24JNlRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn7BOA%2FbtsCODOmWlj%2FRvZ5Xkx0vfstMCh24JNlRK%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;805&quot; height=&quot;790&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;기업&amp;nbsp;고정&amp;nbsp;자산&amp;nbsp;비율이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;고정 비율은 회사의 재무 건전성과 효율적인 자산 운용을 측정하는 중요한 지표 중 하나&lt;/b&gt;입니다. 이 비율은 고정자산과 자기자본의 관계를 통해 산출됩니다. 공식은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;고정비율(%) = (고정자산/자기자본) &amp;times; 100&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&amp;nbsp;&lt;b&gt;고정자산은&amp;nbsp;장기간&amp;nbsp;사용되는&amp;nbsp;자산을&amp;nbsp;말하며,&amp;nbsp;예를&amp;nbsp;들면&amp;nbsp;건물,&amp;nbsp;기계,&amp;nbsp;장비&amp;nbsp;등이&amp;nbsp;해당&lt;/b&gt;됩니다.&amp;nbsp;&lt;b&gt;자기자본은&amp;nbsp;회사가&amp;nbsp;소유한&amp;nbsp;자본으로,&amp;nbsp;주식자본과&amp;nbsp;유보이익&amp;nbsp;&lt;/b&gt;등을 포함합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;고정 비율의 중요성&lt;/u&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;재무 건정성&lt;/b&gt;: 고정 비율이 높다는 것은 회사가 자기자본보다 많은 고정자산을 보유하고 있음을 의미합니다. 이는 회사가 외부 부채에 의존하지 않고 자체 자본으로 자산을 충당하고 있음을 나타내는 건전한 신호입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유동성 위험&lt;/b&gt;: 반대로, 고정 비율이 지나치게 높으면 회사가 너무 많은 고정자산에 투자하여 유동성이 부족할 수 있음을 의미합니다. 이는 자금 경색과 같은 재무적 위험을 초래할 수 있습니다.&lt;/li&gt;
&lt;/ol&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;한국의 소기업, 중기업, 중견기업의 이상적인 고정 비율&lt;/u&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;각 기업 유형에 따른 이상적인 고정 비율은 여러 요인에 따라 다를 수 있습니다. 일반적으로, 선진국의 기준으로 100%가 기준이 되지만, 이는 산업과 기업의 특성에 따라 달라질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;소기업&lt;/b&gt;: 소기업은 일반적으로 자본이 제한적이므로, 고정 비율을 낮게 유지하는 것이 좋습니다. 이는 유동성을 확보하고, 금융 위험을 줄이는 데 도움이 됩니다. 예를 들어, &lt;b&gt;50% 미만의 고정 비율이 바람직할 수 있습니다&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중기업&lt;/b&gt;: 중기업은 더 많은 자본을 가지고 있지만 여전히 유동성 관리가 중요합니다. 고정 비율은 &lt;b&gt;약 60-80% 범위가 적절할 수 있습니다.&lt;/b&gt; 이 범위는 자본을 효과적으로 사용하면서도 재무적 안정성을 유지할 수 있도록 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중견기업&lt;/b&gt;: 중견기업은 더 큰 규모와 안정된 자본 구조를 가지고 있으므로, 고정 비율이 더 높아도 됩니다. 예를 들어, &lt;b&gt;80-100% 범위의 고정 비율이 적합&lt;/b&gt;할 수 있습니다. 이는 장기 자산에 대한 투자가 더 많다는 것을 반영합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정 비율은 기업의 재무 건전성과 장기 자산 운용 능력을 평가하는 데 중요한 지표입니다. 하지만 이상적인 고정 비율은 기업의 규모, 산업, 운영 전략 등 다양한 요소에 따라 달라질 수 있습니다. 따라서 &lt;b&gt;이 지표를 해석할 때는 기업의 전반적인 재무 상황과 시장 환경을 고려&lt;/b&gt;해야 합니다.&lt;/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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;고정 장기적합률이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;고정장기적합률(%)&amp;nbsp;=&amp;nbsp;(고정자산/(자기자본+고정부채))&amp;nbsp;x&amp;nbsp;100&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;고정 장기적합률은 기업의 재무 안정성을 평가하는 데 사용되는 중요한 지표 중 하나입니다. &lt;b&gt;이 비율은 기업이 장기적으로 얼마나 재무적으로 안정&lt;/b&gt;적인지를 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;고정 장기적합률의 구성 요소&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;고정자산&lt;/b&gt;: 장기간 사용되는 자산으로, 건물, 기계, 장비 등이 여기에 해당합니다. 이러한 자산은 일반적으로 기업의 핵심 운영에 중요한 역할을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자기자본&lt;/b&gt;: 회사가 소유한 자본으로, 주식자본, 유보이익 등을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고정부채&lt;/b&gt;: 장기간에 걸쳐 상환되는 부채로, 장기차입금이나 사채 등이 여기에 포함됩니다. 이는 비교적 안정된 재원으로 간주되며, 회사의 장기적인 자금 조달 계획에 중요한 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;고정 장기적합률의 의미와 중요성&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;재무 안정성 평가&lt;/b&gt;: 이 비율은 고정자산이 자기자본과 고정부채를 통해 얼마나 잘 조달되고 있는지를 보여줍니다. 적절한 수준의 고정 장기적합률은 기업이 장기적으로 안정적인 재무 구조를 가지고 있음을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;위험 평가&lt;/b&gt;: 100% 이상의 고정 장기적합률은 기업이 고정자산을 위해 유동부채를 포함한 외부 자금에 의존하고 있음을 의미합니다. 이는 재무적 위험을 증가시킬 수 있으며, 유동성 문제나 금융 비용 증가로 이어질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;투자 및 운영 전략&lt;/b&gt;: 이 비율은 기업의 투자 및 운영 전략에 대한 통찰력을 제공합니다. 예를 들어, 비율이 낮으면 기업이 보수적인 자산 운용 전략을 채택하고 있을 가능성이 있으며, 높은 비율은 공격적인 성장 전략을 나타낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여러가지공부/기업운용</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/783</guid>
      <comments>https://scribblinganything.tistory.com/783#entry783comment</comments>
      <pubDate>Tue, 2 Jan 2024 08:48:41 +0900</pubDate>
    </item>
    <item>
      <title>[C#]Visual Studio로 Hello World 출력하기(기본 예제, .Net Core 개념)</title>
      <link>https://scribblinganything.tistory.com/782</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0mkUK/btsCX70YdqJ/XzKRp0HW5FgY5quSjkc86K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0mkUK/btsCX70YdqJ/XzKRp0HW5FgY5quSjkc86K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0mkUK/btsCX70YdqJ/XzKRp0HW5FgY5quSjkc86K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0mkUK%2FbtsCX70YdqJ%2FXzKRp0HW5FgY5quSjkc86K%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;394&quot; height=&quot;399&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Visual Studio에서 Console App을 .Net 실행하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘솔 앱은 CLI에서&amp;nbsp;&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;1. 아래와 같이 Console app을 선택해서 new project를 만듭니다. 아래 Console은 윈도우 환경 뿐만 아니라 Mac이나 Linux에서도 동작하는 프로젝트입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7MsQ9/btsCMpQq5sI/13xGq8K8kbi59T6n7MEx21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7MsQ9/btsCMpQq5sI/13xGq8K8kbi59T6n7MEx21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7MsQ9/btsCMpQq5sI/13xGq8K8kbi59T6n7MEx21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7MsQ9%2FbtsCMpQq5sI%2F13xGq8K8kbi59T6n7MEx21%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;1570&quot; height=&quot;462&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;2. 이미 아래와 같이 예제 코드가 만들어져 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1704023549384&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// See https://aka.ms/new-console-template for more information
Console.WriteLine(&quot;Hello, World!&quot;);&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;3. F5로 실행을 하면 아래와 같은 결과를 얻을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHKlc/btsCMpv5Qo3/nXcmShyktUR1iyqYe2FCRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHKlc/btsCMpv5Qo3/nXcmShyktUR1iyqYe2FCRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHKlc/btsCMpv5Qo3/nXcmShyktUR1iyqYe2FCRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHKlc%2FbtsCMpv5Qo3%2FnXcmShyktUR1iyqYe2FCRK%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;979&quot; height=&quot;512&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;윈도우 Visual Studio에서 Console App을 .NET Framework 실행하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 이번에는 New Project를 만드는데 아래와 같이 .NET framwork 콘솔을 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbrA6A/btsCP3FUltI/SV4GLkH2ADkviXRrrl8hdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbrA6A/btsCP3FUltI/SV4GLkH2ADkviXRrrl8hdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbrA6A/btsCP3FUltI/SV4GLkH2ADkviXRrrl8hdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbrA6A%2FbtsCP3FUltI%2FSV4GLkH2ADkviXRrrl8hdK%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;1537&quot; height=&quot;465&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;2. 기본 예제 코드에 아래와 같이 Hello World만 추가 하였습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1704024041615&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(&quot;Hello, World!&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 결과는 동일하게 나옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LyG3c/btsCN7BXw9g/9jhMRkFXNVbkl84OmNhvmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LyG3c/btsCN7BXw9g/9jhMRkFXNVbkl84OmNhvmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LyG3c/btsCN7BXw9g/9jhMRkFXNVbkl84OmNhvmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLyG3c%2FbtsCN7BXw9g%2F9jhMRkFXNVbkl84OmNhvmk%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;979&quot; height=&quot;512&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;.NET Framework 과 .NET의 차이점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EeddB/btsCTU81MwC/CFA7UJVM8l3C8iGytz9QCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EeddB/btsCTU81MwC/CFA7UJVM8l3C8iGytz9QCK/img.jpg&quot; data-alt=&quot;https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet-framework#:~:text=Some%20key%20differences%20include%3A,Framework%20only%20runs%20on%20Windows.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EeddB/btsCTU81MwC/CFA7UJVM8l3C8iGytz9QCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEeddB%2FbtsCTU81MwC%2FCFA7UJVM8l3C8iGytz9QCK%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;636&quot; height=&quot;650&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet-framework#:~:text=Some%20key%20differences%20include%3A,Framework%20only%20runs%20on%20Windows.&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;p data-ke-size=&quot;size16&quot;&gt;.NET은 다양한 애플리케이션을 개발할 수 있는 도구, 프로그래밍 언어, 라이브러리로 구성된 플랫폼입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;. NET Framework는 원래의 .NET 구현으로 윈도우에서 웹사이트, 서비스, 데스크탑 앱을 실행&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;.NET(이전에 .NET Core로 불림)은 크로스플랫폼 구현으로, 웹사이트, 서비스, 콘솔 앱을 윈도우, 리눅스, macOS에서 실행&lt;/b&gt;할 수 있습니다. Xamarin/Mono는 iOS, 안드로이드 등 모바일 운영체제에서 앱을 실행하는 .NET 구현입니다.&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;.NET Standard는 다양한 .NET 구현에서 공통 API를 명시한 사양입니다. .NET Framework의 핵심 구성 요소는 Common Language Runtime과 .NET Framework Class Library로, 각각 애플리케이션 실행 관리와 API 제공을 담당합니다.&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 data-ke-size=&quot;size16&quot;&gt;일반적으로&amp;nbsp;&lt;b&gt;.NET을&amp;nbsp;사용하는&amp;nbsp;것이&amp;nbsp;더&amp;nbsp;좋을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;.NET은&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;.NET&amp;nbsp;Framework는&amp;nbsp;오직&amp;nbsp;Windows에서만&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다&lt;/b&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;.NET을&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;기술을&amp;nbsp;선택하는&amp;nbsp;것이&amp;nbsp;중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C언어 C++ Programming/C#</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/782</guid>
      <comments>https://scribblinganything.tistory.com/782#entry782comment</comments>
      <pubDate>Mon, 1 Jan 2024 10:51:27 +0900</pubDate>
    </item>
    <item>
      <title>전 회사의 영업 비밀 누출 관련 대응법(법률, 조치 사항,&amp;quot;부정경쟁방지 및 영업비밀보호에 관한 법률&amp;quot;의 제18조 제2항)</title>
      <link>https://scribblinganything.tistory.com/781</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOELU/btsCWKkuzbg/kiwjlQxsdUzKCaHvQMp1T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOELU/btsCWKkuzbg/kiwjlQxsdUzKCaHvQMp1T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOELU/btsCWKkuzbg/kiwjlQxsdUzKCaHvQMp1T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOELU%2FbtsCWKkuzbg%2FkiwjlQxsdUzKCaHvQMp1T0%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;395&quot; height=&quot;391&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;전 회사의 영업 비밀 누출 관련 대응법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;전 직장의 자료를 이용하여 영업하는 행위는 여러 법적 문제를 야기할 수 있습니다. 이러한 상황에서 가장 중요한 개념은 '영업비밀'입니다. 영업비밀은 기업이 경제적 가치를 지닌 기술적이거나 경영상의 정보를 비밀로 관리하는 것을 말하며, 이러한 영업비밀은 &lt;b&gt;비밀성, 경제적 유용성, 비밀관리성의 세 가지 요건을 충족해야 법적 보호를 받을 수 있습니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;비밀성(Confidentiality)&lt;/b&gt;: 영업비밀은 대중에게 공개되지 않은 상태여야 하며, 제한된 범위의 사람들만 알고 있어야 합니다. 이는 해당 정보가 비밀로 유지되어야 한다는 것을 의미합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경제적 유용성(Economic Value)&lt;/b&gt;: 이 정보가 경쟁 우위를 제공하거나, 그 정보를 얻기 위해 상당한 노력이나 비용이 소요되어야 합니다. 즉, 해당 정보가 경제적 가치를 지녀야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비밀관리성(Secrecy Management)&lt;/b&gt;: 기업은 영업비밀이 외부로 유출되지 않도록 관리하기 위해 적절한 조치를 취해야 합니다. 이는 비밀번호 설정, 접근 제한, 비밀 준수 의무의 부과 등을 포함할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;전 직장의 자료를 이용하여 영업하는 행위는 이러한 영업비밀을 무단으로 사용하는 것으로 간주될 수 있으며, 법적 처벌 대상이 될 수 있습니다. 부정경쟁방지 및 영업비밀보호에 관한 법률에 따르면, 영업비밀을 무단으로 사용하거나 누설한 자는 형사처벌을 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, &lt;span style=&quot;color: #ee2323;&quot;&gt;기업은 재직 중이나 퇴직 후에도 영업비밀을 누설하거나 사용하지 않겠다는 서약을 직원에게 받는 것이 좋습니다. 이러한 서약은 만약의 법적 분쟁에서 기업에 유리한 증거&lt;/span&gt;가 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로,&amp;nbsp;전&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;수&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;/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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;부정경쟁방지&amp;nbsp;및&amp;nbsp;영업비밀보호에&amp;nbsp;관한&amp;nbsp;법률&amp;nbsp;제18조&amp;nbsp;제2항&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB6fNZ/btsCRivSYmd/p15kRocj9OhGjPX38ecP3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB6fNZ/btsCRivSYmd/p15kRocj9OhGjPX38ecP3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB6fNZ/btsCRivSYmd/p15kRocj9OhGjPX38ecP3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB6fNZ%2FbtsCRivSYmd%2Fp15kRocj9OhGjPX38ecP3k%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;387&quot; height=&quot;391&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;부정경쟁방지 및 영업비밀보호에 관한 법률&quot;의 제18조 제2항은 영업비밀의 불법적 사용 및 누설에 대한 처벌을 규정하고 있습니다. &lt;b&gt;이 조항은 한국의 법률 체계 내에서 기업의 핵심적인 경쟁력인 영업비밀을 보호하기 위해 마련되었으며, 영업비밀의 무단 사용이나 누설에 대한 법적 제재를 명시&lt;/b&gt;하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로, 이 조항은 다음과 같은 상황을 규정하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;불법적 사용 또는 누설&lt;/b&gt;: 이 조항에 따르면, 어떤 개인이나 조직이 불법적인 방법으로 기업의 영업비밀을 사용하거나 제3자에게 누설한 경우, 이는 법적으로 처벌받을 수 있는 행위로 간주됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;부정한 이익 또는 손해 목적&lt;/b&gt;: 영업비밀을 사용하거나 누설하는 행위가 부정한 이익을 얻기 위함이거나, 해당 기업에 손해를 입히려는 목적으로 이루어진 경우, 특히 중요하게 다뤄집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형사처벌&lt;/b&gt;: 이 조항에 따라 영업비밀을 불법적으로 사용하거나 누설한 개인이나 조직은 형사처벌을 받을 수 있습니다. 이는 벌금이나 징역으로 이어질 수 있으며, 영업비밀의 중요성과 누설로 인한 피해 정도에 따라 처벌의 수준이 결정됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 법률은 기업들이 자신들의 경쟁력을 유지하고, 영업비밀이 부정하게 사용되는 것을 방지하기 위한 중요한 수단&lt;/b&gt;입니다. 따라서 기업은 자사의 영업비밀을 적절히 관리하고 보호하기 위해 필요한 조치를 취해야 하며, 이를 위반하는 행위에 대해 강력한 법적 조치를 취할 수 있습니다.&lt;/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;개인이나&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;그렇지&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;법적&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여러가지공부/기업운용</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/781</guid>
      <comments>https://scribblinganything.tistory.com/781#entry781comment</comments>
      <pubDate>Sun, 31 Dec 2023 16:26:51 +0900</pubDate>
    </item>
    <item>
      <title>[Python] tkinter로 상태창 만들고 상태 업데이트 예제 실습(Log, Status window, update, 파이썬)</title>
      <link>https://scribblinganything.tistory.com/780</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzLWGj/btsCkp3pmmb/XFcKWonQ4kEXDKw890CUK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzLWGj/btsCkp3pmmb/XFcKWonQ4kEXDKw890CUK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzLWGj/btsCkp3pmmb/XFcKWonQ4kEXDKw890CUK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzLWGj%2FbtsCkp3pmmb%2FXFcKWonQ4kEXDKw890CUK1%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;381&quot; height=&quot;386&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;tkinter로&amp;nbsp;상태창&amp;nbsp;만들고&amp;nbsp;상태&amp;nbsp;업데이트&amp;nbsp;예제&amp;nbsp;실습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tkinter를 사용하여 4개의 라벨(Label)에 상태 업데이트를 표시하고, 라벨이 모두 차면 가장 마지막에 작성한 로그 값을 Overwrite하는 예제를 구현해보겠습니다.&lt;br /&gt;&lt;br /&gt;1. 4개의 라벨을 생성하여 상태를 표시합니다. &lt;br /&gt;2. 상태가 바뀔 때마다 새로운 상태를 라벨에 업데이트합니다. &lt;br /&gt;3. 4개의 라벨이 모두 차면, 가장 오래된 라벨부터 새로운 상태로 덮어씁니다.&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 data-ke-size=&quot;size16&quot;&gt;예제 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1703049049559&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import tkinter as tk

class StatusDisplay:
    def __init__(self, root):
        self.root = root
        self.labels = [tk.Label(root, text=f&quot;Status {i+1}: &quot;, width=20) for i in range(4)]
        for label in self.labels:
            label.pack()

        self.current_label_index = 0

        # 버튼 추가
        self.update_button = tk.Button(root, text=&quot;Update Status&quot;, command=self.update_status)
        self.update_button.pack()

        # 상태 업데이트 카운터
        self.update_count = 0

    def update_status(self):
        new_status = f&quot;Status updated {self.update_count + 1}&quot;
        self.labels[self.current_label_index].config(text=new_status)

        # 다음 라벨로 이동하고 카운터 증가
        self.current_label_index = (self.current_label_index + 1) % len(self.labels)
        self.update_count += 1

# Tkinter 윈도우 생성
root = tk.Tk()
root.title(&quot;Status Update Example&quot;)

app = StatusDisplay(root)

root.mainloop()&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DTP3g/btsCjXlPeSv/zWzkskRSeekN7GBjklAp31/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DTP3g/btsCjXlPeSv/zWzkskRSeekN7GBjklAp31/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DTP3g/btsCjXlPeSv/zWzkskRSeekN7GBjklAp31/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/DTP3g/btsCjXlPeSv/zWzkskRSeekN7GBjklAp31/img.gif&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;338&quot; height=&quot;293&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 주석&amp;gt;&amp;gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;6~8번 라인을 통해서 초기에 Statude 1~4번 값이 표기 됩니다.&lt;/li&gt;
&lt;li&gt;13번 라인을 통해서 &quot;update status&quot; 버튼을 클릭하면 &quot; update_status &quot; 함수가 실행됩니다.&lt;/li&gt;
&lt;li&gt;19~25번 라인을 통해서 함수가 실행할때마다 count 값을 증가해서 전달 합니다. 이때 label 값은 class내에서 선언이 되어 있어서 update가 가능 합니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;예제 코드 다운로드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/RRObb/btsCoyY6Ka7/AFPRwypSkwHhZts4kb6xhk/test01.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;test01.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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬(Python)/tkinter</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/780</guid>
      <comments>https://scribblinganything.tistory.com/780#entry780comment</comments>
      <pubDate>Thu, 21 Dec 2023 08:35:03 +0900</pubDate>
    </item>
    <item>
      <title>[빔 프로젝터] 삼성 더 프리스타일 제품 실제 사용 리뷰(Beam Projector, Samsung The Freestyle, Review, 최저가)</title>
      <link>https://scribblinganything.tistory.com/779</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;403&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J65iL/btsCpzKyYa7/LswkE9n2Y8Bc0CWyfS33m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J65iL/btsCpzKyYa7/LswkE9n2Y8Bc0CWyfS33m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J65iL/btsCpzKyYa7/LswkE9n2Y8Bc0CWyfS33m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ65iL%2FbtsCpzKyYa7%2FLswkE9n2Y8Bc0CWyfS33m0%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;508&quot; height=&quot;403&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;403&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;삼성&amp;nbsp;더&amp;nbsp;프리스타일&amp;nbsp;제품&amp;nbsp;실제&amp;nbsp;사용&amp;nbsp;리뷰&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;삼성의 &quot;더 프리스타일&quot;은 집안 어디서나 사용할 수 있는 혁신적인 LED 프로젝터입니다. 이 제품은 기존의 프로젝터와 다르게, 작은 배럴 모양의 본체와 &lt;b&gt;180도 회전이 가능한 지지 구조를 특징&lt;/b&gt;으로 합니다. 이를 통해 사용자는 다양한 각도와 위치에서 영상을 투사할 수 있으며, 심지어 천장에도 투사가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 프리스타일의 다재다능함은 여기서 그치지 않습니다. 내장된 와이파이와 스마트 TV 시스템을 통해, 다양한 스트리밍 서비스를 즐길 수 있으며, &lt;b&gt;삼성의 Bixby 시스템을 통한 음성 제어&lt;/b&gt;도 가능합니다. 또한, 이 제품은 &lt;b&gt;360도 사운드 시스템&lt;/b&gt;을 갖추고 있어, 프로젝터 자체가 스마트 스피커로도 사용될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 프로젝터는 휴대성도 강조되어, 배터리 팩 액세서리를 통해 전원 콘센트가 없는 곳에서도 사용&lt;/b&gt;할 수 있습니다. 이는 캠핑이나 야외 활동에도 적합한 특성입니다. 또한, &lt;b&gt;고해상도의 1080p 디스플레이와 HDR 지원&lt;/b&gt;을 통해 뛰어난 화질을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더&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;기능들은&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;매력적인&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 삼성 핸드폰을 사용하면 SmartThings 앱을 사용해서 아래처럼 리모콘으로 빔을 제어할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx984Q/btsCpeGBik9/ZmB78ksTscyD3UKJ6NCTc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx984Q/btsCpeGBik9/ZmB78ksTscyD3UKJ6NCTc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx984Q/btsCpeGBik9/ZmB78ksTscyD3UKJ6NCTc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx984Q%2FbtsCpeGBik9%2FZmB78ksTscyD3UKJ6NCTc1%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;378&quot; height=&quot;811&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2TUta/btsCkl1FFt0/joftwmkpZ3YKKBNpZqcuxK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2TUta/btsCkl1FFt0/joftwmkpZ3YKKBNpZqcuxK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2TUta/btsCkl1FFt0/joftwmkpZ3YKKBNpZqcuxK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/2TUta/btsCkl1FFt0/joftwmkpZ3YKKBNpZqcuxK/img.gif&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;685&quot; height=&quot;384&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;위 그림은 제가 애들 방에서 틀어주는 장면인데 대충 거리만 조절해도 &lt;span style=&quot;color: #ee2323;&quot;&gt;Freestyle이 알아서 초점이나 벽면에 사각형 모양을 맞춰&lt;/span&gt; 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eCQbzj/btsCpgRWXH5/ke8bbOSx37uPa2JaoXKNXk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eCQbzj/btsCpgRWXH5/ke8bbOSx37uPa2JaoXKNXk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eCQbzj/btsCpgRWXH5/ke8bbOSx37uPa2JaoXKNXk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/eCQbzj/btsCpgRWXH5/ke8bbOSx37uPa2JaoXKNXk/img.gif&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;685&quot; height=&quot;384&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 화면은 애들이 정말 좋아하는 만화영화인데 제가 gif 로 만들다 보니 화질이 떨어졌는데 실제 화질은 좋습니다. 그리고 netflix, coupang play, amazon, disney 등 다 지원 됩니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;기본 화면은 삼성 일반 스마트 티비와 똑같이 지원&lt;/span&gt; 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;삼성 더 프리스타일 쿠팡 최저가&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 제품에 관심 있으시면 아래 링크 통해서 구경 해보세요. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 &lt;span style=&quot;color: #ee2323;&quot;&gt;12프로 할인해서 673,300원에 판매 중&lt;/span&gt;입니다. 저는 참고로 백만원 넘게 써서 구매했어요....ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdx9J&quot;&gt;https://link.coupang.com/a/bkdx9J&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1703069912728&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 가정용 캠핑 미니 빔 프로젝터 프리스타일&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bkdx9J&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7449994334&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBU7Pt/hyUPN5i4Gh/lDCBOeb7hmjk71fmhhhZKk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cjtJt7/hyUPDn4zpD/TtYy6GLBC1pYKw5XbtShaK/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdx9J&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bkdx9J&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBU7Pt/hyUPN5i4Gh/lDCBOeb7hmjk71fmhhhZKk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cjtJt7/hyUPDn4zpD/TtYy6GLBC1pYKw5XbtShaK/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 가정용 캠핑 미니 빔 프로젝터 프리스타일&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크는 더프리스타일과 배터리까지 해서 같이 파는 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdwna&quot;&gt;https://link.coupang.com/a/bkdwna&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1703069718777&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성 더프리스타일 SP-LSBP3LAXKR 본체+배터리+케이스+스킨 패키지 새상품 (정품)&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bkdwna&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7356148976&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bK5yFT/hyUPzFYEov/GxDYljNHH9og7KNZy0zMd0/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/G9V3U/hyUPOiRfqY/84FDK0qDImqPLzzExtApQk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdwna&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bkdwna&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bK5yFT/hyUPzFYEov/GxDYljNHH9og7KNZy0zMd0/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/G9V3U/hyUPOiRfqY/84FDK0qDImqPLzzExtApQk/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성 더프리스타일 SP-LSBP3LAXKR 본체+배터리+케이스+스킨 패키지 새상품 (정품)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdxue&quot;&gt;https://link.coupang.com/a/bkdxue&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1703069843033&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 The Freestyle 포터블 배터리 화이트 VG-FBB3BA/KR&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/bkdxue&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6468369555&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cuw3up/hyUPC3LXrM/xJLnK43jNFlp0Lod9omjdK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/5QkJS/hyUPFMWV5b/78obKjVDs9ThHUXilzBQp1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/bkdxue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/bkdxue&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cuw3up/hyUPC3LXrM/xJLnK43jNFlp0Lod9omjdK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/5QkJS/hyUPFMWV5b/78obKjVDs9ThHUXilzBQp1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 The Freestyle 포터블 배터리 화이트 VG-FBB3BA/KR&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/779</guid>
      <comments>https://scribblinganything.tistory.com/779#entry779comment</comments>
      <pubDate>Wed, 20 Dec 2023 19:59:58 +0900</pubDate>
    </item>
    <item>
      <title>Ping이란? CMD, 파이썬으로 예제 실습하기(Window OS)</title>
      <link>https://scribblinganything.tistory.com/778</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt8sca/btsCnH21W0u/pd5PKYytIWh5iYMYjuukE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt8sca/btsCnH21W0u/pd5PKYytIWh5iYMYjuukE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt8sca/btsCnH21W0u/pd5PKYytIWh5iYMYjuukE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt8sca%2FbtsCnH21W0u%2Fpd5PKYytIWh5iYMYjuukE0%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;388&quot; height=&quot;391&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;핑(Ping)이란?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핑(Ping) 명령어는 네트워크 장치 간의 연결 상태와 통신 속도를 검사하는 데 주로 사용되는 도구입니다. 핑은 인터넷 제어 메시지 프로토콜(ICMP) 에코 요청 메시지를 목적지 컴퓨터에 보내고 응답을 기다리는 방식으로 작동합니다. 이 과정을 통해 두 가지 주요한 정보를 얻을 수 있습니다: 응답이 얼마나 반환되었는지, 그리고 그 응답이 반환되기까지 얼마나 걸렸는지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;1. 시간 초과(Timeouts)와 패킷 손실(Packet Loss)&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;응답이 없거나 지연되는 경우, 이를 '시간 초과'라고 합니다. 이는 대상 장치가 오프라인이거나, 네트워크 경로에 문제가 있음을 나타낼 수 있습니다.&lt;/li&gt;
&lt;li&gt;패킷 손실은 보낸 패킷 중 일부가 목적지에 도달하지 못하는 경우를 말합니다. 이는 네트워크 혼잡, 하드웨어 문제, 또는 잘못된 구성 등 다양한 원인으로 발생할 수 있습니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;2. 라운드트립 시간(Round-Trip Time, RTT)&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;핑이 응답을 받는 데 걸리는 시간을 RTT라고 합니다. 이 시간은 네트워크의 지연 시간을 나타내며, 일반적으로 밀리초(ms) 단위로 표시됩니다.&lt;/li&gt;
&lt;li&gt;높은 RTT 값은 네트워크 지연이 크다는 것을 의미하며, 이는 데이터 전송 속도가 느림을 나타냅니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;3. 핑을 사용하는 이유&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 연결 문제 해결: 네트워크 문제 해결 시, 핑은 기본적인 진단 도구로 사용됩니다. 예를 들어, 인터넷이 작동하지 않을 때 라우터나 웹사이트 서버에 핑을 보내 연결 상태를 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;네트워크 성능 모니터링: 네트워크 관리자는 핑을 사용하여 네트워크의 성능과 안정성을 지속적으로 모니터링합니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;4. 핑의 한계&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일부 서버나 장치는 보안상의 이유로 ICMP 요청을 차단할 수 있습니다. 이 경우, 핑은 응답을 받지 못하더라도 해당 서버나 장치가 오프라인인 것은 아닙니다.&lt;/li&gt;
&lt;li&gt;핑은 네트워크의 전반적인 성능을 측정하지 않습니다. 예를 들어, 대역폭(bandwidth) 문제나 고급 네트워크 문제를 진단하는 데는 적합하지 않습니다.&lt;/li&gt;
&lt;/ul&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;네트워크&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;방법을&amp;nbsp;제공합니다.&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;참고로 /?을 사용해서 help와 같이 각종 option의 정보를 아래와 같이 받을 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1703046658859&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Users\forgo&amp;gt;ping /?

Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
            [-r count] [-s count] [[-j host-list] | [-k host-list]]
            [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
            [-4] [-6] target_name

Options:
    -t             Ping the specified host until stopped.
                   To see statistics and continue - type Control-Break;
                   To stop - type Control-C.
    -a             Resolve addresses to hostnames.
    -n count       Number of echo requests to send.
    -l size        Send buffer size.
    -f             Set Don't Fragment flag in packet (IPv4-only).
    -i TTL         Time To Live.
    -v TOS         Type Of Service (IPv4-only. This setting has been deprecated
                   and has no effect on the type of service field in the IP
                   Header).
    -r count       Record route for count hops (IPv4-only).
    -s count       Timestamp for count hops (IPv4-only).
    -j host-list   Loose source route along host-list (IPv4-only).
    -k host-list   Strict source route along host-list (IPv4-only).
    -w timeout     Timeout in milliseconds to wait for each reply.
    -R             Use routing header to test reverse route also (IPv6-only).
                   Per RFC 5095 the use of this routing header has been
                   deprecated. Some systems may drop echo requests if
                   this header is used.
    -S srcaddr     Source address to use.
    -c compartment Routing compartment identifier.
    -p             Ping a Hyper-V Network Virtualization provider address.
    -4             Force using IPv4.
    -6             Force using IPv6.&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;핑(Ping) 윈도우 환경에서 실습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 아래에 사용한 명령어에 대한 옵션들은 윈도우(Window)에서 적용되는 Option 값입니다. Linux와 같은 환경에서는 다른 옵션을 사용하셔야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1703046253922&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Users\forgo&amp;gt;ping -n 1 -w 1 192.168.100.100

Pinging 192.168.100.100 with 32 bytes of data:
Reply from 192.168.100.100: bytes=32 time=19ms TTL=64

Ping statistics for 192.168.100.100:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 19ms, Maximum = 19ms, Average = 19ms&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;명령을 설명하면 -n에서 1은 한번의 패킷만을 보내겠다는 의미입니다. -w에서 1은 1초간 응답을 기다리겠다는 의미입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 위와 같이 정상적으로 응답이 들어왔습니다.&lt;/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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;핑(Ping) 파이썬에서 실습&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1703046346136&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import subprocess

def ping_ip(ip_address):
    try:
        # Ping the specified IP address
        response = subprocess.run([&quot;ping&quot;, &quot;-n&quot;, &quot;1&quot;, &quot;-w&quot;, &quot;1&quot;, ip_address], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        # Check if the ping was successful
        if response.returncode == 0:
            print(&quot;Okay&quot;)
        else:
            print(&quot;Ping failed&quot;)
    except FileNotFoundError:
        print(&quot;Ping command not found. Please ensure you have ping available in your environment.&quot;)

# Replace with the IP address you want to ping
ip_address = &quot;192.168.100.100&quot;
ping_ip(ip_address)&lt;/code&gt;&lt;/pre&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 data-ke-size=&quot;size16&quot;&gt;위 코드는 앞서 CMD에서 실행한 명령을 subprocess 함수를 사용해서 동일하게 실행하였습니다.&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;정상적인 응답이 들어올 경우 Okay를 출력하고 아닐 경우 Ping failed이 출력되게 작성하였습니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;예제 코드 다운 로드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bVgL2d/btsCg5dmHJm/dQwx7qarkw5Y19pk928EuK/test00.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;test00.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 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>아두이노 Arduino/파이썬(Python)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/778</guid>
      <comments>https://scribblinganything.tistory.com/778#entry778comment</comments>
      <pubDate>Wed, 20 Dec 2023 13:27:18 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 데이터 타입 크기 탐색: 시리얼 모니터 출력 예제 실습(Arudino, Data type, uint_8, uint_16)</title>
      <link>https://scribblinganything.tistory.com/777</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Au5cJ/btsAPK96PgW/ZKIlslnfbyXvMCA8XHu6DK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Au5cJ/btsAPK96PgW/ZKIlslnfbyXvMCA8XHu6DK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Au5cJ/btsAPK96PgW/ZKIlslnfbyXvMCA8XHu6DK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAu5cJ%2FbtsAPK96PgW%2FZKIlslnfbyXvMCA8XHu6DK%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;400&quot; height=&quot;395&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;아두이노 데이터 타입(Arduino Data Type)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아두이노에서 사용되는 여러 데이터 타입들 중 uint8_t와 같은 타입은 일반적으로 정수형 데이터를 저장하는 데 사용됩니다. 아두이노는 C/C++ 기반의 언어를 사용하므로, C/C++에서 흔히 볼 수 있는 데이터 타입들을 사용합니다. 여기에는 여러 가지가 있지만, 주로 사용되는 몇 가지를 소개하겠습니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;정수형(Integer Types)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;int: 표준 정수형. 아두이노에서는 보통 16비트를 차지합니다.&lt;/li&gt;
&lt;li&gt;unsigned int: 부호 없는 정수형. 음수를 포함하지 않고, 같은 크기의 int보다 두 배의 양수 범위를 가집니다.&lt;/li&gt;
&lt;li&gt;long: 더 큰 크기의 정수를 저장하기 위한 타입. 아두이노에서는 32비트를 차지합니다.&lt;/li&gt;
&lt;li&gt;unsigned long: 부호 없는 긴 정수형. long과 같은 크기이지만, 음수를 포함하지 않습니다.&lt;/li&gt;
&lt;li&gt;short: 작은 크기의 정수를 저장하기 위한 타입. 아두이노에서는 16비트를 차지합니다.&lt;/li&gt;
&lt;li&gt;uint8_t: 부호 없는 8비트 정수형. 0부터 255까지의 값을 저장할 수 있습니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;부동소수점형(Floating Point Types)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;float: 부동소수점 숫자를 저장하는 데 사용됩니다. 아두이노에서는 4바이트(32비트)를 차지합니다.&lt;/li&gt;
&lt;li&gt;double: float보다 더 큰 범위와 정밀도를 가진 부동소수점 숫자를 저장하는 데 사용됩니다. 아두이노에서는 float와 같은 크기를 차지합니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;문자형(Character Types)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;char: 단일 문자를 저장하는 데 사용됩니다. 8비트를 차지하며, 부호 있는 정수로도 사용될 수 있습니다.&lt;/li&gt;
&lt;li&gt;unsigned&amp;nbsp;char:&amp;nbsp;부호&amp;nbsp;없는&amp;nbsp;문자형.&amp;nbsp;char와&amp;nbsp;같은&amp;nbsp;크기이지만,&amp;nbsp;부호&amp;nbsp;없는&amp;nbsp;8비트&amp;nbsp;정수로&amp;nbsp;해석됩니다.&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;아두이노 데이터 타입 예제 코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700879979704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;Arduino.h&amp;gt;

void setup() {
  Serial.begin(9600); // 시리얼 통신을 9600 bps로 시작

  // 각 데이터 타입의 크기를 출력
  Serial.print(&quot;Size of char: &quot;);
  Serial.println(sizeof(char));
  
  Serial.print(&quot;Size of int: &quot;);
  Serial.println(sizeof(int));
  
  Serial.print(&quot;Size of unsigned int: &quot;);
  Serial.println(sizeof(unsigned int));
  
  Serial.print(&quot;Size of long: &quot;);
  Serial.println(sizeof(long));
  
  Serial.print(&quot;Size of unsigned long: &quot;);
  Serial.println(sizeof(unsigned long));
  
  Serial.print(&quot;Size of short: &quot;);
  Serial.println(sizeof(short));
  
  Serial.print(&quot;Size of float: &quot;);
  Serial.println(sizeof(float));
  
  Serial.print(&quot;Size of double: &quot;);
  Serial.println(sizeof(double));
  
  Serial.print(&quot;Size of uint8_t: &quot;);
  Serial.println(sizeof(uint8_t));
}

void loop() {
 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;size of로 데이터 크기를 확인합니다.&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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;코드를&amp;nbsp;업로드한&amp;nbsp;후&amp;nbsp;아두이노&amp;nbsp;IDE의&amp;nbsp;Serial&amp;nbsp;Monitor를&amp;nbsp;열면&amp;nbsp;각&amp;nbsp;데이터&amp;nbsp;타입의&amp;nbsp;크기가&amp;nbsp;바이트&amp;nbsp;단위로&amp;nbsp;출력됩니다.&amp;nbsp;Serial&amp;nbsp;Monitor를&amp;nbsp;열기&amp;nbsp;위해서는&amp;nbsp;아두이노&amp;nbsp;IDE의&amp;nbsp;상단&amp;nbsp;메뉴에서&amp;nbsp;'Tools'&amp;nbsp;&amp;gt;&amp;nbsp;'Serial&amp;nbsp;Monitor'를&amp;nbsp;선택하거나&amp;nbsp;단축키&amp;nbsp;Ctrl&amp;nbsp;+&amp;nbsp;Shift&amp;nbsp;+&amp;nbsp;M을&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;다를&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;일반적으로&amp;nbsp;아두이노&amp;nbsp;Uno와&amp;nbsp;같은&amp;nbsp;AVR&amp;nbsp;기반&amp;nbsp;보드에서는&amp;nbsp;int가&amp;nbsp;2바이트,&amp;nbsp;long과&amp;nbsp;float가&amp;nbsp;4바이트를&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;달라질&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;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBkrp4/btsARVpHNrs/omSLxJKB37ExVsZO05tEZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBkrp4/btsARVpHNrs/omSLxJKB37ExVsZO05tEZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBkrp4/btsARVpHNrs/omSLxJKB37ExVsZO05tEZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBkrp4%2FbtsARVpHNrs%2FomSLxJKB37ExVsZO05tEZk%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;416&quot; height=&quot;309&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>아두이노 Arduino</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/777</guid>
      <comments>https://scribblinganything.tistory.com/777#entry777comment</comments>
      <pubDate>Sat, 25 Nov 2023 11:41:30 +0900</pubDate>
    </item>
    <item>
      <title>Bose QC 이어버드2 실제 사용 후기: 최악의 제품(단점) 구매하지 마세요, 배터리 충전 문제</title>
      <link>https://scribblinganything.tistory.com/776</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clI1Y7/btsykuOLJHp/C7KAYteJCUJebBbH3E3b61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clI1Y7/btsykuOLJHp/C7KAYteJCUJebBbH3E3b61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clI1Y7/btsykuOLJHp/C7KAYteJCUJebBbH3E3b61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclI1Y7%2FbtsykuOLJHp%2FC7KAYteJCUJebBbH3E3b61%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;613&quot; height=&quot;498&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xL0en/btsyeptw7sd/5nZrfqDzuo0Chy3oxcW09K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xL0en/btsyeptw7sd/5nZrfqDzuo0Chy3oxcW09K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xL0en/btsyeptw7sd/5nZrfqDzuo0Chy3oxcW09K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxL0en%2Fbtsyeptw7sd%2F5nZrfqDzuo0Chy3oxcW09K%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;541&quot; height=&quot;459&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgUUrD/btsyl5atYrK/yZADp37E0XAy322BQhy0Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgUUrD/btsyl5atYrK/yZADp37E0XAy322BQhy0Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgUUrD/btsyl5atYrK/yZADp37E0XAy322BQhy0Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgUUrD%2Fbtsyl5atYrK%2FyZADp37E0XAy322BQhy0Ck%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;662&quot; height=&quot;372&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Bose&amp;nbsp;QC&amp;nbsp;이어버드2&amp;nbsp;실제&amp;nbsp;사용&amp;nbsp;후기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23년 7월경에 구매하고 약 3개월 정도 사용하였습니다.&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;이전에 이어버드1을 구입하고 충전 문제로 새제품으로 교환 받은 적이 있습니다. 그 후 1년이 안되서 또 다시 충전 문제가 발생해서 노이즈 캔슬링 기능 하나 만족해서 이어버드2를 구입했습니다.&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;새로 나온 버전이니 잘 쓸 수 있을꺼라 생각하고 QC 이어버드2를 주문을 하였습니다.&amp;nbsp;&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;구매하고 3개월 노이즈 캔슬링(Noise Cancellation)이 잘 동작하는 것은 만족하면서 사용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;얼마지나지 않아 충전되지 않는 문제와 핸드폰과 연동이 안되면서 켜지지도 않고 여러가지 문제가 발생하였습니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AS센터에 전화를 하니 &lt;b&gt;구매 영수증을 가지고 택배를 보내면 1년 안에는 새제품으로 교환을 해준다고 합니다. 제품을 구매할 때 하자 시 보관하라고 적힌 스티커는 유상으로만 교환이 된다고 하니 영수증을 꼭 챙기셔야 합니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &lt;span style=&quot;color: #ee2323;&quot;&gt;3번의 하자 제품을 거치고 나니 이제 보스 제품은 앞으로 구매를 안할 것 같습니다&lt;/span&gt;. 노이즈 캔슬 말고는 기술자체가 안되는 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 2개 사진은 제가 실제로 구매해서 사용한 QC1, QC2입니다.&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/776</guid>
      <comments>https://scribblinganything.tistory.com/776#entry776comment</comments>
      <pubDate>Fri, 13 Oct 2023 14:16:03 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 Static methods란? flask에서의 활용 방법</title>
      <link>https://scribblinganything.tistory.com/775</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cabvzc/btsu17OHnDy/g5iCFAzfFLCbS4yArkJ0B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cabvzc/btsu17OHnDy/g5iCFAzfFLCbS4yArkJ0B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cabvzc/btsu17OHnDy/g5iCFAzfFLCbS4yArkJ0B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcabvzc%2Fbtsu17OHnDy%2Fg5iCFAzfFLCbS4yArkJ0B0%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;파이썬&amp;nbsp;Static&amp;nbsp;methods란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Static&amp;nbsp;methods(정적&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;클래스&amp;nbsp;자체에&amp;nbsp;바인딩됩니다.&amp;nbsp;이것은&amp;nbsp;&lt;b&gt;static&amp;nbsp;method가&amp;nbsp;해당&amp;nbsp;클래스의&amp;nbsp;객체&amp;nbsp;없이&amp;nbsp;호출될&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;것을&amp;nbsp;의미&lt;/b&gt;하며,&amp;nbsp;객체의&amp;nbsp;상태를&amp;nbsp;수정할&amp;nbsp;수&amp;nbsp;없다는&amp;nbsp;것을&amp;nbsp;의미합니다.&amp;nbsp;static&amp;nbsp;method는&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flask에서 정적 메서드(Static methods)는 다음과 같은 상황에서 사용될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유틸리티 함수 구현&lt;/b&gt;: Flask 애플리케이션에서 자주 사용되는 공통 작업을 처리하기 위해 정적 메서드를 사용할 수 있습니다. 예를 들어, 데이터베이스 연결, 문자열 처리, 파일 조작 등과 같은 작업을 수행하는 유틸리티 함수를 정적 메서드로 정의할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;헬퍼 함수 구현&lt;/b&gt;: Flask 애플리케이션에서 특정 기능 또는 작업을 수행하는 헬퍼 함수를 정의할 때 정적 메서드를 사용할 수 있습니다. 예를 들어, 어떤 데이터를 포맷하거나, 검증하거나, 변환하는 함수를 정적 메서드로 만들어 라우트 핸들러에서 호출할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;클래스 레벨 작업&lt;/b&gt;: 특정 Flask 클래스의 여러 메서드에서 공유해야 하는 상태나 동작이 있다면, 이를 정적 메서드로 구현할 수 있습니다. 이렇게 하면 클래스 수준에서 공통 동작을 관리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;팩토리 메서드&lt;/b&gt;: 정적 메서드는 클래스의 인스턴스를 생성하는 데 사용될 수 있습니다. 예를 들어, Flask 애플리케이션에서 여러 가지 구성 옵션으로 인스턴스를 생성하는 팩토리 메서드를 정적 메서드로 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트&amp;nbsp;목적&lt;/b&gt;:&amp;nbsp;Flask&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;/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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파이썬 Static methods 예제 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1695253662078&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'  # SQLite 데이터베이스 사용
db = SQLAlchemy(app)

# 데이터베이스 모델 정의
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    # 정적 메서드로 데이터베이스에 새로운 사용자 추가
    @staticmethod
    def create_user(username, email):
        new_user = User(username=username, email=email)
        db.session.add(new_user)
        db.session.commit()

    # 정적 메서드로 모든 사용자 가져오기
    @staticmethod
    def get_all_users():
        return User.query.all()

if __name__ == '__main__':
    # 데이터베이스 초기화
    db.create_all()

    # 정적 메서드를 사용하여 새로운 사용자 추가
    User.create_user('user1', 'user1@example.com')
    User.create_user('user2', 'user2@example.com')

    # 정적 메서드를 사용하여 모든 사용자 가져오기
    users = User.get_all_users()
    for user in users:
        print(f'ID: {user.id}, Username: {user.username}, Email: {user.email}')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;19, 26번 라인: 위와 같이 staticmethod를 사용해서 유져를 만들거나 유저 정보를 가저올 때 User라는 클래스 선업 없이 함수에 접속해서 가져올 수 있게 만들어 줍니다.&amp;nbsp;&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;39번 라인: User 클래스에서 get_all_users 함수를 선언 없이 사용할 수 있습니다.&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;위와 같이 flask와 같은 환경에서 DB에 접속되어 있는 상태에서 클래스 선언 없이 DB에 접근이 가능해 지게 된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/775</guid>
      <comments>https://scribblinganything.tistory.com/775#entry775comment</comments>
      <pubDate>Thu, 21 Sep 2023 08:51:36 +0900</pubDate>
    </item>
    <item>
      <title>중소기업이란? 기준 금액, 범위, 소기업, 소상공인 구분법</title>
      <link>https://scribblinganything.tistory.com/774</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbnBgN/btsuqB3OvHW/gm5C8MyH0c0Rc2QbdybX9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbnBgN/btsuqB3OvHW/gm5C8MyH0c0Rc2QbdybX9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbnBgN/btsuqB3OvHW/gm5C8MyH0c0Rc2QbdybX9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbnBgN%2FbtsuqB3OvHW%2Fgm5C8MyH0c0Rc2QbdybX9K%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;1241&quot; height=&quot;591&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;중소기업이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중소기업기본법 시행령(일부개정 2021. 6. 8. [대통령령 제31758호, 시행 2021. 6. 9.] 중소벤처기업부)에 정의된 중소기업이란 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;제3조(중소기업의 범위)&lt;br /&gt;①&amp;nbsp;「중소기업기본법」(이하 &quot;법&quot;이라 한다) 제2조제1항제1호에 따른 중소기업은 다음 각 호의 요건을 모두 갖춘 기업으로 한다.&amp;nbsp;&amp;lt;개정 2014.4.14, 2015.6.30, 2016.4.5, 2016.4.26, 2017.10.17, 2021.2.17&amp;gt;&lt;br /&gt;1. 다음 각 목의 요건을 모두 갖춘 기업일 것&lt;br /&gt;가. 해당 기업이 영위하는 주된 업종과 해당 기업의 평균매출액 또는 연간매출액(이하 &quot;평균매출액등&quot;이라 한다)이 별표 1의 기준에 맞을 것&lt;br /&gt;나. 자산총액이 5천억원 미만일 것&lt;br /&gt;2. 소유와 경영의 실질적인 독립성이 다음 각 목의 어느 하나에 해당하지 아니하는 기업일 것&lt;br /&gt;가.&amp;nbsp;삭제 &amp;lt;2020.6.9&amp;gt;&lt;br /&gt;나. 자산총액이 5천억원 이상인 법인(외국법인을 포함하되, 비영리법인 및 제3조의2제3항 각 호의 어느 하나에 해당하는 자는 제외한다)이 주식등의 100분의 30 이상을 직접적 또는 간접적으로 소유한 경우로서 최다출자자인 기업. 이 경우 최다출자자는 해당 기업의 주식등을 소유한 법인 또는 개인으로서 단독으로 또는 다음의 어느 하나에 해당하는 자와 합산하여 해당 기업의 주식등을 가장 많이 소유한 자를 말하며, 주식등의 간접소유 비율에 관하여는&amp;nbsp;「국제조세조정에 관한 법률 시행령」&amp;nbsp;제2조제3항을 준용한다. 1) 주식등을 소유한 자가 법인인 경우: 그 법인의 임원 2) 주식등을 소유한 자가 1)에 해당하지 아니하는 개인인 경우: 그 개인의 친족&lt;br /&gt;다. 관계기업에 속하는 기업의 경우에는 제7조의4에 따라 산정한 평균매출액등이 별표 1의 기준에 맞지 아니하는 기업&lt;br /&gt;라.&amp;nbsp;삭제 &amp;lt;2017.12.29&amp;gt;&lt;br /&gt;② 법 제2조제1항제2호에서 &quot;대통령령으로 정하는 사회적기업&quot;이란 영리를 주된 목적으로 하지 않는 사회적기업으로서 다음 각 호의 요건을 모두 갖춘 기업으로 한다.&amp;nbsp;&amp;lt;개정 2014.4.14, 2016.4.26, 2021.4.20&amp;gt;&lt;br /&gt;1. 제1항제1호 각 목의 요건을 모두 갖출 것&lt;br /&gt;2.&amp;nbsp;삭제 &amp;lt;2014.4.14&amp;gt;&lt;br /&gt;3. 제1항제2호나목에 해당하지 않을 것&lt;br /&gt;③ 법 제2조제1항제3호에서 &quot;대통령령으로 정하는 자&quot;란 제2항 각 호의 요건을 모두 갖춘 협동조합, 협동조합연합회, 사회적협동조합, 사회적협동조합연합회 및 이종(이종)협동조합연합회(법 제2조제1항 각 호에 따른 중소기업을 회원으로 하는 경우로 한정한다)를 말한다.&amp;nbsp;&amp;lt;개정 2016.4.26, 2021.6.8&amp;gt;&lt;br /&gt;④ 법 제2조제1항제4호에서 &quot;대통령령으로 정하는 자&quot;란 제2항 각 호의 요건을 모두 갖춘 조합, 연합회 및 전국연합회를 말한다.&amp;nbsp;&amp;lt;신설 2019.2.12&amp;gt;&lt;br /&gt;⑤ 법 제2조제1항제5호에서 &quot;대통령령으로 정하는 자&quot;란 제2항 각 호의 요건을 모두 갖춘 협동조합, 사업협동조합 및 협동조합연합회를 말한다.&amp;nbsp;&amp;lt;신설 2021.4.20&amp;gt;&lt;br /&gt;[전문개정 2011.12.28]&lt;/blockquote&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;중소기업 업종별 기준 금액&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTpfv/btsut4SmidA/QExiyASwgEbJJokaBkubk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTpfv/btsut4SmidA/QExiyASwgEbJJokaBkubk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTpfv/btsut4SmidA/QExiyASwgEbJJokaBkubk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTpfv%2Fbtsut4SmidA%2FQExiyASwgEbJJokaBkubk1%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;606&quot; height=&quot;620&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1Txry/btst6j5vLrW/y1WOC9tQXSTOL2fOxQvWq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1Txry/btst6j5vLrW/y1WOC9tQXSTOL2fOxQvWq1/img.png&quot; data-alt=&quot;출처:&amp;amp;nbsp;알기쉽게풀어쓴_중소기업범위해설(15년_개정판).pdf&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1Txry/btst6j5vLrW/y1WOC9tQXSTOL2fOxQvWq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1Txry%2Fbtst6j5vLrW%2Fy1WOC9tQXSTOL2fOxQvWq1%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;613&quot; height=&quot;196&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;알기쉽게풀어쓴_중소기업범위해설(15년_개정판).pdf&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;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;중기업, 소기업, 소상공인 차이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소기업은 중소기업 기본법 시행령 제 8조에 따라 아래의 별표 3의 기준으로 결정&lt;/b&gt; 됩니다. 해당 테이블은 업종별 평균 매출액을 기준으로 소기업을 분류 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4ADdF/btsuk4kUwDi/2QdShC6eYZXbGnYyJ2Smdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4ADdF/btsuk4kUwDi/2QdShC6eYZXbGnYyJ2Smdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4ADdF/btsuk4kUwDi/2QdShC6eYZXbGnYyJ2Smdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4ADdF%2Fbtsuk4kUwDi%2F2QdShC6eYZXbGnYyJ2Smdk%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;557&quot; height=&quot;741&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;741&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소상공인은 &quot;소상 공인 보호 및 지원에 관한 법률 제2조&quot;에 따라 아래 조건을 갖춘 사람을 의미&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상시 근로자 수가 10명 미만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 업종별 상시 근로자 수 등이 다음과 같을 것&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;a. 광업, 제조업, 건설업 및 운수업: 10명 미만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;b. 그 밖의 업종: 5명 미만&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중기업이란 위 조건을 상회할 때 중기업으로 포함&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>여러가지공부</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/774</guid>
      <comments>https://scribblinganything.tistory.com/774#entry774comment</comments>
      <pubDate>Sun, 17 Sep 2023 14:49:05 +0900</pubDate>
    </item>
    <item>
      <title>[사용후기]갤럭시워치 기능: 핸드폰찾기(단축키, smartphone, text, galaxy watch3 4 5 6 호환 가능, 스마트폰, review)</title>
      <link>https://scribblinganything.tistory.com/773</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mr1eL/btsts1jZdzp/ajTiipDHem7H16on47B0HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mr1eL/btsts1jZdzp/ajTiipDHem7H16on47B0HK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mr1eL/btsts1jZdzp/ajTiipDHem7H16on47B0HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmr1eL%2Fbtsts1jZdzp%2FajTiipDHem7H16on47B0HK%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;757&quot; height=&quot;438&quot; data-origin-width=&quot;757&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;갤럭시워치&amp;nbsp;기능:&amp;nbsp;핸드폰찾기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핸드폰(스마트폰)이나 갤럭시 탭과 같은 삼성 제품들은 서로 연동해서 찾을 수 있습니다. 가장 많이 사용하는 방법이 삼성 갤랙시에서 제공하는 Smart of Things라는 앱인데 해당 앱에서 연동을 해 놓으면 가까운 거리는 쉽게 찾을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이번 &lt;b&gt;포스트의 목적은 스마트폰(Smart phone)과 갤럭시 워치만 있고 집이나 어떤 가까운 공간에서 찾지 못하는 상황에서 쉽게 찾는 방법&lt;/b&gt;에 대해 알아 보겠습니다. 해당&lt;span style=&quot;color: #ee2323;&quot;&gt; 기능의 장점은 핸드폰을 진동(Vibration mode)로 해 놓아도 소리가 자동으로 나와 쉽게 찾을 수 있게 해줍니다&lt;/span&gt;.&amp;nbsp;&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;그리고 &quot;&lt;b&gt;찾기 기능&quot;을 단축기로 쉽게 만드는 방법&lt;/b&gt;에 대해서도 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 기능은 갤럭시3 부터 최근에 나온 갤럭시6(Galaxy 6)까지 다 사용할 수 있는 기능입니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;1. 아래 그림과 같이 스마트폰 아래쪽 버튼을 클릭 해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GyPhd/btstx5yYWIJ/Ip3nFkpoPP1B9neaCU8620/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GyPhd/btstx5yYWIJ/Ip3nFkpoPP1B9neaCU8620/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GyPhd/btstx5yYWIJ/Ip3nFkpoPP1B9neaCU8620/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGyPhd%2Fbtstx5yYWIJ%2FIp3nFkpoPP1B9neaCU8620%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;443&quot; height=&quot;360&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;2. 아래 그림과 같이 사용할 수 있는 여러가지 앱들이 나오게 됩니다. 그 중에서 &quot;내폰찾기&quot; 앱을 선택 해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dH2OLN/btstvPRqoD2/7FuUOZH3pHMkNigFz7S4L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dH2OLN/btstvPRqoD2/7FuUOZH3pHMkNigFz7S4L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dH2OLN/btstvPRqoD2/7FuUOZH3pHMkNigFz7S4L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdH2OLN%2FbtstvPRqoD2%2F7FuUOZH3pHMkNigFz7S4L1%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;446&quot; height=&quot;322&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아래 시작 버튼을 클릭하면 폰에 진동과 함께 알람 사운드가 발생하게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6xAAL/btsts3oyRoL/LsM4jxPdAcjvj1GwbehW8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6xAAL/btsts3oyRoL/LsM4jxPdAcjvj1GwbehW8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6xAAL/btsts3oyRoL/LsM4jxPdAcjvj1GwbehW8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6xAAL%2Fbtsts3oyRoL%2FLsM4jxPdAcjvj1GwbehW8K%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;431&quot; height=&quot;299&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;갤럭시워치 기능: 핸드폰찾기 단축키 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 제껀 갤럭시 워치3이여서 안되지만 다른 워치 버젼은 아래 과정을 통해 쉽게 단축키 설정이 가능합니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;설정 -&amp;gt; 유용한 기능 -&amp;gt; 버튼 직접 설정 -&amp;gt; 두 번 누르기 -&amp;gt; 음성 녹음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; 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 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;h3 id=&quot;갤럭시워치6_쿠팡_할인&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;갤럭시워치6 쿠팡 할인&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;쿠팡에서 갤럭시워치6에 대해서 7% 할인에 로켓 배송&lt;/span&gt;을 진행하고 있습니다. 혹시 관심 있으시면 아래 링크 통해서 구경하세요 :)&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/9mipJ&quot;&gt;https://link.coupang.com/a/9mipJ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694388410606&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스페이스쉴드 갤럭시워치4 40mm 호환 메탈 밴드 밀리네즈루프 스틸 시계줄 밴드 스트랩 20color&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/9mipJ&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7505232687&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWoRCB/hyTSrJvbf3/BA4sV3ihiPKRpClS2CMcYK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/csJeRd/hyTSsaza2M/qAoBKiAIJjet1wk8U8xS8K/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/9mipJ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/9mipJ&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWoRCB/hyTSrJvbf3/BA4sV3ihiPKRpClS2CMcYK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/csJeRd/hyTSsaza2M/qAoBKiAIJjet1wk8U8xS8K/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;스페이스쉴드 갤럭시워치4 40mm 호환 메탈 밴드 밀리네즈루프 스틸 시계줄 밴드 스트랩 20color&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스트랩(Strap)은 43%까지 할인 하고 있으니 관심 있으시면 위 링크로 구경하시면 됩니다 :)&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q2Pq&quot;&gt;https://link.coupang.com/a/8Q2Pq&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694388347710&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시 워치6 40mm&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8Q2Pq&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7405993243&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4I7HO/hyTSDwoboo/bPFjNIsuQJFuKYYEAfsZO1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/jABhW/hyTSpkADV8/hS4qqEg46MCMIS1oVKU8n0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q2Pq&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8Q2Pq&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4I7HO/hyTSDwoboo/bPFjNIsuQJFuKYYEAfsZO1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/jABhW/hyTSpkADV8/hS4qqEg46MCMIS1oVKU8n0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시 워치6 40mm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q24Y&quot;&gt;https://link.coupang.com/a/8Q24Y&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694388356492&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시 워치6 클래식&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8Q24Y&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7405993236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lGI1n/hyTSByxB1v/PsgrKjkcBBLcTAKAcJnimK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/qgmLs/hyTSz8AQHA/4aVkpR3c1rINxVVK3KNlH0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q24Y&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8Q24Y&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lGI1n/hyTSByxB1v/PsgrKjkcBBLcTAKAcJnimK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/qgmLs/hyTSz8AQHA/4aVkpR3c1rINxVVK3KNlH0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시 워치6 클래식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8TSya&quot;&gt;https://link.coupang.com/a/8TSya&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1694388365457&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스페이스쉴드 갤럭시워치 시리즈 호환 버클형 브레이드 솔로루프 스트랩 20mm&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8TSya&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6514491730&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cZR5u9/hyTSy2U0Iz/vwFqgBkWiPcKzcu4sYI6jK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cXYJai/hyTSu7gr6U/pE29x5cqx6YqbfmDfPxPB0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8TSya&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8TSya&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cZR5u9/hyTSy2U0Iz/vwFqgBkWiPcKzcu4sYI6jK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cXYJai/hyTSu7gr6U/pE29x5cqx6YqbfmDfPxPB0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;스페이스쉴드 갤럭시워치 시리즈 호환 버클형 브레이드 솔로루프 스트랩 20mm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/773</guid>
      <comments>https://scribblinganything.tistory.com/773#entry773comment</comments>
      <pubDate>Mon, 11 Sep 2023 08:27:48 +0900</pubDate>
    </item>
    <item>
      <title>[사용후기]갤럭시워치 기능: 녹음(단축키, 텍스트변환 가능, voice recording, text, galaxy watch3 4 5 6 호환 가능)</title>
      <link>https://scribblinganything.tistory.com/772</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjHzi0/btsteS0qEnq/FogOG33m7DbtG55hKv4ffk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjHzi0/btsteS0qEnq/FogOG33m7DbtG55hKv4ffk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjHzi0/btsteS0qEnq/FogOG33m7DbtG55hKv4ffk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjHzi0%2FbtsteS0qEnq%2FFogOG33m7DbtG55hKv4ffk%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;593&quot; height=&quot;426&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[리뷰]갤럭시워치 녹음 기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;삼성의 갤럭시(Galaxy) 하면 애플과 차별화 된 것이 녹음 기능&lt;/b&gt;이라고 생각합니다. 이번에 소개해 드릴 기능은 갤럭시 워치(Galaxy Watch)를 사용해서 녹음을 하는 방법에 대해 알아보겠습니다. &lt;b&gt;해당 기능은 갤럭시 4~6 시리즈 모두 사용 가능하니 적용해서 사용&lt;/b&gt;하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 방법은 간단합니다.&lt;/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;1. 아래 그림과 같이 우측에 2개의 버튼이 있습니다. 우측 아래 버튼을 클릭하면 앱을 선택할 수 있는 화면이 나옵니다. 이중에서 그림과 같이 음성 녹음 앱을 선택 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qcQBm/btss8mhgILm/65oqXI4QM7NrVGMbRkQF20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qcQBm/btss8mhgILm/65oqXI4QM7NrVGMbRkQF20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qcQBm/btss8mhgILm/65oqXI4QM7NrVGMbRkQF20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqcQBm%2Fbtss8mhgILm%2F65oqXI4QM7NrVGMbRkQF20%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;606&quot; height=&quot;477&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;2. 앱을 클릭하면 아래 그림과 같이 녹음 버튼이 나옵니다. 갤럭시워치와 스마트폰이 이미 연동되었다면 녹음 버튼을 종료하자 마자 자동으로 녹음 파일이 넘어 갑니다. 그리고 화면의 좌측 하단에 &quot;T&quot; 마크는 음성을 텍스트로 변환하겠다는 의미입니다. 활성화 해놓으면 자동으로 녹음과 동시에 텍스트 변환이 가능 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYlDR5/btss9YNHy8V/IxKqK0wn7YmVEVGNNSJvK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYlDR5/btss9YNHy8V/IxKqK0wn7YmVEVGNNSJvK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYlDR5/btss9YNHy8V/IxKqK0wn7YmVEVGNNSJvK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYlDR5%2Fbtss9YNHy8V%2FIxKqK0wn7YmVEVGNNSJvK0%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;592&quot; height=&quot;499&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;3. 아래와 같이 목소리가 높음이 되었고 텍스트로 출력이 됨을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;1125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Za93P/btss8j5WHm7/Kf7YecZa1SB33MDYKqvZd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Za93P/btss8j5WHm7/Kf7YecZa1SB33MDYKqvZd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Za93P/btss8j5WHm7/Kf7YecZa1SB33MDYKqvZd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZa93P%2Fbtss8j5WHm7%2FKf7YecZa1SB33MDYKqvZd1%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;591&quot; height=&quot;1125&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;1125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;갤럭시워치 녹음 단축키 설정 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 제껀 갤럭시 워치3이여서 안되지만 다른 워치는 아래 과정을 통해 단축키 설정이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;설정 -&amp;gt; 유용한 기능 -&amp;gt; 버튼 직접 설정 -&amp;gt; 두 번 누르기 -&amp;gt; 음성 녹음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;갤럭시워치6 쿠팡 할인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 &lt;span style=&quot;color: #ee2323;&quot;&gt;쿠팡에서 갤럭시워치6에 대해서 7% 할인에 로켓 배송&lt;/span&gt;을 진행하고 있습니다. 혹시 관심 있으시면 아래 링크 통해서 구경하세요 :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q2Pq&quot;&gt;https://link.coupang.com/a/8Q2Pq&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693908441507&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시 워치6 40mm&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8Q2Pq&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7405993243&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2zwbI/hyTPAmjOeI/L9Yf0Ee7b6rirE3bhNUZn1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/VxlbM/hyTSDIsY5U/GyPWdJSXLy4orv8DW7Kwv1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q2Pq&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8Q2Pq&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2zwbI/hyTPAmjOeI/L9Yf0Ee7b6rirE3bhNUZn1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/VxlbM/hyTSDIsY5U/GyPWdJSXLy4orv8DW7Kwv1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시 워치6 40mm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q24Y&quot;&gt;https://link.coupang.com/a/8Q24Y&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693908480690&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;삼성전자 갤럭시 워치6 클래식&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8Q24Y&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7405993236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgl7Mr/hyTPxC8D9c/13jnKixsdd9fa5oem5JPLK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/bsdgZL/hyTPHTh70M/dCbrw6JUKGTlpO0FC1BKQ0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8Q24Y&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8Q24Y&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgl7Mr/hyTPxC8D9c/13jnKixsdd9fa5oem5JPLK/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/bsdgZL/hyTPHTh70M/dCbrw6JUKGTlpO0FC1BKQ0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시 워치6 클래식&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8TSya&quot;&gt;https://link.coupang.com/a/8TSya&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693955756506&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;스페이스쉴드 갤럭시워치 시리즈 호환 버클형 브레이드 솔로루프 스트랩 20mm&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/8TSya&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6514491730&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GN9sA/hyTSCCTdgX/RIXDyL8wHAr44FMxHKFoUk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/9Yzzz/hyTSA58K4B/q5MTS83j2hwzgI3IXOGBWk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/8TSya&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/8TSya&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GN9sA/hyTSCCTdgX/RIXDyL8wHAr44FMxHKFoUk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/9Yzzz/hyTSA58K4B/q5MTS83j2hwzgI3IXOGBWk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;스페이스쉴드 갤럭시워치 시리즈 호환 버클형 브레이드 솔로루프 스트랩 20mm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/772</guid>
      <comments>https://scribblinganything.tistory.com/772#entry772comment</comments>
      <pubDate>Wed, 6 Sep 2023 08:17:28 +0900</pubDate>
    </item>
    <item>
      <title>소니 헤드셋 6개월 실제 사용 후기(sony wh-1000xm5, 리뷰)</title>
      <link>https://scribblinganything.tistory.com/771</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbJuPt/btsscGajcUZ/igUzSSVT4J9SoDq9UQG170/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbJuPt/btsscGajcUZ/igUzSSVT4J9SoDq9UQG170/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbJuPt/btsscGajcUZ/igUzSSVT4J9SoDq9UQG170/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbJuPt%2FbtsscGajcUZ%2FigUzSSVT4J9SoDq9UQG170%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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;소니&amp;nbsp;헤드셋&amp;nbsp;6개월&amp;nbsp;실제&amp;nbsp;사용&amp;nbsp;후기(sony&amp;nbsp;wh-1000xm5,&amp;nbsp;리뷰)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 소니 제품을 산지 6개월이 되었다. 운동을 좋아하는데 운동할 때 떨어지지 않고 편하게 쓸 수 있는 헤드셋을 찾았고 &lt;b&gt;노이즈 캔슬링(Noise Cancelling)이 타사에 비해 월등히 좋다고 해서 혹해서 산 제품&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이 제품을 6개월간 사용했고 리뷰를 해보려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUNRyc/btssc9wJJuk/JhY7aJZ1mjqg4vx85UOyAK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUNRyc/btssc9wJJuk/JhY7aJZ1mjqg4vx85UOyAK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUNRyc/btssc9wJJuk/JhY7aJZ1mjqg4vx85UOyAK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUNRyc%2Fbtssc9wJJuk%2FJhY7aJZ1mjqg4vx85UOyAK%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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인은 심플하다. 아마 심플한 디자인을 좋아하는 내 취향을 저격했는데 최근에 소니 헤드셋을 젊은 사람들이 많이 쓰고 다니던데 심플하면서도 사람들을 끄는 디자인이지 않나 생각이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yQnt8/btsshuNbaPe/C0e1FcgVX6kAHjWSttvn7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yQnt8/btsshuNbaPe/C0e1FcgVX6kAHjWSttvn7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yQnt8/btsshuNbaPe/C0e1FcgVX6kAHjWSttvn7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyQnt8%2FbtsshuNbaPe%2FC0e1FcgVX6kAHjWSttvn7K%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;343&quot; height=&quot;407&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2653&quot; data-origin-height=&quot;1641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSN1Bs/btssikpZsmb/OeO7GoOj8hmjDsFz2xidKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSN1Bs/btssikpZsmb/OeO7GoOj8hmjDsFz2xidKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSN1Bs/btssikpZsmb/OeO7GoOj8hmjDsFz2xidKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSN1Bs%2FbtssikpZsmb%2FOeO7GoOj8hmjDsFz2xidKk%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;2653&quot; height=&quot;1641&quot; data-origin-width=&quot;2653&quot; data-origin-height=&quot;1641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능은 사실 복잡하지 않다. &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 헤드폰이 그렇듯 중요한 것은 음질, 디자인, 노이즈캔슬 기능 정도가 아닐까 내 지극히 개인적인 견해는 그렇다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 그림처럼 버튼이 몇개 없다. NC 캔슬 할지랑 전원 킬지 말지 정도.... 사실 음질도 뛰어나고 노이즈캔슬 기능도 뛰어나서 나는 개인적으로 사용하면서 만족도가 컸다.&amp;nbsp;&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 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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EPF19/btssfyiK1Qd/7n0Xlc4zkdvuhkqRn11Vn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EPF19/btssfyiK1Qd/7n0Xlc4zkdvuhkqRn11Vn1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EPF19/btssfyiK1Qd/7n0Xlc4zkdvuhkqRn11Vn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEPF19%2FbtssfyiK1Qd%2F7n0Xlc4zkdvuhkqRn11Vn1%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;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;운동하면서 사용하는 &lt;b&gt;내 개인적인 의견으로 총 평가를 내리자면 사용하기에는 굉장히 편했다&lt;/b&gt;. 버튼으로 전원을 켜자마자 미리 설정된 내 스마트폰에 &lt;b&gt;연결이 되었고 운동을 하면서 끊기는 경우가 거의 없었다&lt;/b&gt;. 그리고 &lt;b&gt;주변 소음을 거의 완벽에 가깝게 차단해서 운동할때 내 운동에만 집중&lt;/b&gt;할 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다만 &lt;b&gt;단점으로 올 여름 정말 더웠다......즉, 귀에 땀이 많이 찬다&lt;/b&gt;. 아무래도 액티브 노이즈 뿐 아니라 디자인으로 패시브 노이즈까지 차단을 하기 때문에 밀봉이 잘된다. 땀이 찬다.....여름에 야외에서 조깅이나 걷는 운동을 한다면 비추다....이 때는 차라리 이어버드 같은 제품이 낫다. 이 또한 내 생각이니 잘 판단해보시고 구매하시길 바란다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;소니 헤드셋 상세 스펙(sony wh-1000xm5, 리뷰)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvmtvm/btssf3W5azK/wuuNrcUeLy2kPV3vRZfKEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvmtvm/btssf3W5azK/wuuNrcUeLy2kPV3vRZfKEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvmtvm/btssf3W5azK/wuuNrcUeLy2kPV3vRZfKEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvmtvm%2Fbtssf3W5azK%2FwuuNrcUeLy2kPV3vRZfKEk%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;1021&quot; height=&quot;731&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;소니 헤드셋&lt;span&gt; 쿠팡 최저가 구매&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;최근에 할인이 많이 들어갔습니다. &lt;span style=&quot;color: #ee2323;&quot;&gt;로켓배송과 함께 13% 할인해서 판매&lt;/span&gt; 하고 있으니 관심있으시면 아래 링크 통해서 구경하시면 됩니다~!!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/7ZsGa&quot;&gt;https://link.coupang.com/a/7ZsGa&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693132068425&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;소니 노이즈캔슬링 블루투스 헤드폰&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/7ZsGa&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6557157200&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cyURvt/hyTIP5kN3H/ijkWCCBXqGkqm4x0ubcvu1/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/u8EXO/hyTL8CbEog/qdfkkAo9HpKaAaMsIPPjp1/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/7ZsGa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/7ZsGa&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cyURvt/hyTIP5kN3H/ijkWCCBXqGkqm4x0ubcvu1/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/u8EXO/hyTL8CbEog/qdfkkAo9HpKaAaMsIPPjp1/img.png?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;소니 노이즈캔슬링 블루투스 헤드폰&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/771</guid>
      <comments>https://scribblinganything.tistory.com/771#entry771comment</comments>
      <pubDate>Sun, 27 Aug 2023 19:28:07 +0900</pubDate>
    </item>
    <item>
      <title>A Father-Son Visit to a Grilled Seafood Restaurant at Gwangalli Beach, Busan(부산, 광안리, 아이와 함께)</title>
      <link>https://scribblinganything.tistory.com/770</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM5yOs/btssk2WRYqw/f4TG4cIUCBaTLsQZtFGqJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM5yOs/btssk2WRYqw/f4TG4cIUCBaTLsQZtFGqJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM5yOs/btssk2WRYqw/f4TG4cIUCBaTLsQZtFGqJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM5yOs%2Fbtssk2WRYqw%2Ff4TG4cIUCBaTLsQZtFGqJk%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This is a Blog Where I Record My Experiences, Without Ads.&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;h3 data-ke-size=&quot;size23&quot;&gt;가게 정보(Restaurant Infomation)&lt;/h3&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;lt;&amp;lt;Google Map&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://goo.gl/maps/b8PdC4x5KRrRU4YDA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://goo.gl/maps/b8PdC4x5KRrRU4YDA&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693127170611&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;한다솥 &amp;middot; 부산광역시 수영구 남천바다로33번길 101&quot; data-og-description=&quot;★★★★☆ &amp;middot; 한식당&quot; data-og-host=&quot;www.google.com&quot; data-og-source-url=&quot;https://goo.gl/maps/b8PdC4x5KRrRU4YDA&quot; data-og-url=&quot;https://www.google.com/maps/place/Handasot/@35.1524947,129.1143208,17z/data=!3m1!4b1!4m6!3m5!1s0x3568edcac3cfe1a9:0x1859444d6a11b761!8m2!3d35.1524903!4d129.1168957!16s%2Fg%2F11pwyqyzx1?entry=tts&amp;amp;shorturl=1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yNSa4/hyTIP5jIQs/KfgQgj88KG3FR79rsFbAXK/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900&quot;&gt;&lt;a href=&quot;https://goo.gl/maps/b8PdC4x5KRrRU4YDA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://goo.gl/maps/b8PdC4x5KRrRU4YDA&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yNSa4/hyTIP5jIQs/KfgQgj88KG3FR79rsFbAXK/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900');&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;한다솥 &amp;middot; 부산광역시 수영구 남천바다로33번길 101&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;★★★★☆ &amp;middot; 한식당&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.google.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;&amp;lt;Naver Map&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://naver.me/5oQ6AsoO&quot;&gt;https://naver.me/5oQ6AsoO&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693127235699&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;한다솥 본점 : 네이버 &quot; data-og-description=&quot;방문자리뷰 950 &amp;middot; 블로그리뷰 1,579&quot; data-og-host=&quot;m.place.naver.com&quot; data-og-source-url=&quot;https://naver.me/5oQ6AsoO&quot; data-og-url=&quot;https://m.place.naver.com/restaurant/1903623873/home&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MGTuJ/hyTL5Fq2lh/ocvqQlVQZLIG4wKlxhlTB0/img.jpg?width=640&amp;amp;height=380&amp;amp;face=0_0_640_380,https://scrap.kakaocdn.net/dn/PT4wm/hyTIQwo7MA/HTlfNCv5FFauneNfsRTZb0/img.jpg?width=640&amp;amp;height=380&amp;amp;face=0_0_640_380&quot;&gt;&lt;a href=&quot;https://naver.me/5oQ6AsoO&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naver.me/5oQ6AsoO&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MGTuJ/hyTL5Fq2lh/ocvqQlVQZLIG4wKlxhlTB0/img.jpg?width=640&amp;amp;height=380&amp;amp;face=0_0_640_380,https://scrap.kakaocdn.net/dn/PT4wm/hyTIQwo7MA/HTlfNCv5FFauneNfsRTZb0/img.jpg?width=640&amp;amp;height=380&amp;amp;face=0_0_640_380');&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;한다솥 본점 : 네이버 &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;방문자리뷰 950 &amp;middot; 블로그리뷰 1,579&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;m.place.naver.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;My Personal Restaurant Review(내가 느낀 식당)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img_blurr.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3AGsN/btssfX3Bm43/qXhuiFKzQyU9sdZjH35Kn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3AGsN/btssfX3Bm43/qXhuiFKzQyU9sdZjH35Kn1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3AGsN/btssfX3Bm43/qXhuiFKzQyU9sdZjH35Kn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3AGsN%2FbtssfX3Bm43%2FqXhuiFKzQyU9sdZjH35Kn1%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;3000&quot; data-filename=&quot;img_blurr.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Went to the restaurant with my son. When going alone or with a child during busy times, there's often an awkward feeling, but thankfully, they kindly guided us. We visited during Sunday lunch hours, and as it was a busy time, there was a kiosk at the front of the store where you could leave your phone number to receive a message about your queue number.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;For a Korean, it's quite convenient, but for foreigners without a local phone number, it might be intimidating to have to walk into the restaurant to make a reservation.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;seating&amp;nbsp;area&amp;nbsp;was&amp;nbsp;spacious&amp;nbsp;as&amp;nbsp;shown&amp;nbsp;in&amp;nbsp;the&amp;nbsp;pictures,&amp;nbsp;which&amp;nbsp;made&amp;nbsp;it&amp;nbsp;very&amp;nbsp;comfortable.&amp;nbsp;The&amp;nbsp;side&amp;nbsp;dishes&amp;nbsp;were&amp;nbsp;neatly&amp;nbsp;arranged&amp;nbsp;in&amp;nbsp;charming&amp;nbsp;dishes,&amp;nbsp;adding&amp;nbsp;an&amp;nbsp;aesthetically&amp;nbsp;pleasing&amp;nbsp;touch.&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 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-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGRKDu/btssgLax3aI/ooZe05D0Liz1gN8LnLsEX1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGRKDu/btssgLax3aI/ooZe05D0Liz1gN8LnLsEX1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGRKDu/btssgLax3aI/ooZe05D0Liz1gN8LnLsEX1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGRKDu%2FbtssgLax3aI%2FooZe05D0Liz1gN8LnLsEX1%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It has become increasingly common to order food through tablets, just like in the pictures. In fact, this trend is somewhat inevitable in Korea as the number of staff decreases over time. However, it's a bit regrettable as it feels like it diminishes the human touch. I used to enjoy trying the dishes recommended by the ajumma (middle-aged lady) at the restaurant,&amp;nbsp; specially when I visited for the first time. But now, having to summon the staff through a tablet diminishes that personal touch and, in reality, makes me a bit hesitant.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진처럼 패드로 음식을 주문하는 게 굉장히 흔해졌다. 사실 이런점은 점점 일하는 사람 수가 줄어드는 한국에서 어쩔 수 없는 현상이지만 인간미가 사라지는 것 같아서 안타깝긴 하다. 예전에는 처음가는 식당에서 아주머니가 추천해주는 음식을 먹곤 했는데 이제는 패드를 통해서 직원을 호출 해야하니 꺼려지는 게 사실 이다.&lt;/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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tevEx/btssfxqzTHD/prlqXUjSIexneskitNjTfK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tevEx/btssfxqzTHD/prlqXUjSIexneskitNjTfK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tevEx/btssfxqzTHD/prlqXUjSIexneskitNjTfK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtevEx%2FbtssfxqzTHD%2FprlqXUjSIexneskitNjTfK%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV8qud/btssbhaJPxz/g0iaCWEm35a7WApPL8JyK1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV8qud/btssbhaJPxz/g0iaCWEm35a7WApPL8JyK1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV8qud/btssbhaJPxz/g0iaCWEm35a7WApPL8JyK1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV8qud%2FbtssbhaJPxz%2Fg0iaCWEm35a7WApPL8JyK1%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuZYzX/btsshnUMun9/ddZYN3r29kSGTSJJX7pf90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuZYzX/btsshnUMun9/ddZYN3r29kSGTSJJX7pf90/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuZYzX/btsshnUMun9/ddZYN3r29kSGTSJJX7pf90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuZYzX%2FbtsshnUMun9%2FddZYN3r29kSGTSJJX7pf90%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYbb8/btssqn0IhR7/nvswiweV06raIaqE0tSS51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYbb8/btssqn0IhR7/nvswiweV06raIaqE0tSS51/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYbb8/btssqn0IhR7/nvswiweV06raIaqE0tSS51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYbb8%2Fbtssqn0IhR7%2FnvswiweV06raIaqE0tSS51%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwu2Wg/btssk9Is7am/5CytTvoMhsCwIXv4pWvhp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwu2Wg/btssk9Is7am/5CytTvoMhsCwIXv4pWvhp0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwu2Wg/btssk9Is7am/5CytTvoMhsCwIXv4pWvhp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwu2Wg%2Fbtssk9Is7am%2F5CytTvoMhsCwIXv4pWvhp0%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;3000&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;I ordered grilled mackerel and salmon hotpot for my meal. Maybe because I was quite hungry, the food tasted delightful. Lately, it seems like local restaurants are finding it hard to compete with franchise eateries. The taste was great, and the place was efficiently managed and clean. As I savored the meal, I felt a sense of rejuvenation(Thanks to DHA and EPA???).&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;It's&amp;nbsp;just&amp;nbsp;my&amp;nbsp;personal&amp;nbsp;opinion,&amp;nbsp;but&amp;nbsp;indulging&amp;nbsp;in&amp;nbsp;grilled&amp;nbsp;fish&amp;nbsp;once&amp;nbsp;a&amp;nbsp;week&amp;nbsp;feels&amp;nbsp;like&amp;nbsp;a&amp;nbsp;comforting&amp;nbsp;remedy&amp;nbsp;for&amp;nbsp;my&amp;nbsp;body,&amp;nbsp;especially&amp;nbsp;after&amp;nbsp;having&amp;nbsp;consumed&amp;nbsp;less&amp;nbsp;healthy&amp;nbsp;food&amp;nbsp;choices.&amp;nbsp;So,&amp;nbsp;I&amp;nbsp;intend&amp;nbsp;to&amp;nbsp;treat&amp;nbsp;myself&amp;nbsp;to&amp;nbsp;this&amp;nbsp;experience&amp;nbsp;from&amp;nbsp;time&amp;nbsp;to&amp;nbsp;time.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;음식은 고등어 구이와 연어 솥밥을 시켰다. 사실 배가 많이 고픈 상태여서 그런지 모르겠지만 맛있었다. 최근에 프랜차이즈 음식점들을 보면 일반 식당들이 이기기 힘들꺼 같긴하다. 맛도 있고 가게도 깔끔하게 효율적으로 돌리고 밥을 먹었는데 건강해지는 느낌이었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;나만의 생각이지만 한주에 한번 생선구이를 먹으면 그동안 나쁜 것을 먹어서 망친 몸에 조금은 위로를 해주는 느낌이 나서 한번씩은 먹으려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;Overall My Personal Assessment of the Restaurant&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;It was a great restaurant to dine with my child. The establishment was spacious, with ample seating, making it comfortable to enjoy our meal. Additionally, the presence of restroom facilities within the restaurant added to the convenience.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Lastly, they prepared healthy dishes beautifully, and most importantly, my child praised the taste, so I'll definitely consider revisiting whenever the opportunity arises.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;One&amp;nbsp;slight&amp;nbsp;drawback&amp;nbsp;was&amp;nbsp;that&amp;nbsp;the&amp;nbsp;staff's&amp;nbsp;friendliness&amp;nbsp;wasn't&amp;nbsp;particularly&amp;nbsp;high.&amp;nbsp;Perhaps&amp;nbsp;it's&amp;nbsp;because&amp;nbsp;it's&amp;nbsp;a&amp;nbsp;bustling&amp;nbsp;area&amp;nbsp;with&amp;nbsp;good&amp;nbsp;business&amp;nbsp;turnover(?),&amp;nbsp;resulting&amp;nbsp;in&amp;nbsp;frequent&amp;nbsp;staff&amp;nbsp;changes.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아이와 함께 먹기 좋은 식당이었다. 가게도 넓고 좌석도 넓어서 먹을 때 편하게 먹을 수 있었다. 그리고 식당 내부에 화장실이 있어서 화장실 가기도 편했다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 건강식을 이쁘게 조리하였고 무엇보다 아이가 맛있다고 극찬을 하여서 다음 번에도 기회가 되면 방문할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;한가지 아쉬운 점은 직원들의 친절도는 높진 않았다. 아마도 번화가에 장사가 잘되는 곳(?)이라서 일하는 사람이 자주 바껴서 그럴지도 모르겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>한국여행(Korean Travel)/맛집(Restaurant)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/770</guid>
      <comments>https://scribblinganything.tistory.com/770#entry770comment</comments>
      <pubDate>Sun, 27 Aug 2023 18:36:51 +0900</pubDate>
    </item>
    <item>
      <title>[Python] flask blueprints란? 예제로 쉽게 이해하기(블루프린트, 파이썬)</title>
      <link>https://scribblinganything.tistory.com/769</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czV1N2/btsrYxEoPyW/yboJxSvDY3jZfkqTb7BIUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czV1N2/btsrYxEoPyW/yboJxSvDY3jZfkqTb7BIUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czV1N2/btsrYxEoPyW/yboJxSvDY3jZfkqTb7BIUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczV1N2%2FbtsrYxEoPyW%2FyboJxSvDY3jZfkqTb7BIUk%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;[Python]&amp;nbsp;flask&amp;nbsp;blueprints란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;blueprint란 왜 사용하지만 알면 쉽게 이해할 수 있습니다. 웹서버를 구축하다 보면 모듈의 구조에 따라 수정을 많이 하는 부분이 있고 적게 하는 부분이 있습니다. 나중에 수정을 쉽게 하기 위해 모듈화를 해놓으면 좋습니다. &lt;b&gt;blueprint란 웹서버의 모듈(Module)화를 가능&lt;/b&gt;하게 해 줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 &lt;b&gt;URL 라우팅을 분리 해주기 때문에 독립적으로 정의&lt;/b&gt;할 수 있습니다. 즉, URL 관리가 효율적입니다. 다음으로 &lt;b&gt;Templates이나 정적 파일을 독립적으로 분류 해서 관리&lt;/b&gt;하기 때문에 이후에 수정이나 찾을 때 유리 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 &lt;b&gt;확장성 측면에서 유리&lt;/b&gt;합니다. 나중에 새로운 기능을 추가하고 싶을 경우 만들어진 모듈에 추가 모듈을 만들면 되기 때문입니다.&amp;nbsp;&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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[Python] flask blueprints 예제 실습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 폴더에서 py, html 파일의 구성은 아래와 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1692834484751&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;├── app.py
├── blueprints/
│   ├── blog/
│   │   ├── __init__.py
│   │   └── routes.py
├── templates/
│   └── blog/
│       └── index.html&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/olw5o/btsr0Zz6wwq/gMO5frjvJPTXDGHkd6Xwg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/olw5o/btsr0Zz6wwq/gMO5frjvJPTXDGHkd6Xwg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/olw5o/btsr0Zz6wwq/gMO5frjvJPTXDGHkd6Xwg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Folw5o%2Fbtsr0Zz6wwq%2FgMO5frjvJPTXDGHkd6Xwg1%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;148&quot; height=&quot;152&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림은 실제 Visual Stuido에서 제가 폴더와 파일로 구별한 화면 입니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;예제 파일: run.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692834596983&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask
from blueprints.blog.routes import blog_bp

app = Flask(__name__)

app.register_blueprint(blog_bp)

if __name__ == '__main__':
    app.run()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6번 라인에서 blog_bp라는 객체를 블루프린트에 등록 해줍니다.&amp;nbsp;&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 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 data-ke-size=&quot;size16&quot;&gt;예제 파일: blueprints/blog/__init__.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692834691184&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Blueprint

blog_bp = Blueprint('blog', __name__)

from . import routes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번 라인: blog_bp를 객체로 선언해줍니다. 이때 Blueprint의 이름은 blog로 설정하였고 이는 다른 Blueprint와 겹치면 안됩니다. __name__은 Blueprint가 속하는 모듈의 이름입니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;예제 파일:&lt;span&gt; blueprints/blog/routes.py&lt;/span&gt;&lt;/span&gt;&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692834913457&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import render_template
from . import blog_bp

@blog_bp.route('/blog')
def index():
    return render_template('blog/index.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 라인: blueprints/blog/__init__.py 이 먼저 실행되므로 거기서 실행된 blog_bp 객체를 가져와서 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4번 라인: 블루프린트 객체는 @골뱅이 문자와 함께 사용합니다. blog에 접속시 blog/index.html을 열어 줍니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;예제 파일:&lt;span&gt;&lt;span&gt; templates/blog/index.html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692835075944&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Blueprint Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Welcome to the Blog&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;This is a simple example of using Flask Blueprints.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&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 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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brtgUD/btsr5VDJ4yT/jM7fp6RLXP5ciKSnp6KKQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brtgUD/btsr5VDJ4yT/jM7fp6RLXP5ciKSnp6KKQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brtgUD/btsr5VDJ4yT/jM7fp6RLXP5ciKSnp6KKQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrtgUD%2Fbtsr5VDJ4yT%2FjM7fp6RLXP5ciKSnp6KKQ0%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;954&quot; height=&quot;404&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[Python] flask blueprints 예제 코드 다운로드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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/LS0be/btsrZjlCW0f/PUuxXIl8oPVtlo27ind6a0/run.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;run.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/clllA6/btsrYzCgaao/SnZylvWH7812ROGfWnH4zk/__init__.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;__init__.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/T8TWV/btsrUrLb8Jj/3hAhl4kHgBqpKre8xTM7v0/routes.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;routes.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b0TP7K/btsr5JiY2GU/K4jTAuKYht0kb0kxkJfnBk/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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 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>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/769</guid>
      <comments>https://scribblinganything.tistory.com/769#entry769comment</comments>
      <pubDate>Thu, 24 Aug 2023 08:59:38 +0900</pubDate>
    </item>
    <item>
      <title>[Python]flask의 errorhandler와 Exception 예제로 이해하기(파이썬)</title>
      <link>https://scribblinganything.tistory.com/768</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AGWgy/btsr3dRDTIu/SeeNhOZKQirXW8w2RsUTbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AGWgy/btsr3dRDTIu/SeeNhOZKQirXW8w2RsUTbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AGWgy/btsr3dRDTIu/SeeNhOZKQirXW8w2RsUTbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAGWgy%2Fbtsr3dRDTIu%2FSeeNhOZKQirXW8w2RsUTbK%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;에러 핸들러와 Exception이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;에러 핸들러는 프로그램이 예상치 못한 에러나 예외 상황을 처리하는 방법을 정의하는 코드 블록&lt;/b&gt;입니다. 이는 프로그램이 실행 중에 발생한 에러를 적절하게 처리하고, 사용자에게 적절한 안내를 제공하거나 시스템을 안정적으로 유지하기 위해 사용됩니다. 에러 핸들러는 프로그램의 다양한 상황에 따라 다양한 종류의 에러를 처리하기 위해 사용됩니다. 보통 HTTP 상태 코드에서 400번대와 500번대는 클라이언트(Client)의 에러를 의미합니다. Errorhandler는 이러한 에러 발생시 동작하는 함수 입니다. 아래 예제를 통해 쉽게 설명하겠습니다.&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;예외(Exception)는 프로그램 실행 중에 발생하는 문제시 동작하게 도와주는 함수 입니다. 이는 프로그램이 예상치 못한 상황에 직면했을 때 발생하며, 예외는 프로그램의 정상적인 흐름을 방해할 수 있습니다. 예를 들어, 파일을 열려고 할 때 해당 파일이 존재하지 않으면 &quot;파일을 찾을 수 없음&quot;이라는 예외가 발생할 수 있습니다. 이러한 예외는 프로그램에서 어떻게 처리할지를 정의하는 코드 블록으로 처리될 수 있습니다. 만일 코드를 작성하고 있었다면 어디서 에러가 발생하는지 메세지를 같이 넣어서 표기할 수 있습니다.&amp;nbsp;&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Flask 에러 핸들러와 Exception 예제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예제는 flask로 백엔드 서버를 동작 시키고 없는 페이지에 접속을 하여서 404 페이지 없음 에러를 발생시키고 errorhandler에서 정상적으로 처리하는지 알아보겟습니다.&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;그리고 /error 페이지에 접속시 강제로 Exception 에러를 발생 시키고 에러 메세지를 띄워 보겠습니다.&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 data-ke-size=&quot;size16&quot;&gt;예제 코드 app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692746460158&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return &quot;Hello, Flask Error Handling Example!&quot;

@app.route('/error')
def trigger_error():
    # 아무 의미 없는 500 Internal Server Error를 강제로 발생시킵니다.
    raise Exception(&quot;This is a forced exception!&quot;)

# 404 에러를 처리하는 커스텀 error handler입니다.
@app.errorhandler(404)
def not_found_error(error):
    return render_template('404.html'), 404

if __name__ == '__main__':
    app.run(debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9~12번 라인: Exception을 사용해서 강제 에러를 발생시키고 메세지를 웹브라우져에 출력해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15~17번 라인: 404 에러 발생시 not_found_error 함수가 실행됨&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 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 data-ke-size=&quot;size16&quot;&gt;예제 코드 404.html&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692746484564&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;404 - Page Not Found&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;The requested page does not exist.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 app.py에서 실행시킨 not_found_error함수로 인해 404.html이 실행됨.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;404페이지를 꾸미고 싶을 때 사용하면 됨.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cznDcn/btsrVrKhAMf/Dmh128uFVXYh1jU7MpPMoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cznDcn/btsrVrKhAMf/Dmh128uFVXYh1jU7MpPMoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cznDcn/btsrVrKhAMf/Dmh128uFVXYh1jU7MpPMoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcznDcn%2FbtsrVrKhAMf%2FDmh128uFVXYh1jU7MpPMoK%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;954&quot; height=&quot;521&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mipah/btsr3dD6Rfl/fxZEFg63xbwKrRjFKWAKQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mipah/btsr3dD6Rfl/fxZEFg63xbwKrRjFKWAKQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mipah/btsr3dD6Rfl/fxZEFg63xbwKrRjFKWAKQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMipah%2Fbtsr3dD6Rfl%2FfxZEFg63xbwKrRjFKWAKQ0%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;954&quot; height=&quot;521&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Flask&lt;span&gt;&amp;nbsp;&lt;/span&gt;에러 핸들러와 Exception 예제 코드 다운로드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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/bhgdW1/btsrR4vvhhJ/kvOmWMU4gKaOOpFxu87a61/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/WS7DG/btsrUpMuUCE/NEspeO7WzzhPZADMFceNtk/404.html?attach=1&amp;amp;knm=tfile.html&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;404.html&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 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>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/768</guid>
      <comments>https://scribblinganything.tistory.com/768#entry768comment</comments>
      <pubDate>Wed, 23 Aug 2023 08:26:16 +0900</pubDate>
    </item>
    <item>
      <title>[Python]flask의 cors란? 예제를 통해 차이점 이해하기(flask_cors, 파이썬)</title>
      <link>https://scribblinganything.tistory.com/767</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biy6kB/btsrBptkOEx/6D06wqgb5QAqMUV7hkAHe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biy6kB/btsrBptkOEx/6D06wqgb5QAqMUV7hkAHe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biy6kB/btsrBptkOEx/6D06wqgb5QAqMUV7hkAHe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiy6kB%2FbtsrBptkOEx%2F6D06wqgb5QAqMUV7hkAHe1%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[Python]flask의&amp;nbsp;cors란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션에서 보안 상의 이유로 다른 도메인에서 리소스에 접근하는 것을 제한하는 브라우저 정책입니다. 동일 출처 정책(Same-Origin Policy)에 의해 웹 페이지는 자신과 동일한 출처에서만 리소스를 로드하도록 제한되어 있습니다. 이는 보안을 유지하고 악의적인 코드로부터 사용자 데이터를 보호하기 위한 중요한 기능입니다.&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;CORS는 이러한 제한을 느슨하게 만들어 다른 도메인에서도 웹 페이지 리소스에 접근할 수 있도록 하는 메커니즘입니다. 서버 측에서 CORS 정책을 설정하면 특정 도메인들로부터의 요청을 수락하게 되며, 이를 통해 다른 도메인에서 웹 서버에 요청을 보내고 응답을 받을 수 있습니다.&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;Flask-CORS는 Flask 애플리케이션에서 CORS를 구현하기 위한 도구로, CORS 정책을 쉽게 설정하고 관리할 수 있도록 도와줍니다. Flask-CORS를 사용하는 경우는 다음과 같습니다:&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;API 서버 구축: 만약 Flask를 사용하여 RESTful API 서버를 구축하고 있고, 다른 도메인의 웹 애플리케이션에서 이 API에 접근해야 할 경우에 Flask-CORS를 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;싱글 페이지 애플리케이션(SPA): 웹 애플리케이션이 싱글 페이지 애플리케이션인 경우, 서버와 클라이언트가 다른 도메인에 있을 수 있습니다. 이때 클라이언트 애플리케이션이 서버의 API에 접근해야 할 때 Flask-CORS를 사용할 수 있습니다.&lt;/p&gt;
&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;페이지에서&amp;nbsp;활용하려면,&amp;nbsp;해당&amp;nbsp;도메인에서&amp;nbsp;서버에&amp;nbsp;접근이&amp;nbsp;가능하도록&amp;nbsp;CORS를&amp;nbsp;설정해야&amp;nbsp;합니다.&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;간단히 정리하면 CORS는 해킹에 대한 보안 정책으로 HTTP페이지에서 다른 서버로 접속할때 차단해줍니다. 이때 일반적인 접속은 허용해주지만 &amp;lt;script&amp;gt;에 포함된 명령 중에 다른 서버로 접속 하려고 할때 차단이 발생합니다. 아래 예제를 읽어 보시면 쉽게 이해할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제를 통해 차이점 이해하기(flask_cors)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제코드- app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692576875530&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)

# 모든 경로에 대해 CORS 설정을 허용합니다.
CORS(app)

@app.route('/')
def index():
    data = {'message': '안녕하세요! CORS 문제가 없는 데이터입니다.'}
    return jsonify(data)

if __name__ == '__main__':
    app.run()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2, 4번 라인을 통해 cors를 flask 환경에서 실행해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9~13번 라인: 서버에 접속 시 json 형태로 데이터를 전달합니다.&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드-index.html&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692577085923&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;CORS 예제&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;CORS 예제&amp;lt;/h1&amp;gt;
    &amp;lt;script&amp;gt;
        fetch('http://127.0.0.1:5000/')
            .then(response =&amp;gt; response.json())
            .then(data =&amp;gt; {
                console.log(data.message);
            })
            .catch(error =&amp;gt; {
                console.error('데이터 가져오기 실패:', error);
            });
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 html 파일은 go live와 같은 프로그램으로 다른 서버로 동작 시킵니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC9Wm1/btsrCSBwzzJ/ZNME16n4Heq9Hrh5HGIXuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC9Wm1/btsrCSBwzzJ/ZNME16n4Heq9Hrh5HGIXuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC9Wm1/btsrCSBwzzJ/ZNME16n4Heq9Hrh5HGIXuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC9Wm1%2FbtsrCSBwzzJ%2FZNME16n4Heq9Hrh5HGIXuk%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;954&quot; height=&quot;521&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html은 5500포트에서 동작했고 flask는 5000포트에서 동작합니다. 서로 다른 포트에서 동작 했고 console.log로 정상적으로 값이 출력되었음을 확인할 수 있습니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd curl로 헤더값(header) 확인하기&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692577236214&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\Users\forgo&amp;gt;curl -i http://127.0.0.1:5000/
HTTP/1.1 200 OK
Server: Werkzeug/2.3.6 Python/3.11.1
Date: Mon, 21 Aug 2023 00:20:05 GMT
Content-Type: application/json
Content-Length: 121
Access-Control-Allow-Origin: *
Connection: close

{&quot;message&quot;:&quot;\uc548\ub155\ud558\uc138\uc694! CORS \ubb38\uc81c\uac00 \uc5c6\ub294 \ub370\uc774\ud130\uc785\ub2c8\ub2e4.&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 윈도우(window) 커맨드 창에서 curl을 사용해서 http get 요청을 보냈고 위와 같은 값을 받습니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;Access-Control-Allow-Origin:&amp;nbsp;*&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;위 내용이 CROS를 허용하게 해주는 헤더 입력 값이 됩니다.&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제 코드 다운로드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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/lCzHc/btsrDdezIL6/vkAWGKwUJ5JbVWHrTK9tB0/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ebXRk4/btsrNl3FzI8/NjKOgOuVIMLEDNiK4jYxk1/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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;</description>
      <category>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/767</guid>
      <comments>https://scribblinganything.tistory.com/767#entry767comment</comments>
      <pubDate>Mon, 21 Aug 2023 09:22:44 +0900</pubDate>
    </item>
    <item>
      <title>[Python]vue, axios란? 간단한 console 출력 예제 실습으로 이해하기(flask, 파이썬, log)</title>
      <link>https://scribblinganything.tistory.com/766</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wZiSD/btsrqDyxI8d/s57GN9ZKr6yKJrKULZkDB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wZiSD/btsrqDyxI8d/s57GN9ZKr6yKJrKULZkDB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wZiSD/btsrqDyxI8d/s57GN9ZKr6yKJrKULZkDB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwZiSD%2FbtsrqDyxI8d%2Fs57GN9ZKr6yKJrKULZkDB1%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;[Python]vue,&amp;nbsp;axios란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Vue.js는 사용자 인터페이스를 구축하기 위한 framework&lt;/b&gt;입니다. 즉, 작은 부분부터 점진적으로 도입하고 복잡한 웹 애플리케이션까지 구축할 수 있습니다. Vue.js는 화면을 구성하는 데 사용되며, 데이터 바인딩, 컴포넌트 기반 아키텍처, 라우팅, 상태 관리 등을 지원합니다. Vue는 프런트엔드 개발을 간소화하고 높은 가독성과 유연성을 제공하는데 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Axios는&amp;nbsp;웹&amp;nbsp;브라우저&amp;nbsp;및&amp;nbsp;Node.js&amp;nbsp;환경에서&amp;nbsp;HTTP&amp;nbsp;요청을&amp;nbsp;수행하는&amp;nbsp;JavaScript&amp;nbsp;라이브러리&lt;/b&gt;입니다.&amp;nbsp;이&amp;nbsp;라이브러리를&amp;nbsp;사용하여&amp;nbsp;서버와&amp;nbsp;통신하거나&amp;nbsp;API&amp;nbsp;요청을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;Axios는&amp;nbsp;XMLHttpRequest&amp;nbsp;또는&amp;nbsp;Fetch&amp;nbsp;API와&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;데&amp;nbsp;사용됩니다.&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 data-ke-size=&quot;size16&quot;&gt;간단하게 정리하면 vue와 axios는 자바스크립트 언어로 구성된 라이브러리라고 생각할 수 있습니다. 그리고 vue는 프론트엔드(frontend)를 구성해서 서버에 접속할 필요없이 프론트 단에서 함수 구현 등을 쉽게 처리 할 수 있습니다. 그리고 axios는 프론트 단에서 다른 서버로 접속을 도와 주는 통신 프로토콜과 같은 동작을 합니다. 해당 내용은 제가 경험하면서 생각한 내용을 정리한 것이라 틀린 부분이 있을 수 있지만 아래 예제 코드를 통해 이해해보시면 쉽게 이해할 수 있습니다.&amp;nbsp;&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;간단한 console 출력 vue, axios&amp;nbsp;예제&amp;nbsp;실습&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드 app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692317552083&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/api/data', methods=['POST'])
def get_data():
    data = request.json  # 클라이언트로부터 받은 JSON 데이터
    return jsonify(data)

if __name__ == '__main__':
    app.run(host=&quot;0.0.0.0&quot;, port=&quot;5000&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flask_cors는 해킹을 방지하기 위해 cross xml을 막는 것을 피하기 위해 사용합니다. 간단하게 설명 드리면 아래 html 코드에서 axios를 사용해서 다른 서버로 접속할 것인데 이때 cors를 설정하지 않으면 에러가 발생하게 됩니다. 이를 막기 위해 2번과 5번 라인 처럼 정의 해줍니다.&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;7~10번 라인은 post로 받은 값을 다시 json 형태로 return 해줍니다.&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 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 data-ke-size=&quot;size16&quot;&gt;예제 코드 index.html&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692317743093&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Axios Console Log Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;button id=&quot;getDataButton&quot;&amp;gt;Get Data from Flask&amp;lt;/button&amp;gt;

    &amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script&amp;gt;
        const getDataButton = document.getElementById('getDataButton');

        getDataButton.addEventListener('click', async () =&amp;gt; {
            try {
                const response = await axios.post(&quot;http://localhost:5000/api/data&quot;, { message: 'Hello from Axios!' });
                console.log('Response from Flask:', response.data);
            } catch (error) {
                console.error('Error:', error);
            }
        });
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9번 라인: axios를 사용하기 위해 cdn으로 불러옵니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13~20번 라인: 버튼 클릭시 함수가 실행됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 html은 go live로 다른 서버로 동작 시키고 app.py는 flask로 5000포트에서 동작 시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15번 라인: 버튼을 클릭하게 되면 5000포트의 서버에 접속해서 post 형식으로 메세지를 전달 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16번 라인: 그리고 응답으로 받은 값을 console.log로 출력 해줍니다.&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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O4pT4/btsrwCrwbnq/Do7SOdHhcKN6iWJO8YHVL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O4pT4/btsrwCrwbnq/Do7SOdHhcKN6iWJO8YHVL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O4pT4/btsrwCrwbnq/Do7SOdHhcKN6iWJO8YHVL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO4pT4%2FbtsrwCrwbnq%2FDo7SOdHhcKN6iWJO8YHVL0%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;702&quot; height=&quot;521&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;vue, axios 예제 실습 코드 다운로드&lt;/h3&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/bTqQco/btsrqFpyl18/qEOklCkZbaTfAx1UHyayH1/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/qXQBm/btsrrdzuhyv/r96JDmZdrkcixllHbTMxx1/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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;</description>
      <category>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/766</guid>
      <comments>https://scribblinganything.tistory.com/766#entry766comment</comments>
      <pubDate>Fri, 18 Aug 2023 09:20:48 +0900</pubDate>
    </item>
    <item>
      <title>[Python] flask Jinja2 for문, if문, 리스트 출력 예제 실습 및 풀이</title>
      <link>https://scribblinganything.tistory.com/765</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/89eaZ/btsrra2RW69/K4gRUhrg7k19KAwKYMcnKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/89eaZ/btsrra2RW69/K4gRUhrg7k19KAwKYMcnKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/89eaZ/btsrra2RW69/K4gRUhrg7k19KAwKYMcnKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F89eaZ%2Fbtsrra2RW69%2FK4gRUhrg7k19KAwKYMcnKK%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;[Python]&amp;nbsp;flask&amp;nbsp;Jinja2&amp;nbsp;for문,&amp;nbsp;리스트&amp;nbsp;출력&amp;nbsp;예제&amp;nbsp;실습&amp;nbsp;및&amp;nbsp;풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 포스트에서 Jinja2에 대해 알아보겠습니다. 이번에는 for문을 출력하는 예제를 통해 사용법을 한번 더 익혀 보겠습니다.&amp;nbsp;&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;예제 코드 - app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692228628796&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    data_list = ['Apple', 'Banana', 'Cherry', 'Date', 'Grape']
    return render_template('index.html', data_list=data_list)

if __name__ == '__main__':
    app.run(debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7번 라인에서 data_list로 리스트를 만들어서 render_template를 사용해서 index.html에 해당 리스트를 전달 해줍니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692228684478&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Flask Jinja2 Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Fruits List&amp;lt;/h1&amp;gt;
    &amp;lt;ul&amp;gt;
        {% for fruit in data_list %}
        &amp;lt;li&amp;gt;{{ loop.index }}. {{ fruit }}&amp;lt;/li&amp;gt;
        {% endfor %}
    &amp;lt;/ul&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 app.py에서 전달한 data_list 리스트 값을 8~12번 라인의 명령을 통해 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9번 라인에서 fruit 값을 리스트에서 for문을 사용해서 출력 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10번 라인의 loop.index는 리스트의 인덱스 값을 가져와 줍니다.&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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KVjMB/btsrkPSKwjh/OyswDHKm2Frg67HjS7Dqqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KVjMB/btsrkPSKwjh/OyswDHKm2Frg67HjS7Dqqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KVjMB/btsrkPSKwjh/OyswDHKm2Frg67HjS7Dqqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKVjMB%2FbtsrkPSKwjh%2FOyswDHKm2Frg67HjS7Dqqk%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;954&quot; height=&quot;418&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[Python] flask Jinja2 for문, 리스트 출력 예제 다운로드&lt;/h3&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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/nrxWA/btsrtfbtpAb/47APk8csSe30i8kTPdtAhk/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bW4BlY/btsrq6e3iuM/kaVLW0de3yZgcWcYgjUs41/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[Python] flask Jinja2 if문, 리스트 출력 예제 실습 및 풀이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드 - app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692229109775&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    fruit = 'Apple'
    return render_template('index.html', fruit=fruit)

if __name__ == '__main__':
    app.run(debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 fruit라는 문자열 변수만을 전달 합니다.&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 data-ke-size=&quot;size16&quot;&gt;예제 코드 - index.html&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692229140292&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Flask Jinja2 If Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Fruit Example&amp;lt;/h1&amp;gt;
    {% if fruit == 'Apple' %}
    &amp;lt;p&amp;gt;The selected fruit is an apple.&amp;lt;/p&amp;gt;
    {% else %}
    &amp;lt;p&amp;gt;The selected fruit is not an apple.&amp;lt;/p&amp;gt;
    {% endif %}
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문을 사용해서 Apple 문자열이 맞을 경우와 아닐 경우에 대해 출력을 해줍니다.&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 data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BZlgs/btsrgr6bECK/xYu2VarDvUjhsXLBUnjpLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BZlgs/btsrgr6bECK/xYu2VarDvUjhsXLBUnjpLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BZlgs/btsrgr6bECK/xYu2VarDvUjhsXLBUnjpLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBZlgs%2Fbtsrgr6bECK%2FxYu2VarDvUjhsXLBUnjpLK%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;954&quot; height=&quot;392&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;[Python] flask Jinja2 if문, 리스트 출력 예제 다운로드&lt;/h3&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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ccok4O/btsrrcGkstU/JKjcFSdeKJHO1XnkzvW6Kk/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bAJ21n/btsrq6lRXEF/sBsTAK0VWgvjwKHHQ7pnyK/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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 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 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>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/765</guid>
      <comments>https://scribblinganything.tistory.com/765#entry765comment</comments>
      <pubDate>Thu, 17 Aug 2023 08:33:24 +0900</pubDate>
    </item>
    <item>
      <title>[전기자전거 리뷰] 접이식 Yimaida K-Cross M-23(ebike, 출퇴근용)</title>
      <link>https://scribblinganything.tistory.com/764</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbHGJ5/btsq8KxIgXt/Y2ohwSK8L9TTOBBFvFEd0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbHGJ5/btsq8KxIgXt/Y2ohwSK8L9TTOBBFvFEd0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbHGJ5/btsq8KxIgXt/Y2ohwSK8L9TTOBBFvFEd0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbHGJ5%2Fbtsq8KxIgXt%2FY2ohwSK8L9TTOBBFvFEd0k%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;544&quot; height=&quot;436&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;[전기자전거&amp;nbsp;리뷰]&amp;nbsp;접이식&amp;nbsp;Yimaida&amp;nbsp;K-Cross&amp;nbsp;M-23&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdz1d3/btsrgT1oQfh/zYfz0s46i7Nz8LKpSGDOY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdz1d3/btsrgT1oQfh/zYfz0s46i7Nz8LKpSGDOY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdz1d3/btsrgT1oQfh/zYfz0s46i7Nz8LKpSGDOY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdz1d3%2FbtsrgT1oQfh%2FzYfz0s46i7Nz8LKpSGDOY1%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;634&quot; height=&quot;279&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yimaida K-Cross M-23 전기자전거는 혁신적인 디자인과 강력한 성능으로 주목받고 있는 제품입니다. 이 &lt;b&gt;자전거는 공장에서 자체 제작되어 중간 마케팅 비용과 유통비용을 절감하여 소비자에게 합리적인 가격으로 제공&lt;/b&gt;됩니다. 이로 인해 예산을 고려하면서도 높은 품질의 전기자전거를 선택할 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 &lt;b&gt;강점 중 하나는 6개월 동안의 무상 AS 서비스가 제공된다는 점&lt;/b&gt;입니다. 이는 제품의 신뢰성을 뒷받침하며, 사용자가 안심하고 제품을 사용할 수 있도록 도와줍니다. 게다가 제품 구매 이후에도 &lt;b&gt;국내 AS가 가능&lt;/b&gt;하다는 점은 장기적인 관점에서도 신뢰성을 보장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r1yGq/btsrpaONEf7/7T6lLai5SvaP11f4Vvx7NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r1yGq/btsrpaONEf7/7T6lLai5SvaP11f4Vvx7NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r1yGq/btsrpaONEf7/7T6lLai5SvaP11f4Vvx7NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr1yGq%2FbtsrpaONEf7%2F7T6lLai5SvaP11f4Vvx7NK%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;376&quot; height=&quot;277&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;277&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Yimaida K-Cross M-23의 성능 또한 탁월합니다. 48V &lt;b&gt;400W 모터를 장착하여 강력한 모터 파워&lt;/b&gt;를 제공합니다. 이는 다양한 지형에서 원활한 주행과 빠른 가속력을 경험할 수 있음을 의미합니다. 또한 스&lt;b&gt;마트 디스플레이를 통해 시속, 온도, 주행거리, 주행시간 등을 실시간으로 확인&lt;/b&gt;할 수 있다는 것은 사용자 편의성을 극대화하며 주행 정보를 손쉽게 접할 수 있게 도와줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b084nx/btsrgU65nlh/nATqY34w4ksUDcZFYXJwYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b084nx/btsrgU65nlh/nATqY34w4ksUDcZFYXJwYK/img.png&quot; data-alt=&quot;도난 방지 스마트 키&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b084nx/btsrgU65nlh/nATqY34w4ksUDcZFYXJwYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb084nx%2FbtsrgU65nlh%2FnATqY34w4ksUDcZFYXJwYK%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;214&quot; height=&quot;162&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;248&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;이 자전거의 특장점 중 하나는 &lt;b&gt;스마트키와 도난장치가 기본&lt;/b&gt;으로 제공된다는 점입니다. 이로써 사용자는 자전거의 보안을 강화할 수 있으며, 안심하고 자전거를 보관할 수 있습니다. 또한 다양한 &lt;b&gt;주행 환경에 맞춰 3단계로 조절 가능한 속도 조절&lt;/b&gt; 기능과 파스, 스로츨, 무전력 등 다양한 주행 모드를 선택할 수 있다는 것은 사용자의 주행 스타일과 선호에 맞게 자유롭게 조정할 수 있음을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, &lt;b&gt;배터리 탈부착이 가능하다는 점은 긴 주행을 원하는 사용자에게 편의성을 제공&lt;/b&gt;합니다. 필요에 따라 배터리를 교체하거나 추가 배터리를 준비하여 더욱 먼 거리를 주행할 수 있도록 도와줍니다.&lt;/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;Yimaida&amp;nbsp;K-Cross&amp;nbsp;M-23&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;전기자전거를&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;제가 생각한 Yimaida K-Cross M-23 전기자전거의 장점은 일반적인 전기 자전거가 가진 장점을 제외하고 6개월간 2번의 무상 수리가 가능하다는 점과 국내에서 AS가 가능한점입니다. 그리고 도난 방지 시스템을 가지고 있다는 점이 다른 전기 자전거에 비해 Yimaida K-Cross M-23 전기자전거가 가지는 별도의 장점&lt;/span&gt;이라고 생각 되네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;접이식 Yimaida K-Cross M-23 쿠파 구매 링크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 쿠팡에서 전기 자전거 부분에서 1위 제품으로 &lt;b&gt;기본 버전(10Ah, 480wh, 20~50km)은 14% 할인된 최저가 429,000원에 판매 중&lt;/b&gt;입니다. &lt;b&gt;그 외에 다양한 용량&lt;/b&gt;이 있으니 관심 있으시면 아래 링크를 통해 구매 해보시면 됩니다. :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/6Vro2&quot;&gt;https://link.coupang.com/a/6Vro2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1692144172455&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;크로스 48V 400W 접이식 전기자전거&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/6Vro2&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6525038347&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbemsF/hyTCIkcgkH/Z3femB25xxhR6MCMMWXwh0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/v1RNz/hyTFnzrvKv/gPFhivzhGvtEkRkOQlxOhk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/6Vro2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/6Vro2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbemsF/hyTCIkcgkH/Z3femB25xxhR6MCMMWXwh0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/v1RNz/hyTFnzrvKv/gPFhivzhGvtEkRkOQlxOhk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;크로스 48V 400W 접이식 전기자전거&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>제품 리뷰(Review), 구매 후기/IT제품 리뷰(review)</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/764</guid>
      <comments>https://scribblinganything.tistory.com/764#entry764comment</comments>
      <pubDate>Wed, 16 Aug 2023 09:04:41 +0900</pubDate>
    </item>
    <item>
      <title>[Python]flask와 Jinja2 사용해서 변수 출력하기 예제(Variable)</title>
      <link>https://scribblinganything.tistory.com/763</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;book-toc&quot;&gt;
&lt;p data-ke-size=&quot;size25&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;/div&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoSiS0/btsroJ4KMIj/eyTzvyc5glJgDKczWgDvq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoSiS0/btsroJ4KMIj/eyTzvyc5glJgDKczWgDvq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoSiS0/btsroJ4KMIj/eyTzvyc5glJgDKczWgDvq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoSiS0%2FbtsroJ4KMIj%2FeyTzvyc5glJgDKczWgDvq1%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;1200&quot; height=&quot;470&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;파이썬 Jinja2란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jinja2는 파이썬 기반의 템플릿 엔진입니다. 템플릿 엔진은 웹 애플리케이션에서 동적으로 생성되는 HTML, XML, JSON 등의 문서를 만들기 위해 사용됩니다. &lt;b&gt;Jinja2는 템플릿과 데이터를 결합하여 동적인 컨텐츠를 생성하고 출력하는 작업을 간편하게 할 수 있도록 도와줍니다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;언제 Jinja2를 사용할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 분리된 로직과 디자인&lt;/b&gt;: Jinja2를 사용하면 프로그래밍 로직과 디자인(템플릿)을 분리할 수 있습니다. 이로써 개발자와 디자이너가 서로 독립적으로 작업할 수 있으며, 디자인의 변경이 로직에 영향을 미치지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 동적 컨텐츠 생성&lt;/b&gt;: Jinja2를 사용하면 웹 페이지에 &lt;span style=&quot;color: #ee2323;&quot;&gt;동적으로 데이터를 삽입&lt;/span&gt;할 수 있습니다. 예를 들어, 사용자 이름, 프로필 정보, 뉴스 항목 등을 동적으로 생성하여 보여줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 코드 재사용&lt;/b&gt;: 템플릿은 반복되는 HTML 코드를 효율적으로 재사용할 수 있도록 도와줍니다. 템플릿 내에서 반복문과 조건문을 사용하여 일관된 형식으로 컨텐츠를 생성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 보안&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;Jinja2는 기본적으로 XSS(Cross-Site Scripting) 공격을 방지&lt;/span&gt;하기 위해 안전한 HTML 출력을 생성합니다. 사용자 입력을 이용해 생성되는 컨텐츠를 처리할 때 보안에 도움이 됩니다.&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;5. 확장 가능: Jinja2는 확장 가능한 템플릿 문법을 제공하여 필요에 따라 사용자 지정 템플릿 태그나 필터를 만들 수 있습니다.&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 data-ke-size=&quot;size16&quot;&gt;Jinja2는&amp;nbsp;다양한&amp;nbsp;웹&amp;nbsp;프레임워크에서&amp;nbsp;사용되며,&amp;nbsp;특히&amp;nbsp;Flask와&amp;nbsp;함께&amp;nbsp;많이&amp;nbsp;사용됩니다.&amp;nbsp;&lt;b&gt;Flask는&amp;nbsp;Jinja2를&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;/b&gt;.&amp;nbsp;Jinja2의&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;수&amp;nbsp;있습니다.&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 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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파이썬 Jinja2 예제 코드 실습 및 주석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드- app.py&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692142278502&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    # 변수를 설정하고 HTML 템플릿으로 전달
    user_name = &quot;John&quot;
    age = 25
    hobbies = [&quot;Reading&quot;, &quot;Gaming&quot;, &quot;Cooking&quot;]

    return render_template('index.html', name=user_name, age=age, hobbies=hobbies)

if __name__ == '__main__':
    app.run(debug=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;user_name, age, hobbies 변수의 값을 백엔드(Backend)에서 생성하고 이를 render_template를 사용해서 html에 전달합니다. 그러면 프론트엔드(Frontend)에서 변수를 사용할 수 있게 됩니다.&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 코드 - index.html&amp;gt;&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692142305923&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Flask Jinja2 Example&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello, {{ name }}!&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;Your age is {{ age }}.&amp;lt;/p&amp;gt;
    
    &amp;lt;h2&amp;gt;Hobbies:&amp;lt;/h2&amp;gt;
    &amp;lt;ul&amp;gt;
        {% for hobby in hobbies %}
            &amp;lt;li&amp;gt;{{ hobby }}&amp;lt;/li&amp;gt;
        {% endfor %}
    &amp;lt;/ul&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jinja2 문법은 간단하게 변수는 괄호 {{ }}에 표기하고 조건문은 {% %}에 표기 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html 내에서 backend에서 받은 변수 값을 jinja2를 사용해서 출력 합니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PNOi7/btsrpanI63b/FqM31ipOaGWL6Q98RnrKxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PNOi7/btsrpanI63b/FqM31ipOaGWL6Q98RnrKxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PNOi7/btsrpanI63b/FqM31ipOaGWL6Q98RnrKxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPNOi7%2FbtsrpanI63b%2FFqM31ipOaGWL6Q98RnrKxK%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;649&quot; height=&quot;415&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파이썬 Jinja2 예제 코드 다운로드&lt;/h3&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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b4BLIW/btsq7bI8loU/bj7ZsEmva6sq48GCTdk3a0/app.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;app.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;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/nLYTY/btsq7bbg3nm/v0145BsYgFfqYkMEXnuL2K/index.html?attach=1&amp;amp;knm=tfile.html&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;index.html&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 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>파이썬(Python)/Flask</category>
      <author>끄적끄적아무거나</author>
      <guid isPermaLink="true">https://scribblinganything.tistory.com/763</guid>
      <comments>https://scribblinganything.tistory.com/763#entry763comment</comments>
      <pubDate>Wed, 16 Aug 2023 08:36:05 +0900</pubDate>
    </item>
  </channel>
</rss>