<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>뻔뻔한 개발자</title>
    <link>https://funfunit.tistory.com/</link>
    <description>IT 그리고 일상 관련 글을 쓰고자 합니다. </description>
    <language>ko</language>
    <pubDate>Thu, 9 Jul 2026 20:37:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>뻔뻔한 개발자</managingEditor>
    <image>
      <title>뻔뻔한 개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/3304544/attach/f0d82623d1ca41bcaa3e4d7bafc30620</url>
      <link>https://funfunit.tistory.com</link>
    </image>
    <item>
      <title>삼세페를 활용해서 신혼 장만하기!</title>
      <link>https://funfunit.tistory.com/265</link>
      <description>&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;삼성과 엘지 제품을 고민하던 중, 각 가전 별(TV, 에어컨, 세탁기, 냉장고) 장단점을 비교한 결과, &lt;b&gt;삼성이 우리에게 적합하다&lt;/b&gt;는 사실을 알았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에는, &lt;b&gt;삼성스토어 7군데&lt;/b&gt;를 이틀 간 돌아다녔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240130_174911309.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEw5UA/btsEixKTiWu/LeK72KPfGyMRpM169bRSe0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEw5UA/btsEixKTiWu/LeK72KPfGyMRpM169bRSe0/img.jpg&quot; data-alt=&quot;삼성스토어 권선 리뉴얼 - 그랜드 오픈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEw5UA/btsEixKTiWu/LeK72KPfGyMRpM169bRSe0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEw5UA%2FbtsEixKTiWu%2FLeK72KPfGyMRpM169bRSe0%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;1152&quot; height=&quot;1536&quot; data-filename=&quot;KakaoTalk_20240130_174911309.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼성스토어 권선 리뉴얼 - 그랜드 오픈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 핵심은, &lt;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;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;그랜드 오픈을 노려라!&lt;/b&gt;&lt;/h2&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;b&gt;할인&lt;/b&gt;이 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, &lt;b&gt;신혼 할인&lt;/b&gt;이 중복 적용되어서 7군데 중 가장 싼 곳(삼성스토어 권선점)에서 계약했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20240130_174911309_01.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W3Z6y/btsEdIAyfHi/Y1jfstdWaz812cL72eSxnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W3Z6y/btsEdIAyfHi/Y1jfstdWaz812cL72eSxnk/img.jpg&quot; data-alt=&quot;세탁기/건조기는 일체형 타워를 선택했다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W3Z6y/btsEdIAyfHi/Y1jfstdWaz812cL72eSxnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW3Z6y%2FbtsEdIAyfHi%2FY1jfstdWaz812cL72eSxnk%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;1152&quot; height=&quot;1536&quot; data-filename=&quot;KakaoTalk_20240130_174911309_01.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;세탁기/건조기는 일체형 타워를 선택했다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매한 상품은&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;냉온 정수기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공기청정기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;냉장고&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;세탁기/건조기 일체형&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스마트모니터(삼탠바이미)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;큐커(에어프라이기 / 그릴 / 전자레인지 결합)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;75인치 TV&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;슈퍼슬림 사운드 바 + 우퍼&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무풍 스탠드 에어컨 + 벽걸이 에어컨(2 in 1)&lt;/b&gt;&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-filename=&quot;KakaoTalk_20240130_174911309_02.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SPPSm/btsEiimM8CS/aekpCQXgolYHd9WwEnCSg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SPPSm/btsEiimM8CS/aekpCQXgolYHd9WwEnCSg1/img.jpg&quot; data-alt=&quot;냉장고를 샀더니 정수기를 주더라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SPPSm/btsEiimM8CS/aekpCQXgolYHd9WwEnCSg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSPPSm%2FbtsEiimM8CS%2FaekpCQXgolYHd9WwEnCSg1%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;1152&quot; height=&quot;1536&quot; data-filename=&quot;KakaoTalk_20240130_174911309_02.jpg&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;냉장고를 샀더니 정수기를 주더라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 물품들을 가장 싸게 구매할 수 있던 곳이 이 곳 삼성스토어 권선점이고&lt;/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&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQh8il/btsEhn95sSp/u5Leq8TFIHzOgXu5D3YKu0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1536&quot; data-filename=&quot;KakaoTalk_20240130_174911309_03.jpg&quot; /&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; data-ke-style=&quot;alignCenter&quot;&gt;
&lt;figcaption&gt;비스포크 개 이쁘다 / 색 조합하는 맛이 있다&lt;/figcaption&gt;
&lt;/figure&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;&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;그렇다. 나는 어쩔 수 없는 자본주의의 노예이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start;&quot;&gt;'이벤트 참여를 위하여 작성하였습니다.'&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <category>갤럭시</category>
      <category>삼성스토어</category>
      <category>삼세페</category>
      <category>스마트싱스</category>
      <category>키워드후기챌린지</category>
      <category>후기이벤트</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/265</guid>
      <comments>https://funfunit.tistory.com/265#entry265comment</comments>
      <pubDate>Wed, 31 Jan 2024 22:34:43 +0900</pubDate>
    </item>
    <item>
      <title>[java] 이메일 정규식 체크하기</title>
      <link>https://funfunit.tistory.com/264</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFEOIe/btshaquHcOz/IrzTwKL8DzjH4bZyk8x5pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFEOIe/btshaquHcOz/IrzTwKL8DzjH4bZyk8x5pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFEOIe/btshaquHcOz/IrzTwKL8DzjH4bZyk8x5pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFEOIe%2FbtshaquHcOz%2FIrzTwKL8DzjH4bZyk8x5pk%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;441&quot; height=&quot;220&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1684889136053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 /**
 * Comment  : 정상적인 이메일 인지 검증.
 */

String address = &quot;abc@de.fg&quot;

String regex = &quot;^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$&quot;;   
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(email);

if(m.matches()) {
    logger.info(address + &quot;: 정상&quot; );
}else{
    logger.info(address + &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;테스트 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YNYBr/btsg96XJ4oN/Z4Jhlit7GJIv5XTrgl5mfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YNYBr/btsg96XJ4oN/Z4Jhlit7GJIv5XTrgl5mfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YNYBr/btsg96XJ4oN/Z4Jhlit7GJIv5XTrgl5mfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYNYBr%2Fbtsg96XJ4oN%2FZ4Jhlit7GJIv5XTrgl5mfk%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;135&quot; height=&quot;91&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://solbel.tistory.com/309&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://solbel.tistory.com/309&lt;/a&gt;&lt;/p&gt;</description>
      <category>IT | 개발/JAVA</category>
      <category>자바 이메일 정규식</category>
      <category>자바 이메일 정합성</category>
      <category>자바 이메일 체크</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/264</guid>
      <comments>https://funfunit.tistory.com/264#entry264comment</comments>
      <pubDate>Wed, 24 May 2023 09:49:30 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] 맥북에서 home, end 버튼 사용하기(Home, end 버튼 있는 키보드 사용 시)</title>
      <link>https://funfunit.tistory.com/263</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjcUw3/btr96PujaJ5/rVEJKKVsVK0GyQE13N4Tu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjcUw3/btr96PujaJ5/rVEJKKVsVK0GyQE13N4Tu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjcUw3/btr96PujaJ5/rVEJKKVsVK0GyQE13N4Tu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjcUw3%2Fbtr96PujaJ5%2FrVEJKKVsVK0GyQE13N4Tu1%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;674&quot; height=&quot;550&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 세팅 방법&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;(1)terminal 에서 폴더 생성&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFMVLX/btr97nLf1lP/u2VxHQOq4CSyh1AdErKgW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFMVLX/btr97nLf1lP/u2VxHQOq4CSyh1AdErKgW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFMVLX/btr97nLf1lP/u2VxHQOq4CSyh1AdErKgW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFMVLX%2Fbtr97nLf1lP%2Fu2VxHQOq4CSyh1AdErKgW1%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;594&quot; height=&quot;379&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uQt8a/btr90TL31Zq/XXoaxeVeuskT11YubyIPzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uQt8a/btr90TL31Zq/XXoaxeVeuskT11YubyIPzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uQt8a/btr90TL31Zq/XXoaxeVeuskT11YubyIPzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuQt8a%2Fbtr90TL31Zq%2FXXoaxeVeuskT11YubyIPzK%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;597&quot; height=&quot;378&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681438638784&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/Library&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;Library 폴더&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dx2coZ/btsabfsGCma/UQJu8kDXXRS2ASloHdqJGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dx2coZ/btsabfsGCma/UQJu8kDXXRS2ASloHdqJGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dx2coZ/btsabfsGCma/UQJu8kDXXRS2ASloHdqJGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdx2coZ%2FbtsabfsGCma%2FUQJu8kDXXRS2ASloHdqJGk%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;599&quot; height=&quot;375&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681438735162&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir KeyBindings&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어로 &lt;b&gt;KeyBindings 라는 폴더를 생성&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv7l9o/btsacf0r5nw/jn2IitH2YRIpWG9bITouUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv7l9o/btsacf0r5nw/jn2IitH2YRIpWG9bITouUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv7l9o/btsacf0r5nw/jn2IitH2YRIpWG9bITouUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv7l9o%2Fbtsacf0r5nw%2Fjn2IitH2YRIpWG9bITouUk%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;442&quot; height=&quot;47&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mkdir: KeyBindings: File exists&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;b&gt;(2)설정 파일 생성&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vgG0Y/btr94khfW7M/F9Gnw8wgCEBh42pYLpwfpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vgG0Y/btr94khfW7M/F9Gnw8wgCEBh42pYLpwfpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vgG0Y/btr94khfW7M/F9Gnw8wgCEBh42pYLpwfpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvgG0Y%2Fbtr94khfW7M%2FF9Gnw8wgCEBh42pYLpwfpK%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;594&quot; height=&quot;379&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;379&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681439035607&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd KeyBindings&lt;/code&gt;&lt;/pre&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmvMvh/btr92u5I0KD/yUBWckhBmkaSaQIjcWw6J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmvMvh/btr92u5I0KD/yUBWckhBmkaSaQIjcWw6J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmvMvh/btr92u5I0KD/yUBWckhBmkaSaQIjcWw6J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmvMvh%2Fbtr92u5I0KD%2FyUBWckhBmkaSaQIjcWw6J1%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;605&quot; height=&quot;132&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681438902372&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi DefaultKeyBinding.dict&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1681439204753&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; { 
    /* Remap Home / End keys to be correct */ 
    &quot;\UF729&quot; = &quot;moveToBeginningOfLine:&quot;; /* Home */ 
    &quot;\UF72B&quot; = &quot;moveToEndOfLine:&quot;; /* End */ 
    &quot;$\UF729&quot; = &quot;moveToBeginningOfLineAndModifySelection:&quot;; /* Shift + Home */ 
    &quot;$\UF72B&quot; = &quot;moveToEndOfLineAndModifySelection:&quot;; /* Shift + End */ 
    &quot;^\UF729&quot; = &quot;moveToBeginningOfDocument:&quot;; /* Ctrl + Home */ 
    &quot;^\UF72B&quot; = &quot;moveToEndOfDocument:&quot;; /* Ctrl + End */ 
    &quot;$^\UF729&quot; = &quot;moveToBeginningOfDocumentAndModifySelection:&quot;; /* Shift + Ctrl + Home */ 
    &quot;$^\UF72B&quot; = &quot;moveToEndOfDocumentAndModifySelection:&quot;; /* Shift + Ctrl + End */ 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용을 &lt;b&gt;복사&lt;/b&gt;한 상태에서 (&lt;b&gt;cmd + c&lt;/b&gt; 또는 &lt;b&gt;ctrl + c&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C7LvN/btr96Qmq8Nx/nP8ikLUxOqCrBuA3u4Eahk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C7LvN/btr96Qmq8Nx/nP8ikLUxOqCrBuA3u4Eahk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C7LvN/btr96Qmq8Nx/nP8ikLUxOqCrBuA3u4Eahk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC7LvN%2Fbtr96Qmq8Nx%2FnP8ikLUxOqCrBuA3u4Eahk%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;385&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널 창을 클릭해서 활성화 한 후 &lt;b&gt;i&lt;/b&gt; 를 한 번 누르면 위와 같이 &lt;b&gt;insert 모드&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beU3Rb/btr94vC315v/8zoBbSa9w8kLyjeRBkb1f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beU3Rb/btr94vC315v/8zoBbSa9w8kLyjeRBkb1f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beU3Rb/btr94vC315v/8zoBbSa9w8kLyjeRBkb1f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeU3Rb%2Fbtr94vC315v%2F8zoBbSa9w8kLyjeRBkb1f1%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;599&quot; height=&quot;388&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 상태에서 &lt;b&gt;붙여넣기&lt;/b&gt;하면 (&lt;b&gt;cmd + v&lt;/b&gt;  또는 &lt;b&gt;ctrl + v&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/souuB/btr92vctNAt/ZH3bWERbeO5Kr4uoijWJC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/souuB/btr92vctNAt/ZH3bWERbeO5Kr4uoijWJC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/souuB/btr92vctNAt/ZH3bWERbeO5Kr4uoijWJC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsouuB%2Fbtr92vctNAt%2FZH3bWERbeO5Kr4uoijWJC1%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;604&quot; height=&quot;387&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 상태에서 &lt;b&gt;esc&lt;/b&gt;를 누른 후!&lt;b&gt;(꼭)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;:wq!&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYCYOz/btr97pvyM9p/xw37s9o6SlYDYyI9TlEhJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYCYOz/btr97pvyM9p/xw37s9o6SlYDYyI9TlEhJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYCYOz/btr97pvyM9p/xw37s9o6SlYDYyI9TlEhJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYCYOz%2Fbtr97pvyM9p%2Fxw37s9o6SlYDYyI9TlEhJ0%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;598&quot; height=&quot;384&quot; data-origin-width=&quot;598&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1681439593544&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&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;&lt;b&gt;ls&lt;/b&gt;를 쳐서 &lt;b&gt;DefaultKeyBinding.dict&lt;/b&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;b&gt;3. 재부팅 및 적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pc 재부팅&lt;/b&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;b&gt;4. 출처&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://steemit.com/hive-101145/@realmankwon/realmankwon-posting-2021-09-01-22-34&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://steemit.com/hive-101145/@realmankwon/realmankwon-posting-2021-09-01-22-34&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;/p&gt;</description>
      <category>IT | OS/MAC</category>
      <category>END</category>
      <category>HOME</category>
      <category>home end</category>
      <category>MAC</category>
      <category>맥북</category>
      <category>버튼 적용</category>
      <category>블루투스 키보드</category>
      <category>키보드</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/263</guid>
      <comments>https://funfunit.tistory.com/263#entry263comment</comments>
      <pubDate>Fri, 14 Apr 2023 11:37:11 +0900</pubDate>
    </item>
    <item>
      <title>[intellij + codeArtifact + Maven | 설정 및 오류 해결]  authentication failed for : 401 Unauthorized</title>
      <link>https://funfunit.tistory.com/262</link>
      <description>&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;0. 개요&lt;/b&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;/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;1. 프로젝트 환경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-intellij: 개발 Tool로 intellij 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-AWS CodeCommit: 프로젝트에서 사용하는  소스 저장소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-CodeArtifact: 프로젝트에서 사용하는 패키지 저장소(CodeArtifact 설정 중 문제 발생)&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;2. 문제 발생&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-CodeCommit에서 프로젝트 소스를 다운받은 후(git 사용), 소스가 정상적으로 작동하려면 CodeArtifact와 연동(Credential 통한 인증)이 정상적으로 수행이 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-CodeArtifact 인증은 다음과 같이 이루어진다.&lt;/p&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)CodeArtifact 플러그인 설치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXD9EW/btr9YlzK8Xo/nltNNgrJeXJTMAJMqXKaU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXD9EW/btr9YlzK8Xo/nltNNgrJeXJTMAJMqXKaU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXD9EW/btr9YlzK8Xo/nltNNgrJeXJTMAJMqXKaU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXD9EW%2Fbtr9YlzK8Xo%2FnltNNgrJeXJTMAJMqXKaU1%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;999&quot; height=&quot;726&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;726&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;(2)Generate AWS CodeArtifact Credentials&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 순서로, Maven settings file을 지정하여 Credential을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;settings.xml 파일이 기존이 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일 생성 방법은 &lt;a href=&quot;https://docs.aws.amazon.com/codeartifact/latest/ug/maven-mvn.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.aws.amazon.com/codeartifact/latest/ug/maven-mvn.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크를 참조하면 된다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceNVBF/btr9GbfkFRt/j6oAjdl0pHxnpcD4dCjgY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceNVBF/btr9GbfkFRt/j6oAjdl0pHxnpcD4dCjgY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceNVBF/btr9GbfkFRt/j6oAjdl0pHxnpcD4dCjgY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceNVBF%2Fbtr9GbfkFRt%2Fj6oAjdl0pHxnpcD4dCjgY0%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;731&quot; height=&quot;399&quot; data-origin-width=&quot;731&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;Generate Credentials를 하면&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;1225&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE2iPI/btr9RuYokJs/Ov9KnTKE1AG164gUK4kt10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE2iPI/btr9RuYokJs/Ov9KnTKE1AG164gUK4kt10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE2iPI/btr9RuYokJs/Ov9KnTKE1AG164gUK4kt10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE2iPI%2Fbtr9RuYokJs%2FOv9KnTKE1AG164gUK4kt10%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;1225&quot; height=&quot;419&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설정한 settigns.xml 파일에 Generate 된 토큰 값이 password에 자동으로 세팅되는 방식이다.&lt;/p&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;1165&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNt33K/btr9NmHjEwy/eZjasGtAPpmC5NqUqjNHA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNt33K/btr9NmHjEwy/eZjasGtAPpmC5NqUqjNHA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNt33K/btr9NmHjEwy/eZjasGtAPpmC5NqUqjNHA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNt33K%2Fbtr9NmHjEwy%2FeZjasGtAPpmC5NqUqjNHA1%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;1165&quot; height=&quot;76&quot; data-origin-width=&quot;1165&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&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;authentication failed for ~~~ status: 401 Unauthorized&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1)원인: intellij의 Maven 기본 설정 파일과, CodeArtifact 설정 경로가 달라서 생긴 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;intellij의 &lt;b&gt;[Preferences]&lt;/b&gt; - &lt;b&gt;[Build]&lt;/b&gt; - &lt;b&gt;[Build Tools]&lt;/b&gt; - &lt;b&gt;[Maven]&lt;/b&gt; 항목을 보면, Maven home path 가 지정되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csXFiR/btr9N3N2LQD/YH9jPVMYbb9Lzy4ayb6aYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csXFiR/btr9N3N2LQD/YH9jPVMYbb9Lzy4ayb6aYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csXFiR/btr9N3N2LQD/YH9jPVMYbb9Lzy4ayb6aYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsXFiR%2Fbtr9N3N2LQD%2FYH9jPVMYbb9Lzy4ayb6aYK%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;992&quot; height=&quot;723&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;723&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;이 값이, 위 CodeArtifact Token Generate 할 시 설정한 settings.xml 파일 경로와 달라 생긴 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Generate Token 시, 토큰 값이 설정이 되었는데 Maven 기본 경로에 있는 settings.xml 파일에는 토큰 정보가 없기 때문에 생긴 문제.&lt;/p&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;intellij의 Maven 기본 경로를, CodeArtifact 경로와 동일하게 맞춰주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i)intellij Maven 기본 경로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWs54L/btr9OazA1Ee/TRSjSZNvfwdMDnVfOmXCe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWs54L/btr9OazA1Ee/TRSjSZNvfwdMDnVfOmXCe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWs54L/btr9OazA1Ee/TRSjSZNvfwdMDnVfOmXCe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWs54L%2Fbtr9OazA1Ee%2FTRSjSZNvfwdMDnVfOmXCe0%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;999&quot; height=&quot;723&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;723&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;ii)CodeArtifact Maven settings file 경로&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsjy7E/btr9NDvhys6/6xGehYaLFsv23hyOZHLfsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsjy7E/btr9NDvhys6/6xGehYaLFsv23hyOZHLfsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsjy7E/btr9NDvhys6/6xGehYaLFsv23hyOZHLfsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsjy7E%2Fbtr9NDvhys6%2F6xGehYaLFsv23hyOZHLfsk%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;720&quot; height=&quot;392&quot; data-origin-width=&quot;720&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;해결!&lt;/p&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;</description>
      <category>IT | 개발/개발 Tools</category>
      <category>403 Error</category>
      <category>codeArtifact</category>
      <category>intellij</category>
      <category>maven</category>
      <category>Unauthorized</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/262</guid>
      <comments>https://funfunit.tistory.com/262#entry262comment</comments>
      <pubDate>Thu, 13 Apr 2023 10:23:38 +0900</pubDate>
    </item>
    <item>
      <title>[python | 오류 해결] Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED</title>
      <link>https://funfunit.tistory.com/261</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 URL 경로로 파일을 다운로드 받는 코드를 실행해보니, 다음과 같은 오류가 발생했다.&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;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1677137095579&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests


url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url)

open('facebook.ico', 'wb').write(r.content)&lt;/code&gt;&lt;/pre&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;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;SSL:&amp;nbsp;CERTIFICATE_VERIFY_FAILED]&amp;nbsp;certificate&amp;nbsp;verify&amp;nbsp;failed:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;aaa.png&quot; data-origin-width=&quot;3342&quot; data-origin-height=&quot;1026&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0d9C0/btr0yisz5m0/Rno2XPVwQpebKU7pIS3hnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0d9C0/btr0yisz5m0/Rno2XPVwQpebKU7pIS3hnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0d9C0/btr0yisz5m0/Rno2XPVwQpebKU7pIS3hnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0d9C0%2Fbtr0yisz5m0%2FRno2XPVwQpebKU7pIS3hnK%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;3342&quot; height=&quot;1026&quot; data-filename=&quot;aaa.png&quot; data-origin-width=&quot;3342&quot; data-origin-height=&quot;1026&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;b&gt;해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;request 시, verify=false 옵션을 넣는다&lt;/p&gt;
&lt;pre id=&quot;code_1677137581008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests


url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, verify=False)

open('facebook.ico', 'wb').write(r.content)&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;-끝-&lt;/p&gt;</description>
      <category>IT | 개발/python</category>
      <category>file download</category>
      <category>PYTHON</category>
      <category>SSLCertVerificationError</category>
      <category>SSLError</category>
      <category>오류 해결</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/261</guid>
      <comments>https://funfunit.tistory.com/261#entry261comment</comments>
      <pubDate>Thu, 23 Feb 2023 16:34:34 +0900</pubDate>
    </item>
    <item>
      <title>[sandbox] rstudio에서 snowflake 연결하기(쿼리 수행 테스트 포함)</title>
      <link>https://funfunit.tistory.com/260</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;RStudio-Logo-Flat.png&quot; data-origin-width=&quot;3534&quot; data-origin-height=&quot;1241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xkKHw/btrX40PqXj8/utaWjtO5GpXjI6gD5i8NC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xkKHw/btrX40PqXj8/utaWjtO5GpXjI6gD5i8NC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xkKHw/btrX40PqXj8/utaWjtO5GpXjI6gD5i8NC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxkKHw%2FbtrX40PqXj8%2FutaWjtO5GpXjI6gD5i8NC0%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;550&quot; height=&quot;193&quot; data-filename=&quot;RStudio-Logo-Flat.png&quot; data-origin-width=&quot;3534&quot; data-origin-height=&quot;1241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;R Studio에서, snowflake에 연결하여 Data를 접근할 수 있는 방법을 정리한다.&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;0. 조건&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-sandbox에서 rstudio를 생성하여 접속한 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-snowflake에 데이터를 올린 후, 접속 계정을 받은 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-외부망이 오픈되어, wget으로 파일 다운로드가 가능해야 함&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;snowflake Account URL (ex: https://atixoaj-my-account-url.snowflakecomputing.com&lt;/li&gt;
&lt;li&gt;snowflake ID&lt;/li&gt;
&lt;li&gt;snowflake PW&lt;/li&gt;
&lt;/ul&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. 터미널 접근&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCcgg/btrX8i25AFB/s4o3dTTgp5T28CMWK8lA5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCcgg/btrX8i25AFB/s4o3dTTgp5T28CMWK8lA5k/img.png&quot; data-alt=&quot;R - Terminal&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCcgg/btrX8i25AFB/s4o3dTTgp5T28CMWK8lA5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCcgg%2FbtrX8i25AFB%2Fs4o3dTTgp5T28CMWK8lA5k%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;633&quot; height=&quot;486&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;R - Terminal&lt;/figcaption&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;2. root 계정으로 전환&lt;/h3&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;$ sudo su
(암호 입력)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G8002/btrX6ibku1I/Tthqq1KqM7sWJvYQiBK5nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G8002/btrX6ibku1I/Tthqq1KqM7sWJvYQiBK5nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G8002/btrX6ibku1I/Tthqq1KqM7sWJvYQiBK5nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG8002%2FbtrX6ibku1I%2FTthqq1KqM7sWJvYQiBK5nk%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;597&quot; height=&quot;458&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;585&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;3. linux용 ODBC 다운로드 (tgz)&lt;/h3&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;$ cd /home/rstudio

$ sudo wget &amp;lt;https://sfc-repo.snowflakecomputing.com/odbc/linux/2.25.4/snowflake_linux_x8664_odbc-2.25.4.tgz&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP2ZcL/btrYf0ghg16/KtoEKkmAl3zmXuqFfGQhf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP2ZcL/btrYf0ghg16/KtoEKkmAl3zmXuqFfGQhf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP2ZcL/btrYf0ghg16/KtoEKkmAl3zmXuqFfGQhf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP2ZcL%2FbtrYf0ghg16%2FKtoEKkmAl3zmXuqFfGQhf1%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;646&quot; height=&quot;372&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfaYYV/btrX8jgFquR/cc4M3kXKluivhH0khkcJeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfaYYV/btrX8jgFquR/cc4M3kXKluivhH0khkcJeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfaYYV/btrX8jgFquR/cc4M3kXKluivhH0khkcJeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfaYYV%2FbtrX8jgFquR%2Fcc4M3kXKluivhH0khkcJeK%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;672&quot; height=&quot;358&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&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;4. odbc 설치&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;$ gunzip snowflake_linux_x8664_odbc-2.25.4.tgz
$ tar -xvf snowflake_linux_x8664_odbc-2.25.4.tar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5O0P3/btrX40aYlFT/7sbpd23Xio3Fm5PHGRtDDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5O0P3/btrX40aYlFT/7sbpd23Xio3Fm5PHGRtDDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5O0P3/btrX40aYlFT/7sbpd23Xio3Fm5PHGRtDDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5O0P3%2FbtrX40aYlFT%2F7sbpd23Xio3Fm5PHGRtDDK%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;883&quot; height=&quot;471&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;$ cd snowflake_odbc
$ ./unixodbc_setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKaBNB/btrYaoB0i3I/Vga4UpQgdlnolQ4IQk9TFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKaBNB/btrYaoB0i3I/Vga4UpQgdlnolQ4IQk9TFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKaBNB/btrYaoB0i3I/Vga4UpQgdlnolQ4IQk9TFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKaBNB%2FbtrYaoB0i3I%2FVga4UpQgdlnolQ4IQk9TFK%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;883&quot; height=&quot;471&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&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;5. odbc.ini 파일 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-파일 경로: /home/rstudio/snowflake_odbc/conf/odbc.ini&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1)원본&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# To use this INI file, replace [INSTALLDIR] with the 
# directory the tarball was extracted to.

[ODBC Data Sources]
SnowflakeDSII=SnowflakeDSIIDriver

[SnowflakeDSII]
Description=Snowflake DSII
Driver=/path/to/your/libSnowflake.so
Locale=en-US

# [ODBC]
# Trace=1
# TraceFile=/tmp/regress/ODBCTrace-$U-$P-$T.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2)변경&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# To use this INI file, replace [INSTALLDIR] with the 
# directory the tarball was extracted to.

[ODBC Data Sources]
SnowflakeDSII=SnowflakeDSIIDriver

[SnowflakeDSII]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=atixoaj-my-account-url.snowflakecomputing.com ###{snowflake account url 입력}
PORT=443
SSL=on
ACCOUNT=my-account ###{snowflake account 입력}

# [ODBC]
# Trace=1
# TraceFile=/tmp/regress/ODBCTrace-$U-$P-$T.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. Console 접근&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (7).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clslFx/btrX3tZgFfb/wHuVKwmdGu0bi5ko659cBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clslFx/btrX3tZgFfb/wHuVKwmdGu0bi5ko659cBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clslFx/btrX3tZgFfb/wHuVKwmdGu0bi5ko659cBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclslFx%2FbtrX3tZgFfb%2FwHuVKwmdGu0bi5ko659cBk%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;570&quot; height=&quot;304&quot; data-filename=&quot;Untitled (7).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&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;7. 연결&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;install.packages(c(&quot;DBI&quot;, &quot;dplyr&quot;,&quot;dbplyr&quot;,&quot;odbc&quot;))
library(DBI)
library(dplyr)
library(dbplyr)
library(odbc)

myconn &amp;lt;- DBI::dbConnect(odbc::odbc(), Driver = &quot;SnowflakeDSIIDriver&quot;, UID    = &quot;{my id}&quot;, PWD    = &quot;{my password}&quot;, Server = &quot;{my account url}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (8).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Eyqc3/btrX33lG5fj/e6P8WJygCd7KMvKMhoMbm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Eyqc3/btrX33lG5fj/e6P8WJygCd7KMvKMhoMbm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Eyqc3/btrX33lG5fj/e6P8WJygCd7KMvKMhoMbm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEyqc3%2FbtrX33lG5fj%2Fe6P8WJygCd7KMvKMhoMbm1%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;588&quot; height=&quot;314&quot; data-filename=&quot;Untitled (8).png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;471&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;8. 연결 확인&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_Untitled (9).png&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/okXHx/btrX4l7vZf4/dE6kOsXIvJ6nKZJaAS0gK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/okXHx/btrX4l7vZf4/dE6kOsXIvJ6nKZJaAS0gK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/okXHx/btrX4l7vZf4/dE6kOsXIvJ6nKZJaAS0gK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FokXHx%2FbtrX4l7vZf4%2FdE6kOsXIvJ6nKZJaAS0gK0%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;609&quot; height=&quot;209&quot; data-filename=&quot;edited_Untitled (9).png&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;305&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;9. 쿼리 테스트&lt;/h3&gt;
&lt;pre id=&quot;code_1675749071922&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//conn 정보 입력
myconn &amp;lt;- DBI::dbConnect(odbc::odbc(), Driver = &quot;SnowflakeDSIIDriver&quot;, UID    = &quot;{my username}&quot;, PWD    = &quot;{my password}&quot;, Server = &quot;atixoaj-{my-account-url}.snowflakecomputing.com&quot;)

//snowflake warehouse 정보 입력
DBI::dbGetQuery(myconn,&quot;use warehouse mywarehousename&quot;)

//queyr 수행하여 결과를 mydata 변수에 담기 (mydata &amp;lt;- 생략할 경우, 결과가 바로 출력됨)
mydata &amp;lt;- DBI::dbGetQuery(myconn,&quot;select * from mydb.myschema.mytable limit 10&quot;)

//mydata 변수 출력
head(mydata)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT | 데이터 분석/sandbox</category>
      <category>R STUDIO</category>
      <category>RStudio</category>
      <category>Sandbox</category>
      <category>SnowFlake</category>
      <category>snowflake query</category>
      <category>연결</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/260</guid>
      <comments>https://funfunit.tistory.com/260#entry260comment</comments>
      <pubDate>Mon, 6 Feb 2023 09:45:55 +0900</pubDate>
    </item>
    <item>
      <title>[AWS | jupyter] S3로부터 이미지를 직접 object에 저장하기 (다운로드 X)</title>
      <link>https://funfunit.tistory.com/259</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLvfD/btrVLvx2Fdv/xb7vce0EZzfutqgiQrY871/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLvfD/btrVLvx2Fdv/xb7vce0EZzfutqgiQrY871/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLvfD/btrVLvx2Fdv/xb7vce0EZzfutqgiQrY871/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLvfD%2FbtrVLvx2Fdv%2Fxb7vce0EZzfutqgiQrY871%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;580&quot; height=&quot;195&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0. 개요&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S3에서 수천 개의 이미지를 기반으로 머신 러닝하여 모델을 생성하는 Task를 수행&lt;/li&gt;
&lt;li&gt;보안 요건에 따라, S3에 있는 이미지를 jupyter에 저장하지 않는 방식으로 진행 -&amp;gt; S3 이미지 직접 접근 후 메모리에 저장하여 학습&lt;/li&gt;
&lt;li&gt;작업 방식
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;S3에 접속&lt;/li&gt;
&lt;li&gt;작업할 파일 경로를 list 형태로 저장(file path + 파일명) ex)myproject/1.png&lt;/li&gt;
&lt;li&gt;파일 경로 정보를 바탕으로 S3 image를 로컬 변수에 받아 후처리 진행&lt;/li&gt;
&lt;/ul&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;size18&quot;&gt;1. package install&lt;/p&gt;
&lt;pre id=&quot;code_1673323985070&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install opencv-python   #cv2 import 위해 설치&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. module import&lt;/p&gt;
&lt;pre id=&quot;code_1673316139569&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import boto3    #S3 관련 작업 수행
import cv2      #이미지를 다루는 작업 수행&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;size18&quot;&gt;3. S3 설정&lt;/p&gt;
&lt;pre id=&quot;code_1673315908731&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;accessKey = '**********************'                       #private S3 일 경우 필요
secretKey = '*********************'                        #private S3 일 경우 필요
region = 'ap-northeast-2'
bucket_name = 'my-s3-bucket-name'
prefix = 'my-img-path-prefix/'.       #prefix에 경로를 지정할 경우, 그 하위 폴더에 대해서만 작업 수행
s3 = boto3.client('s3', 
                  aws_access_key_id=accessKey,          #public S3 일 경우, 입력하지 않아도 됨
                  aws_secret_access_key=secretKey       #public S3 일 경우, 입력하지 않아도 됨
                 )&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;size18&quot;&gt;4. list 받아오기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;받아야 할 리스트가 1,000건이 넘어, paginator를 사용&lt;/li&gt;
&lt;li&gt;작업할 파일은 png 이므로, 해당 확장자만 filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1673316008712&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket=bucket_name, Prefix=prefix)

file_list = []

# 확장자 filtering
for page in pages:
    for obj in page['Contents']:
        key = obj['Key']
        if key.endswith('.png'):
            file_list.append(key)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 작업을 수행하면, file_list에 아래와 같은 양식으로 데이터 저장됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;my-file-prefix/myfile.png&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;size18&quot;&gt;5. image 불러오기&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;ing 형태로 최종 이미지 저장 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1673317156836&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for file in file_list:

    object = s3.get_object(Bucket=bucket_name, Key=img)    #S3로부터 이미지 object 가져오기
    nparr = np.frombuffer(object['Body'].read(), np.uint8) #numpy array 형태로 읽기
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)          #이미지 decode
    
    ### 후 처리 로직 수행 ###&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;</description>
      <category>IT | Cloud/AWS</category>
      <category>1000개 이상 리스트 가져오기</category>
      <category>AWS</category>
      <category>S3</category>
      <category>이미지 가져오기</category>
      <category>이미지 다운로드 X</category>
      <category>이미지 여러 개 가져오기</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/259</guid>
      <comments>https://funfunit.tistory.com/259#entry259comment</comments>
      <pubDate>Tue, 10 Jan 2023 11:22:55 +0900</pubDate>
    </item>
    <item>
      <title>[유틸] 유튜브 음원 mp3 다운로드 사이트 (회원가입 X)</title>
      <link>https://funfunit.tistory.com/258</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 유튜브 URL 복사&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) https://www.youtube.com/watch?v=xmMRMS5G3VA&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2574&quot; data-origin-height=&quot;1451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k6guV/btrT2PKie19/ofeHWXnSu6aPzvbtKiohvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k6guV/btrT2PKie19/ofeHWXnSu6aPzvbtKiohvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k6guV/btrT2PKie19/ofeHWXnSu6aPzvbtKiohvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk6guV%2FbtrT2PKie19%2FofeHWXnSu6aPzvbtKiohvk%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;2574&quot; height=&quot;1451&quot; data-origin-width=&quot;2574&quot; data-origin-height=&quot;1451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음원을 받을 유튜브의 화면에서 url을 복사한다.&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;2. 음원 추출 사이트 접속&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yout.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yout.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAmEDL/btrTWOejitZ/onikz4eJsasu8r64ib8j7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAmEDL/btrTWOejitZ/onikz4eJsasu8r64ib8j7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAmEDL/btrTWOejitZ/onikz4eJsasu8r64ib8j7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAmEDL%2FbtrTWOejitZ%2Fonikz4eJsasu8r64ib8j7k%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;505&quot; height=&quot;405&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;986&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;b&gt;3. URL 입력&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 화면에서 url을 붙여넣기 하면 자동으로 아래 화면으로 이동된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1477&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PY1wv/btrTT6zNnZ5/3aNiD411dbz7fgBkl1s6Wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PY1wv/btrTT6zNnZ5/3aNiD411dbz7fgBkl1s6Wk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PY1wv/btrTT6zNnZ5/3aNiD411dbz7fgBkl1s6Wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPY1wv%2FbtrTT6zNnZ5%2F3aNiD411dbz7fgBkl1s6Wk%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;1477&quot; height=&quot;1230&quot; data-origin-width=&quot;1477&quot; data-origin-height=&quot;1230&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;b&gt;4. 다운로드 (형식 이동 MP3)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;품질 선택 후, 형식 이동 MP3 버튼을 누르면 다운로드된다.&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;365&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Khoxw/btrTZy97CWW/3YlFAERpJk5klnKi9IOuSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Khoxw/btrTZy97CWW/3YlFAERpJk5klnKi9IOuSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Khoxw/btrTZy97CWW/3YlFAERpJk5klnKi9IOuSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKhoxw%2FbtrTZy97CWW%2F3YlFAERpJk5klnKi9IOuSk%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;365&quot; height=&quot;118&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 변경사항&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현재 사이트의 변경으로, 최초 다운로드 시도 시 아래와 같은 팝업이 출력된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;비디오 페이지로 이동&quot;&lt;/b&gt; 클릭 후에 다운로드하면 정상적으로 mp3 파일을 다운로드할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;1186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBRpDq/dJMcahppv17/903o022v6JEqCiukdkndok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBRpDq/dJMcahppv17/903o022v6JEqCiukdkndok/img.png&quot; data-alt=&quot;비디오 페이지로 이동 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBRpDq/dJMcahppv17/903o022v6JEqCiukdkndok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBRpDq%2FdJMcahppv17%2F903o022v6JEqCiukdkndok%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;1582&quot; height=&quot;1186&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;1186&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비디오 페이지로 이동 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ2HRs/dJMcahppv2G/ryL26EKTWKkEtTEcoCl2Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ2HRs/dJMcahppv2G/ryL26EKTWKkEtTEcoCl2Sk/img.png&quot; data-alt=&quot;'포맷을 전환합니다 MP3' 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ2HRs/dJMcahppv2G/ryL26EKTWKkEtTEcoCl2Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ2HRs%2FdJMcahppv2G%2FryL26EKTWKkEtTEcoCl2Sk%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;1396&quot; height=&quot;1312&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'포맷을 전환합니다 MP3' 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-끝-&lt;/p&gt;</description>
      <category>IT | 유틸/유틸</category>
      <category>mp3 다운로드</category>
      <category>무료 다운로드</category>
      <category>유튜브 음원 다운로드</category>
      <category>회원가입 없음</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/258</guid>
      <comments>https://funfunit.tistory.com/258#entry258comment</comments>
      <pubDate>Mon, 19 Dec 2022 13:33:10 +0900</pubDate>
    </item>
    <item>
      <title>[git] 수정 이전으로 소스 되돌리기</title>
      <link>https://funfunit.tistory.com/257</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnp3pn/btrTwBeouSs/U1sKCAGA8Yvv7hRx9RArKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnp3pn/btrTwBeouSs/U1sKCAGA8Yvv7hRx9RArKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnp3pn/btrTwBeouSs/U1sKCAGA8Yvv7hRx9RArKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnp3pn%2FbtrTwBeouSs%2FU1sKCAGA8Yvv7hRx9RArKK%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;418&quot; height=&quot;232&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 수정된 모든 소스를 되돌리기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;n개의 파일이 수정되었다면, n개 모두 되돌린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1670894224950&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git reset --hard&lt;/code&gt;&lt;/pre&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;2. 특정 파일만 되돌리기&lt;/b&gt;&lt;/h3&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;/ul&gt;
&lt;pre class=&quot;bash&quot; data-bidi-marker=&quot;true&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;git checkout -- {filePath/fileName}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) /myDir 아래에 있는 myFile.py 를 되돌리기&lt;/p&gt;
&lt;pre id=&quot;code_1670894456959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git checkout -- /myDir/myFile.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구문을 보면, 해당 파일을 강제로 checkout을 다시 받는 명령어임을 알 수 있다.&lt;/p&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;</description>
      <category>IT | 개발/git | GitHub</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/257</guid>
      <comments>https://funfunit.tistory.com/257#entry257comment</comments>
      <pubDate>Tue, 13 Dec 2022 10:22:36 +0900</pubDate>
    </item>
    <item>
      <title>[python] flake8 설치 및 실행 방법</title>
      <link>https://funfunit.tistory.com/256</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mmxST/btrSpv8ril3/sBN4A1fFeLLn5874HBwpX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mmxST/btrSpv8ril3/sBN4A1fFeLLn5874HBwpX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mmxST/btrSpv8ril3/sBN4A1fFeLLn5874HBwpX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmmxST%2FbtrSpv8ril3%2FsBN4A1fFeLLn5874HBwpX0%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;524&quot; height=&quot;220&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;420&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;b&gt;0. 개요&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;flake8이란 &lt;i&gt;&quot;pep8의 체크, pyflakes의 체크 및 순환 복잡도를 체크할 수 있는 Wrapper&quot;이다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1aGEY/btrSnWytkTE/EpWbnjIvjeO8xVxfqd7Qe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1aGEY/btrSnWytkTE/EpWbnjIvjeO8xVxfqd7Qe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1aGEY/btrSnWytkTE/EpWbnjIvjeO8xVxfqd7Qe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1aGEY%2FbtrSnWytkTE%2FEpWbnjIvjeO8xVxfqd7Qe1%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;305&quot; height=&quot;212&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;401&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;flake8이 제공하는 &lt;b&gt;기능&lt;/b&gt;은 크게&lt;b&gt; 3가지&lt;/b&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;PyFlakes (pyflakes : 코드의 에러 체크)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pycodestyle (pycodestyle : PEP8에 준거하고 있는지를 체크)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ned Batchelder's McCabe script (mccabe : 순환 복잡도를 체크)&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;PEP8&lt;/b&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;/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;b&gt;코딩 스타일에 대한 표준을 제시&lt;/b&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;b&gt;1. 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#pip install flake8&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZSxFK/btrSm1fLMVe/cjKf0LEVjQKhoG6BjOMink/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZSxFK/btrSm1fLMVe/cjKf0LEVjQKhoG6BjOMink/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZSxFK/btrSm1fLMVe/cjKf0LEVjQKhoG6BjOMink/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZSxFK%2FbtrSm1fLMVe%2FcjKf0LEVjQKhoG6BjOMink%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;659&quot; height=&quot;185&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 실행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;vscode&lt;/b&gt; 기준으로, &lt;b&gt;flake8 실행 방법&lt;/b&gt;을 설명한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F2bjT/btrSqsRdBgf/KR68bDcoUkIwZ2xoeC6eT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F2bjT/btrSqsRdBgf/KR68bDcoUkIwZ2xoeC6eT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F2bjT/btrSqsRdBgf/KR68bDcoUkIwZ2xoeC6eT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF2bjT%2FbtrSqsRdBgf%2FKR68bDcoUkIwZ2xoeC6eT1%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;618&quot; height=&quot;185&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;windows: alt + shift + p&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mac: command + shift + p&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 창 실행 후,&lt;b&gt; [select Linter]&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2R93D/btrSnU8z0p1/lndLdn4kpLfCGMqg4azGx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2R93D/btrSnU8z0p1/lndLdn4kpLfCGMqg4azGx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2R93D/btrSnU8z0p1/lndLdn4kpLfCGMqg4azGx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2R93D%2FbtrSnU8z0p1%2FlndLdn4kpLfCGMqg4azGx1%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;250&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후, 아래 항목에서 &lt;b&gt;flake8&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 테스트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flake8이 정상적으로 실행되는지 테스트를 해보자.&lt;/p&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)flake8 적용 전&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jjuad/btrSruOjQnT/0auXjh9m23IV4nk0A6Y7Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jjuad/btrSruOjQnT/0auXjh9m23IV4nk0A6Y7Gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jjuad/btrSruOjQnT/0auXjh9m23IV4nk0A6Y7Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJjuad%2FbtrSruOjQnT%2F0auXjh9m23IV4nk0A6Y7Gk%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;198&quot; height=&quot;88&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flake8 적용 전에는, 위와 같은 코드 작성 시 빨간 줄(오류)이 발생하지 않는다.&lt;/p&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)flake8 적용 후&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flake8을 적용했을 시에 발생하는 두 가지 케이스를 알아본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, flake8은 수정한 파일을 저장해야 작동한다.&lt;/p&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;case1) 주석&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yfJeY/btrSr5nhYmm/SEXP9CCtQwKji1ijAntjx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yfJeY/btrSr5nhYmm/SEXP9CCtQwKji1ijAntjx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yfJeY/btrSr5nhYmm/SEXP9CCtQwKji1ijAntjx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyfJeY%2FbtrSr5nhYmm%2FSEXP9CCtQwKji1ijAntjx1%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;410&quot; height=&quot;119&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&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;위와 같은 경우는,&lt;b&gt; #이 너무 여러 개가 붙어있어서 발생한 경우.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xi3Qf/btrSm2seP81/4OgThNf79wGXh3U9qEiET0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xi3Qf/btrSm2seP81/4OgThNf79wGXh3U9qEiET0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xi3Qf/btrSm2seP81/4OgThNf79wGXh3U9qEiET0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxi3Qf%2FbtrSm2seP81%2F4OgThNf79wGXh3U9qEiET0%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;206&quot; height=&quot;79&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;b&gt;case2) 변수 관련&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb78aM/btrSrn2OcCk/6uJtsWjmLAtEwJCqgPhoKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb78aM/btrSrn2OcCk/6uJtsWjmLAtEwJCqgPhoKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb78aM/btrSrn2OcCk/6uJtsWjmLAtEwJCqgPhoKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb78aM%2FbtrSrn2OcCk%2F6uJtsWjmLAtEwJCqgPhoKK%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;374&quot; height=&quot;128&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변수를 선언만 하고 사용하지 않거나, 변수와 operator(=) 사이에 공백이 없으면 오류를 발생시킨다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/An3hM/btrSnExXivt/kg08K9DOwKpyxKr3iCzShk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/An3hM/btrSnExXivt/kg08K9DOwKpyxKr3iCzShk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/An3hM/btrSnExXivt/kg08K9DOwKpyxKr3iCzShk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAn3hM%2FbtrSnExXivt%2Fkg08K9DOwKpyxKr3iCzShk%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;180&quot; height=&quot;94&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;</description>
      <category>IT | 개발/python</category>
      <category>Flake8</category>
      <category>PYTHON</category>
      <category>vsCode</category>
      <category>코드 정리</category>
      <category>파이썬</category>
      <author>뻔뻔한 개발자</author>
      <guid isPermaLink="true">https://funfunit.tistory.com/256</guid>
      <comments>https://funfunit.tistory.com/256#entry256comment</comments>
      <pubDate>Tue, 29 Nov 2022 17:30:35 +0900</pubDate>
    </item>
  </channel>
</rss>