<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>말춘이의 블로그</title>
    <link>https://malchooni.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 02:42:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>말춘이</managingEditor>
    <item>
      <title>한국투자증권, 텔레그램 API 활용 - 잔고 조회</title>
      <link>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9-%EC%9E%94%EA%B3%A0-%EC%A1%B0%ED%9A%8C</link>
      <description>&lt;figure id=&quot;og_1677506595519&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;한국투자증권, 텔레그램 API 활용기&quot; data-og-description=&quot;한국투자증권의 Open API와 텔레그램 API를 활용하여 필요한 요청과 그에 대한 결과를 텔레그램 봇 메시지 받는 토이 프로젝트를 진행하였다. 두 API 모두 https 프로토콜을 사용하기 때문에 난이도&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSas9Q/hyRMutR4cr/A6b006Gbh6j8DUt44Dkt3K/img.png?width=764&amp;amp;height=932&amp;amp;face=0_0_764_932,https://scrap.kakaocdn.net/dn/bgPuLI/hyRMt9y1mo/PCIF0kQywMsRsEhVX4afA1/img.png?width=764&amp;amp;height=932&amp;amp;face=0_0_764_932,https://scrap.kakaocdn.net/dn/dWLsnJ/hyRMqLLA87/PkF6IyqjJDHaZt8QzyqE7k/img.png?width=1748&amp;amp;height=594&amp;amp;face=0_0_1748_594&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bSas9Q/hyRMutR4cr/A6b006Gbh6j8DUt44Dkt3K/img.png?width=764&amp;amp;height=932&amp;amp;face=0_0_764_932,https://scrap.kakaocdn.net/dn/bgPuLI/hyRMt9y1mo/PCIF0kQywMsRsEhVX4afA1/img.png?width=764&amp;amp;height=932&amp;amp;face=0_0_764_932,https://scrap.kakaocdn.net/dn/dWLsnJ/hyRMqLLA87/PkF6IyqjJDHaZt8QzyqE7k/img.png?width=1748&amp;amp;height=594&amp;amp;face=0_0_1748_594');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;한국투자증권, 텔레그램 API 활용기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한국투자증권의 Open API와 텔레그램 API를 활용하여 필요한 요청과 그에 대한 결과를 텔레그램 봇 메시지 받는 토이 프로젝트를 진행하였다. 두 API 모두 https 프로토콜을 사용하기 때문에 난이도&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 스케줄러를 활용하여 매일 장마감 이후 잔고 내역을 텔레그램 메시지로 받아보려 한다.&amp;nbsp; 스케줄러는 StockBalance클래스의 execute() 메소드를 호출한다.&amp;nbsp; 이후엔 https 프로토콜로 한국투자로 요청하고 응답값을 정제하여 생성된 메시지를 텔레그램 api로 요청하면 사용자의 단말기로 메시지를 수신받을 수 있다.&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-filename=&quot;edited_스크린샷 2023-02-27 오후 10.46.40.png&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8JCi/btr0NIr5neO/xnrCxi9wnEvqAX9Lox68bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8JCi/btr0NIr5neO/xnrCxi9wnEvqAX9Lox68bk/img.png&quot; data-alt=&quot;잔고조회 흐름도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8JCi/btr0NIr5neO/xnrCxi9wnEvqAX9Lox68bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8JCi%2Fbtr0NIr5neO%2FxnrCxi9wnEvqAX9Lox68bk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;367&quot; data-filename=&quot;edited_스크린샷 2023-02-27 오후 10.46.40.png&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잔고조회 흐름도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 한국투자증권과 텔레그램은 https 프로토콜로 통신하기 때문에 접근하기 매우 쉽다.&amp;nbsp; 한국투자증권 요청은 GET 메소드를 사용하고 텔레그램 요청은 POST 메소드를 사용한다.&amp;nbsp; 한국투자증권은 인증정보를 http header에 텔레그램은 인증값을 URI에 넣는다.&amp;nbsp; 다음 표는 잔고조회에 사용되는 URI이다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 46px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 19px; text-align: center;&quot;&gt;메소드명&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 19px;&quot;&gt;http method&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center;&quot;&gt;ContentType&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px; text-align: center;&quot;&gt;URI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 10px; text-align: center;&quot;&gt;한국투자 잔고조회&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 10px;&quot;&gt;GET&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center;&quot;&gt;application/json&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;
&lt;div&gt;https://openapi.koreainvestment.com:9443/uapi/domestic-stock/v1/trading/inquire-balance&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 17px; text-align: center;&quot;&gt;텔레그램 메시지 발송&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center; height: 17px;&quot;&gt;POST&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; text-align: center;&quot;&gt;application/json&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;
&lt;div&gt;https://api.telegram.org/bot&lt;span style=&quot;color: #ee2323;&quot;&gt;[TOKEN]&lt;/span&gt;/sendMessage&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 아래 소스는 잔고조회 소스 중 일부인 &lt;span style=&quot;background-color: #ffffff; color: #24292e;&quot;&gt;StockBalance 클래스이다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/malchooni/8130f953d2212e26cbbdd93a6540b64a.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 78번 라인, createPaper 메소드를 통해 요청값들을 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 48번 라인, 응답받은 TTTC8434RRes 오브젝트를 createMessage 메소드로 사용자에게 보낼 메시지를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 보낼 메시지를 만들고 64번 라인의 sendMessageToUser 메소드를 통해 텔레그램을 호출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 프로세스는 매우 간단한다.&amp;nbsp; 오히려 value object를 생성하는 일이 더 힘들다.&amp;nbsp; Map객체를 활용할 수 있겠으나 결국엔 명세는 있어야 한다.&amp;nbsp; 그래서 value object를 만들었다.&amp;nbsp; WADL를 지원하면 참 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 주식잔고에 요청할 명세는 아래 표와 같다.&amp;nbsp; 헤더 부분은 필자가 간추린 속성들이다.&amp;nbsp; 자세한 API 문서는 KIS Developers 사이트를 참조하면 되겠다.&amp;nbsp; 해당 소스는 샘플이므로 쿼리파라미터의 계좌번호를 제외한 다른 속성 값들은 소스에 고정 기입되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; - http header&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;헤더 속성명&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;gt_uid&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;트랜젝션 고윳값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;authorization&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;appkey, appsecret 값으로 발급받은 토큰값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;appkey&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;api 신청시 발급받은 appkey&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;appsecret&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;&lt;span&gt;api 신청시 발급받은&lt;span&gt; appsecret&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;tr_id&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;잔고조회 아이디&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; - query&amp;nbsp;parameters&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 잔고조회 API는 GET 메소드를 사용하기 때문에 Body 값에 메시지를 담는 것이 아닌 URI의 query parameter를 사용해야 한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 500px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;Element&lt;/td&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;한글명&lt;/td&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;Type&lt;/td&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;필수 여부&lt;/td&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;길이&lt;/td&gt;
&lt;td style=&quot;height: 18px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;CANO&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;종합계좌번호&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;계좌번호 체계(8-2)의 앞 8자리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;ACNT_PRDT_CD&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;계좌상품코드&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;계좌번호 체계(8-2)의 뒤 2자리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;AFHR_FLPR_YN&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;시간외단일가여부&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;N : 기본값&lt;br /&gt;Y : 시간외단일가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;OFL_YN&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;오프라인여부&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;공란(Default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;INQR_DVSN&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;조회구분&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;01 : 대출일별&lt;br /&gt;02 : 종목별&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;UNPR_DVSN&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;단가구분&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 36px;&quot;&gt;01 : 기본값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;FUND_STTL_ICLD_YN&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;펀드결제분포함여부&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;N : 포함하지 않음&lt;br /&gt;Y : 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;FNCG_AMT_AUTO_RDPT_YN&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;융자금액자동상환여부&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;N : 기본값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;PRCS_DVSN&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;처리구분&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;00 : 전일매매포함&lt;br /&gt;01 : 전일매매미포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;CTX_AREA_FK100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;연속조회검색조건100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;공란 : 최초 조회시&lt;br /&gt;이전 조회 Output CTX_AREA_FK100 값 : 다음페이지 조회시(2번째부터)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;CTX_AREA_NK100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;연속조회키100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;Y&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;공란 : 최초 조회시&lt;br /&gt;이전 조회 Output CTX_AREA_NK100 값 : 다음페이지 조회시(2번째부터)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;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-filename=&quot;img.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lYNPL/btr1dmVBChT/kFrTUZJ8krXa8GYzOKC8y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lYNPL/btr1dmVBChT/kFrTUZJ8krXa8GYzOKC8y1/img.png&quot; data-alt=&quot;사용자가 받은 메시지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lYNPL/btr1dmVBChT/kFrTUZJ8krXa8GYzOKC8y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlYNPL%2Fbtr1dmVBChT%2FkFrTUZJ8krXa8GYzOKC8y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;488&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용자가 받은 메시지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 전체소스는 아래 링크를 통해 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677509413259&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/trader-malchooni: toy project. 한국투자증권, 텔레그램 연동&quot; data-og-description=&quot;toy project. 한국투자증권, 텔레그램 연동. Contribute to malchooni/trader-malchooni development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/trader-malchooni&quot; data-og-url=&quot;https://github.com/malchooni/trader-malchooni&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blDh2L/hyRKP0JJU3/8ge4eFIgCxCdXhYCUldfw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/trader-malchooni&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/trader-malchooni&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blDh2L/hyRKP0JJU3/8ge4eFIgCxCdXhYCUldfw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/trader-malchooni: toy project. 한국투자증권, 텔레그램 연동&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;toy project. 한국투자증권, 텔레그램 연동. Contribute to malchooni/trader-malchooni development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Open API</category>
      <category>API</category>
      <category>spring boot</category>
      <category>자바</category>
      <category>잔고조회</category>
      <category>텔레그램</category>
      <category>한국투자증권</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/50</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9-%EC%9E%94%EA%B3%A0-%EC%A1%B0%ED%9A%8C#entry50comment</comments>
      <pubDate>Tue, 28 Feb 2023 19:55:33 +0900</pubDate>
    </item>
    <item>
      <title>한국투자증권, 텔레그램 API 활용기</title>
      <link>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 한국투자증권의 Open API와 텔레그램 API를 활용하여 필요한 요청과 그에 대한 결과를 텔레그램 봇 메시지 받는 토이 프로젝트를 진행하였다.&amp;nbsp; 두 API 모두 https 프로토콜을 사용하기 때문에 난이도는 어렵지 않다.&amp;nbsp; 소스는 trader-malchooni란 이름으로 github에 올려놓았다.&amp;nbsp; 링크는 글 하단에 있다.&amp;nbsp; 또한 이 글을 시작으로 필자가 진행 중인 매매시스템 구축에 대해 꾸준히 글을 써보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 프로젝트를 활용하면 나의 주식계좌에 대한 접근성이 높아진다.&amp;nbsp; 증권사 어플을 통해서가 아닌 특정 시각에 나의 잔고내역을 텔레그램 메시지로 받아 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; - 한국투자증권 API&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;https 프로토콜을 활용하여 API를 제공한 국내 최초의 증권사일 것이다.&amp;nbsp; 이 증권사의 REST API를 알기 전까진 이베스트투자증권의 COM버전의&amp;nbsp; API를 랩핑 하여 http프로토콜로 사용하고 있었다.&amp;nbsp; 이 랩핑 프로젝트도 아래의 박스를 클릭하면 열람할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677203483644&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/buycycle: 증권사 API Restful 변환 모듈&quot; data-og-description=&quot;증권사 API Restful 변환 모듈. Contribute to malchooni/buycycle development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/buycycle&quot; data-og-url=&quot;https://github.com/malchooni/buycycle&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/5mSyD/hyRJUl2iQB/K2K8RiX6da1BYN1LEwAMAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/buycycle&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/buycycle&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/5mSyD/hyRJUl2iQB/K2K8RiX6da1BYN1LEwAMAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/buycycle: 증권사 API Restful 변환 모듈&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;증권사 API Restful 변환 모듈. Contribute to malchooni/buycycle development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 바이사이클이란 이름으로 소스를 공개하였다.&amp;nbsp; 물론 버그도 있지만 현재까지 잘 활용하고 있다.&amp;nbsp; 한국투자증권 이야기로 다시 돌아와, 증권사에서 https 프로토콜을 사용하여 API를 제공해 주니 필자 입장에선 구미가 당길 수밖에 없었다.&amp;nbsp; 이미 한국투자증권의 ISA계좌를 갖고 있어 open api 서비스를 신청하는 건 어렵지 않았다.&amp;nbsp; &lt;a href=&quot;https://apiportal.koreainvestment.com/intro&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://apiportal.koreainvestment.com/intro&lt;/a&gt;&amp;nbsp; 사이트에 방문하여 api 신청을 하면 비교적 간단하게 key를 발급받을 수 있다.&amp;nbsp; 발급받은 key는 인증, 토큰을 생성하는데 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; API 문서를 개발자사이트에서 제공하고 있다.&amp;nbsp; 다만 WADL까지 제공했음 더 좋았을 것 같다.&amp;nbsp; value object를 생성하는 일이 보통일이 아니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; - 텔레그램 API&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;텔레그램 API에 대한 접근은 매우 쉽고 뛰어났다.&amp;nbsp; 참조할 수 있는 문서들이 많고 API를 접근하기 위한 복잡하고 어려운 절차들이 없어 매우 편리하였다.&amp;nbsp; 그래서 대화형 인풋 아웃풋의 대한 매개체를 텔레그램으로 정하였다.&amp;nbsp; 봇 메시지&amp;nbsp;업데이트&amp;nbsp;하는 방법은 getUpdate 메소드를 통해 주기적 텔레그램을 호출하는 방법이 있고, 텔렘그램이 내가 등록한 주소로 호출해 주는 리슨 방식이 있다.&amp;nbsp; 인, 아웃 매개체를 텔레그램으로 선정하였으니 텔레그램 API에 대한 활용도 같이 포스팅할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; - trader-malchooni Project&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; 이 프로젝트는 spring-boot를 사용하여 누구나 쉽게 접근할 수 있도록 제작되었다.&amp;nbsp; bootstrap.yml엔 기본 설정을 담고 있고, application.yml엔 스케쥴러 설정 및 API를 이용할 한국투자증권과 텔레그램에 관한 개인키 설정이 들어간다.&amp;nbsp; 만약 이 프로젝트를 활용한다면 &lt;span&gt;application.yml&lt;span&gt; 파일은 공개해선 안된다.&amp;nbsp; 민감한 정보들이 많이 들어있는 파일이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 본래 프로젝트는 DB 연동 및 Buycycle 연동 등이 있으나, 접근하기 쉽게 lite refactoring 하여 trader-malchooni란 이름으로 공개하였다.&amp;nbsp; 아래 링크를 통해 레파지토리에 접근할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677203500753&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/trader-malchooni: toy project. 한국투자증권, 텔레그램 연동&quot; data-og-description=&quot;toy project. 한국투자증권, 텔레그램 연동. Contribute to malchooni/trader-malchooni development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/trader-malchooni&quot; data-og-url=&quot;https://github.com/malchooni/trader-malchooni&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/u68oY/hyRJVZyPmb/Fkq3VcmGoDFGevTzKLOMKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/trader-malchooni&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/trader-malchooni&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/u68oY/hyRJVZyPmb/Fkq3VcmGoDFGevTzKLOMKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/trader-malchooni: toy project. 한국투자증권, 텔레그램 연동&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;toy project. 한국투자증권, 텔레그램 연동. Contribute to malchooni/trader-malchooni development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 클론 받은 레파지토리의 application.yml 파일을 열어 한국투자증권과 텔레그램에서 생성한 고윳값을 넣어주면 실행 준비가 끝난다.&lt;/p&gt;
&lt;pre id=&quot;code_1677250426437&quot; class=&quot;yaml&quot; data-ke-language=&quot;highlight.js&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 한국투자증권 설정
ki:
  appKey: &quot;&quot;
  appSecret: &quot;&quot;
  accountNo: &quot;&quot;

# 텔레그램 설정
telegram:
  token: &quot;&quot;
  chatId: &quot;&quot;

# 스케줄러 설정
job:
  cron:
    ki:
      # 토큰 생성
      createToken: &quot;0 55 8 * * MON-FRI&quot;
      # 토큰 폐기
      removeToken: &quot;0 0 18 * * MON-FRI&quot;
      # 잔고 확인
      stockBalance: &quot;10 35 15 * * MON-FRI&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 현재는 3가지 메소드만 지원하고 있다.&amp;nbsp; API 접근을 위한 토큰 생성, 폐기 그리고 잔고 조회이다.&amp;nbsp; &amp;nbsp;스케줄 주기에 따라 작동한다.&amp;nbsp; 하지만 사용자 이벤트 콜을 위해 @RestController 사용하여 버튼 콜도 생성했다.&amp;nbsp; &lt;span&gt;웹브라우저를 통해&lt;span&gt; &lt;/span&gt;&lt;/span&gt;http://localhost:7772 주소로 접근하면 아래와 같은 페이지를 열람할 수 있다.&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-filename=&quot;스크린샷 2023-02-24 오후 11.39.37.png&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1Egr/btr0Hu761zN/RUK0DamfGcHHCKEW1iC0bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1Egr/btr0Hu761zN/RUK0DamfGcHHCKEW1iC0bk/img.png&quot; data-alt=&quot; http://localhost:7772 웹브라우저로 접근&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1Egr/btr0Hu761zN/RUK0DamfGcHHCKEW1iC0bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1Egr%2Fbtr0Hu761zN%2FRUK0DamfGcHHCKEW1iC0bk%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;700&quot; height=&quot;238&quot; data-filename=&quot;스크린샷 2023-02-24 오후 11.39.37.png&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; http://localhost:7772 웹브라우저로 접근&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 텔레그램으로 수신된 메시지는 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-24 오후 11.43.31.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXL72i/btr0NNSRsH0/OClEuw822r0MD2K9IuMKk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXL72i/btr0NNSRsH0/OClEuw822r0MD2K9IuMKk0/img.png&quot; data-alt=&quot;텔레그램 수신 메시지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXL72i/btr0NNSRsH0/OClEuw822r0MD2K9IuMKk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXL72i%2Fbtr0NNSRsH0%2FOClEuw822r0MD2K9IuMKk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;366&quot; data-filename=&quot;스크린샷 2023-02-24 오후 11.43.31.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;텔레그램 수신 메시지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 앞으로 이 프로젝트에 대한 설명과 기능 추가 포스팅을 진행할 예정이다.&lt;/p&gt;</description>
      <category>프로그래밍/Open API</category>
      <category>API</category>
      <category>OPEN</category>
      <category>Telegram</category>
      <category>한국투자증권</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/49</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-API-%ED%99%9C%EC%9A%A9%EA%B8%B0#entry49comment</comments>
      <pubDate>Fri, 24 Feb 2023 15:30:09 +0900</pubDate>
    </item>
    <item>
      <title>한국투자증권 Open API, 'Talend API Tester' 테스트 해보기</title>
      <link>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-Open-API-Talend-API-Tester-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%95%B4%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;한국투자증권에서 국내 증권사 최초로 Open API를 2022년 4월부터 제공했다. HTTPS 프로토콜에 OAuth 인증을 사용한다. 이것으로 기존 증권사 API들의 윈도우 OS에 종속적이거나 공인인증서 등을 설치해야 하는 복잡한 프로세스들이 사라졌다. 시스템 트레이딩을 구축하는 개인들에겐 엄청나게 기쁜 소식이 아닐 수 없다. 이베스트증권사의 api를 http프토콜로 맵핑시킨 필자의 오픈소스 프로젝트가 없어질 날이 멀지 않은 것 같다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;opensource.buycycle.name&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;opensource.buycycle.name&quot; data-og-source-url=&quot;https://opensource.buycycle.name/&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://opensource.buycycle.name/&quot;&gt;&lt;a href=&quot;https://opensource.buycycle.name/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opensource.buycycle.name/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('\'\'');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;opensource.buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opensource.buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아래 사이트에 방문하여 한국투자 API를 신청 후 구글 크롬 웹 스토에서 api test로 유명한 'Talend API Tester' 앱을 이용하여 테스트해보았다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;KIS Developers&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;잠시만 기다려 주세요&quot; data-og-host=&quot;apiportal.koreainvestment.com&quot; data-og-source-url=&quot;https://apiportal.koreainvestment.com/intro&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://apiportal.koreainvestment.com/intro&quot;&gt;&lt;a href=&quot;https://apiportal.koreainvestment.com/intro&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apiportal.koreainvestment.com/intro&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('\'\'');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;KIS Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;잠시만 기다려 주세요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apiportal.koreainvestment.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;oauth 인증이기 때문에 api 신청시 발급받은 app key와 app secret값으로 토큰을 받을 수 있다. /oauth2/tokenP URI로 값을 넘기면 하루 동안 사용할 수 있는 토큰 값을 응답으로 준다. 이 토큰으로 다른 URI를 호출할 때 인증값으로 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWyHy9/btrT6YNMdTX/Vqt2HLgg0cVaXyFxV8r8C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWyHy9/btrT6YNMdTX/Vqt2HLgg0cVaXyFxV8r8C0/img.png&quot; data-alt=&quot;토큰값 요청&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWyHy9/btrT6YNMdTX/Vqt2HLgg0cVaXyFxV8r8C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWyHy9%2FbtrT6YNMdTX%2FVqt2HLgg0cVaXyFxV8r8C0%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;905&quot; height=&quot;880&quot; data-origin-width=&quot;905&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토큰값 요청&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;URI 마다 사용해야 할 메소드가 있으니 이는 API 문서를 참고하면 된다. 이렇게 인증 요청을 하면 응답 값 'access_token'을 선물로 준다. 그럼 이 토큰 값으로 주식 주문을 해 보겠다.&lt;br /&gt;주식 주문의 URI는 /uapi/domestic-stock/v1/trading/order-cash 이다. 메소드는 POST로 하라고 API 문서에 명시되어 있다. POST 메소드니 요청 바디에 JSON 메시지를 담아 보내야 한다. 그전에 요구하는 기본정보는 http header에 넣어주어야 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTKdRm/btrT41R1sMS/uFliBN3crCjyJkEZ0pHgK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTKdRm/btrT41R1sMS/uFliBN3crCjyJkEZ0pHgK0/img.png&quot; data-alt=&quot;주식 주문 요청&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTKdRm/btrT41R1sMS/uFliBN3crCjyJkEZ0pHgK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTKdRm%2FbtrT41R1sMS%2FuFliBN3crCjyJkEZ0pHgK0%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;994&quot; height=&quot;882&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;주식 주문 요청&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;API문서에 자세한 설명과 JSON 샘플 메시지가 있다. 간략하게 설명하면 헤더 속성 중 authorization에는 응답받은 토큰 값을 넣는다 'Bearer '이어 토큰 값을 넣으면 된다. appkey, appsecret 유니크한 보안 키이니 잘 간직하고 외부에 노출하는 일이 없어야겠다. gt_uid는 트랜젝션 키값이다. 필수 사항은 아니지만 자신이 요청한 트래픽에 대한 응답에 같은 값을 넣어준다. 필수는 아니지만 사용하길 권장한다. UUID값을 넣었으나 32Byte까지 사용하라 해서 4Byte 자르고 넣었다. 실제 사용할 땐 직관적인 년월일시분초시퀀스 포맷이 괜찮을 것 같다.&lt;br /&gt;&lt;br /&gt;이렇게 구글 웹 스토어에서 다운로드한 'Talend API Tester' 이용해 API 테스트를 해보았다. https에 OAuth 인증으로 Open API를 제공하는 증권사가 생기다니 개발자로서 많이 흥미로운 일이다. Open API를 제공해주니 적극 잘 활용해봐야겠다.&lt;/p&gt;</description>
      <category>프로그래밍/Open API</category>
      <category>https</category>
      <category>oauth</category>
      <category>Open api</category>
      <category>Talend API Tester</category>
      <category>증권사</category>
      <category>한국투자증권</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/48</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%95%9C%EA%B5%AD%ED%88%AC%EC%9E%90%EC%A6%9D%EA%B6%8C-Open-API-Talend-API-Tester-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%95%B4%EB%B3%B4%EA%B8%B0#entry48comment</comments>
      <pubDate>Tue, 20 Dec 2022 11:13:40 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 시놀로지 포토 외부 접속 설정 하기</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80-%ED%8F%AC%ED%86%A0-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D-%EC%84%A4%EC%A0%95-%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 사진을 백업하는 방법은 여러 가지가 있다. 자주 사용하는 컴퓨터에 백업하던가, 클라우드 서비스의 월정액 서비스를 이용한다. 그러나 컴퓨터에 백업하는 방법은 선을 연결 후 파일을 복사하는 과정을 반복해야 하므로 귀찮음이 커지고 클라우드 서비스는 유료로 이용해야 한다. 그렇지 않다면 개인용 나스를 구입하는 것도 좋은 솔루션이 될 수 있다.&lt;br&gt; 필자는 본래 홈서버 사이의 NFS가 필요해서 구입하였지만 패키지 센터 앱들이 정말 잘 되어있다. 그중 하나가 시놀로지 포토였고 사용하기도 매우 편리했다. 전문가가 아니더라도 쉽게 사용할 수 있는 소프트웨어가 시놀로지의 가장 큰 장점이다.&lt;br&gt; DSM 7.0이 되면서 Synology Photo Station 및 Moments가 Synology Photos로 대체되었다.&lt;br&gt; &lt;br&gt; 시놀로지 포토의 설치부터 외부 접속까지 진행해보려고 한다. 순서는 아래와 같다.&lt;br&gt; 1. Synology Photos 설치&lt;br&gt; 2. Synology Photos 포트 설정&lt;br&gt; 3. DDNS 설정으로 외부 접속 ( letsencrypt 인증서 사용 )&lt;br&gt; &lt;br&gt;&lt;b&gt; 1. Synology Photos 설치&lt;/b&gt;&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2642&quot; data-origin-height=&quot;1486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7gT8G/btrTBjfI9Q0/98L8ycOv1VHeNwS1hzqvHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7gT8G/btrTBjfI9Q0/98L8ycOv1VHeNwS1hzqvHk/img.png&quot; data-alt=&quot; 패키지 센터 시놀로지 포토 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7gT8G/btrTBjfI9Q0/98L8ycOv1VHeNwS1hzqvHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7gT8G%2FbtrTBjfI9Q0%2F98L8ycOv1VHeNwS1hzqvHk%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;2642&quot; height=&quot;1486&quot; data-origin-width=&quot;2642&quot; data-origin-height=&quot;1486&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 패키지 센터 시놀로지 포토 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 패키지 센터에서 photo를 검색하면 Synology Photos가 나온다. DSM 7.0 이상부턴 Photo Station 및 Moments가 사라지고 Synology Photos로 대체되었다. 설치 버튼을 누르면 설치가 진행된다.&lt;br&gt; &lt;br&gt;&lt;b&gt; 2. Synology Photos 포트 설정&lt;/b&gt;&lt;br&gt; &lt;br&gt; 설치를 완료하고 시놀로지 포토를 서비스할 포트번호를 설정해야 한다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2736&quot; data-origin-height=&quot;1386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQtUxn/btrTQxcghjP/DJ5UTNGctdVUBVlRtyVrj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQtUxn/btrTQxcghjP/DJ5UTNGctdVUBVlRtyVrj0/img.png&quot; data-alt=&quot; 제어판 - 로그인 포털 - 응용프로그램 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQtUxn/btrTQxcghjP/DJ5UTNGctdVUBVlRtyVrj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQtUxn%2FbtrTQxcghjP%2FDJ5UTNGctdVUBVlRtyVrj0%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;2736&quot; height=&quot;1386&quot; data-origin-width=&quot;2736&quot; data-origin-height=&quot;1386&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 제어판 - 로그인 포털 - 응용프로그램 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 제어판 아이콘을 클릭 후 '로그인 포털', 응용프로그램, Synology Photos 선택 후 편집을 클릭한다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EfJ3H/btrTQPqd40P/wPU1LLgpROPip5hEk5T3L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EfJ3H/btrTQPqd40P/wPU1LLgpROPip5hEk5T3L1/img.png&quot; data-alt=&quot; 포트 설정 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EfJ3H/btrTQPqd40P/wPU1LLgpROPip5hEk5T3L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEfJ3H%2FbtrTQPqd40P%2FwPU1LLgpROPip5hEk5T3L1%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;556&quot; height=&quot;505&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 포트 설정 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 시놀로지 포토가 서비스할 포트번호를 지정해준다. HTTPS에만 포트 설정하는 걸 추천한다. 스크린샷엔 HTTP도 설정되어있는데 공유기를 통한 내부망에서만 접근할 것이라면 HTTP를 써도 무방하다. 하지만 외부 접속을 감안하면 HTTPS에 서비스할 포트번호를 설정하고 저장한다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;1310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TkVAJ/btrTQ0SMoaZ/9iMfQVClP4ywqKRpGvkvHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TkVAJ/btrTQ0SMoaZ/9iMfQVClP4ywqKRpGvkvHK/img.png&quot; data-alt=&quot; 공유기 포트포워딩 설정 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TkVAJ/btrTQ0SMoaZ/9iMfQVClP4ywqKRpGvkvHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTkVAJ%2FbtrTQ0SMoaZ%2F9iMfQVClP4ywqKRpGvkvHK%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;530&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;1310&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 공유기 포트포워딩 설정 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 서비스 포트 번호 설정 후 외부 접속을 위해 공유기의 포트 포워딩을 설정한다. 외부 접속 및 홈네트워크 구성을 잘 모른다면 아래 글을 읽어 보면 이해할 것이다. 5443번 포트로 서비스 중이니 내부 IP의 5443번 포트를 포워딩 설정을 한다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[홈서버구축] 홈네트워크 구성하기 (1)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2vDsH/hyQU3jUHVs/kzO618CvjSkib0QiMkaEBk/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/HoK9q/hyQU59SOJW/CgkCro1Fqmiwk1dZP1D7q1/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/sY4lX/hyQU2k1fcH/BQaru7nYbndNdK4S2CjuMk/img.png?width=768&amp;amp;height=576&amp;amp;face=0_0_768_576&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot;&gt;
 &lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; target=&quot;_blank&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2vDsH/hyQU3jUHVs/kzO618CvjSkib0QiMkaEBk/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/HoK9q/hyQU59SOJW/CgkCro1Fqmiwk1dZP1D7q1/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/sY4lX/hyQU2k1fcH/BQaru7nYbndNdK4S2CjuMk/img.png?width=768&amp;amp;height=576&amp;amp;face=0_0_768_576')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[홈서버구축] 홈네트워크 구성하기 (1)&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt;&lt;b&gt; 3. DDNS 설정으로 외부 접속 ( letsencrypt 인증서 사용 )&lt;/b&gt;&lt;br&gt; &lt;br&gt; 보통 가정용 인터넷은 유동 IP다. 외부 접속을 위해 DDNS를 많이 사용한다. iptime에서도 DDNS 서비스를 제공하고 시놀로지에서도 DDNS를 서비스해준다. 그러나 필자는 시놀로지의 DDNS 서비스를 이용하길 권장한다. 이유는 HTTPS 서비스를 할 때 사용하는 인증서 때문이다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;1284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EVUEG/btrTO52Anpw/4TmRZHyHDz34Et7IsndRm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EVUEG/btrTO52Anpw/4TmRZHyHDz34Et7IsndRm1/img.png&quot; data-alt=&quot; 제어판 - 외부 액세스 - DDNS 추가 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EVUEG/btrTO52Anpw/4TmRZHyHDz34Et7IsndRm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEVUEG%2FbtrTO52Anpw%2F4TmRZHyHDz34Et7IsndRm1%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;2282&quot; height=&quot;1284&quot; data-origin-width=&quot;2282&quot; data-origin-height=&quot;1284&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 제어판 - 외부 액세스 - DDNS 추가 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 제어판 아이콘 클릭 후 '외부 액세스' 'DDNS'탭으로 이동한다. 추가 버튼을 누르면 아래와 같은 팝업창이 나타난다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;1014&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjK15I/btrTPhoieYK/uZe9iHw8LsDgs7EJKLnU8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjK15I/btrTPhoieYK/uZe9iHw8LsDgs7EJKLnU8K/img.png&quot; data-alt=&quot; DDNS 설정 상세 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjK15I/btrTPhoieYK/uZe9iHw8LsDgs7EJKLnU8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjK15I%2FbtrTPhoieYK%2FuZe9iHw8LsDgs7EJKLnU8K%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;641&quot; height=&quot;432&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;1014&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; DDNS 설정 상세 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 서비스 공급자를 시놀로지로 선택한다. 다만 시놀로지 계정에 가입해야 서비스를 이용할 수 있다. 호스트 이름은 원하는 이름으로 기입한다. 마지막으로 Let's Encrtpt 인증서 사용에 체크한다. HTTPS 인증서는 공인된 기관의 인증서를 사용해야 다음과 같은 화면이 나타나지 않는다. 설정을 끝내고 확인 버튼을 누르면 외부에서 접속할 수 있는 도메인이 생성된다. &lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3088&quot; data-origin-height=&quot;1602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlIj1/btrTPWcH4f6/HhGk1Ob860gzvfJL3LwBWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlIj1/btrTPWcH4f6/HhGk1Ob860gzvfJL3LwBWK/img.png&quot; data-alt=&quot; 시놀로지 인증서 사용시 접근 화면 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlIj1/btrTPWcH4f6/HhGk1Ob860gzvfJL3LwBWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlIj1%2FbtrTPWcH4f6%2FHhGk1Ob860gzvfJL3LwBWK%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;3088&quot; height=&quot;1602&quot; data-origin-width=&quot;3088&quot; data-origin-height=&quot;1602&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 시놀로지 인증서 사용시 접근 화면 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; Let's Encrtpt는 공인인증기관이며 개인 및 소규모 기업을 위해 인증서를 무료로 발급해준다. 유효기간은 3개월이며 3개월마다 갱신한다. 물론 시놀로지 인증서를 사용해도 통신 프로토콜에 암복호화가 된다. 다만 시놀로지의 사설 인증서를 신뢰하지 못해 나타나는 화면이다. &lt;br&gt; DDNS에서 설정한 도메인명과 포트 포워딩에 사용한 포트번호로 브라우저를 통해 요청하면 아래와 같은 화면이 나타난다. Let's Encrtpt의 인증서를 사용했기에 '인증서가 유효함'이라는 메시지도 확인할 수 있다.&lt;br&gt; &lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
 &lt;tbody&gt;
  &lt;tr&gt;
   &lt;td style=&quot;width: 100.0%; text-align: justify;&quot;&gt;예 ) https://myhomephoto.synology.me:5443&lt;/td&gt;
  &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;1694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckR46u/btrTQ0k75ci/eI1alyJnTuVakMiGPrHAE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckR46u/btrTQ0k75ci/eI1alyJnTuVakMiGPrHAE0/img.png&quot; data-alt=&quot; 시놀로지 포토 로그인 화면 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckR46u/btrTQ0k75ci/eI1alyJnTuVakMiGPrHAE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckR46u%2FbtrTQ0k75ci%2FeI1alyJnTuVakMiGPrHAE0%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;2904&quot; height=&quot;1694&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;1694&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 시놀로지 포토 로그인 화면 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 이렇게 시놀로지 포토의 외부 접속 설정을 마쳤다. 시놀로지는 구글이나 네이버의 클라우드 서비스를 이용하지 않는 사람들에게 좋은 대안이다. 휴대폰에 시놀로지 포토 앱을 설치하면 자동 백업이 되고 이를 웹 환경에서도 접근이 가능하니 매우 편리하다. 개인 서버를 구축하는 사람에겐 시놀로지는 좋은 제품이다.&lt;br&gt; &lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Synology Photos 빠른 시작 가이드   - Synology 지식 센터&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;&quot; data-og-host=&quot;kb.synology.com&quot; data-og-source-url=&quot;https://kb.synology.com/ko-kr/DSM/tutorial/Quick_Start_Synology_Photos&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://kb.synology.com/ko-kr/DSM/tutorial/Quick_Start_Synology_Photos&quot;&gt;
 &lt;a href=&quot;https://kb.synology.com/ko-kr/DSM/tutorial/Quick_Start_Synology_Photos&quot; target=&quot;_blank&quot; data-source-url=&quot;https://kb.synology.com/ko-kr/DSM/tutorial/Quick_Start_Synology_Photos&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;Synology Photos 빠른 시작 가이드&amp;nbsp;&amp;nbsp; - Synology 지식 센터&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;kb.synology.com&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;</description>
      <category>홈서버</category>
      <category>DDNS</category>
      <category>Let's Encrtpt</category>
      <category>Synology Photos</category>
      <category>사진 백업</category>
      <category>시놀로지</category>
      <category>포토</category>
      <category>포트포워딩</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/47</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80-%ED%8F%AC%ED%86%A0-%EC%99%B8%EB%B6%80-%EC%A0%91%EC%86%8D-%EC%84%A4%EC%A0%95-%ED%95%98%EA%B8%B0#entry47comment</comments>
      <pubDate>Fri, 16 Dec 2022 18:38:18 +0900</pubDate>
    </item>
    <item>
      <title>[깃랩설치형서버] 크론탭으로 자동 백업 설정하기</title>
      <link>https://malchooni.tistory.com/entry/%EA%B9%83%EB%9E%A9%EC%84%A4%EC%B9%98%ED%98%95%EC%84%9C%EB%B2%84-%ED%81%AC%EB%A1%A0%ED%83%AD%EC%9C%BC%EB%A1%9C-%EC%9E%90%EB%8F%99-%EB%B0%B1%EC%97%85-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 깃랩은 프로젝트 생성 시 깃 레파지토리 2개를 생성한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;root@git:/var/opt/gitlab/git-data/repositories/@hashed/6b/86#&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ll&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;total&amp;nbsp;16&lt;br /&gt;drwxr-s---&amp;nbsp;4&amp;nbsp;git&amp;nbsp;git&amp;nbsp;4096&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;./&lt;br /&gt;drwxr-s---&amp;nbsp;3&amp;nbsp;git&amp;nbsp;git&amp;nbsp;4096&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;../&lt;br /&gt;drwx--S---&amp;nbsp;5&amp;nbsp;git&amp;nbsp;git&amp;nbsp;4096&amp;nbsp;Aug&amp;nbsp;29&amp;nbsp;12:00&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;6b86b273ff34fce19d6b804effada4eaa22f1d49c01e52ddb7875b4b&lt;/span&gt;&lt;/b&gt;.git/&lt;br /&gt;drwx--S---&amp;nbsp;5&amp;nbsp;git&amp;nbsp;git&amp;nbsp;4096&amp;nbsp;Aug&amp;nbsp;29&amp;nbsp;12:00&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;6b86b273ff34fce19d6b804effada4eaa22f1d49c01e52ddb7875b4b.wiki&lt;/b&gt;&lt;/span&gt;.git/&lt;br /&gt;root@git:/var/opt/gitlab/git-data/repositories/@hashed/6b/86#&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 하나는 소스 코드 레파지토리, 또 하나는 깃랩에서 제공하는 위키라는 페이지의 레파지토리다.&amp;nbsp; 위키도 깃 레파지토리로 구성되어 있어 형상관리를 한다.&amp;nbsp; 그래서 깃 레파지토리만 따로 클론 하거나 복구할 때 /var/opt/gitlab/git-data/repositories 디렉터리를 이용하기도 한다. 물론 위의 파란색 글씨처럼 깃랩에서 생성한 레파지토리기 때문에 알 수 없는 명명규칙으로 깃 레파지토리를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 깃랩 설치형 모듈은 백업을 제공해주고 있다.&amp;nbsp; 이를 이용해야 깃 레파지토리는 물론이고, 이슈 및 머지리퀘스트 같은 DB 데이터도 같이 백업이 된다.&amp;nbsp; 필자는 편의상 root 계정을 활용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1661827876393&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Back up GitLab | GitLab&quot; data-og-description=&quot;Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.&quot; data-og-host=&quot;docs.gitlab.com&quot; data-og-source-url=&quot;https://docs.gitlab.com/ee/raketasks/backup_gitlab.html&quot; data-og-url=&quot;https://docs.gitlab.com/ee/raketasks/backup_gitlab.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.gitlab.com/ee/raketasks/backup_gitlab.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.gitlab.com/ee/raketasks/backup_gitlab.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Back up GitLab | GitLab&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.gitlab.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 공식문서에선 &lt;span style=&quot;background-color: #ffffff; color: #404040;&quot;&gt;12.1&lt;span&gt; 이전버전과 &lt;span style=&quot;background-color: #ffffff; color: #404040;&quot;&gt;12.2 이후 버전의 명령어가 다른다.&amp;nbsp; 필자의 버전은 gitlab-ce v.14.6.1이기 때문에 다음 명령어를 사용하였다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;root@git:/opt/gitlab/bin#&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ll&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;total&amp;nbsp;40&lt;br /&gt;drwxr-xr-x&amp;nbsp;&amp;nbsp;2&amp;nbsp;root&amp;nbsp;root&amp;nbsp;4096&amp;nbsp;Aug&amp;nbsp;22&amp;nbsp;17:01&amp;nbsp;./&lt;br /&gt;drwxr-xr-x&amp;nbsp;11&amp;nbsp;root&amp;nbsp;root&amp;nbsp;4096&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;../&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;3679&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-backup*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;1418&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-ctl*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;250&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-healthcheck*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;702&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-psql*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;1288&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-rails*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;1287&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-rake*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;724&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-redis-cli*&lt;br /&gt;-rwxr-xr-x&amp;nbsp;&amp;nbsp;1&amp;nbsp;root&amp;nbsp;root&amp;nbsp;1287&amp;nbsp;Jan&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;2022&amp;nbsp;gitlab-ruby*&lt;br /&gt;root@git:/opt/gitlab/bin# &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;/opt/gitlab/bin/gitlab-backup&amp;nbsp;create&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 후 백업이 정상적으로 진행되었다면 /var/opt/gitlab/backups 경로에 아래와 같이 파일이 생성될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;root@git:/var/opt/gitlab/backups#&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ll&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;total&amp;nbsp;5108480&lt;br /&gt;drwx------&amp;nbsp;&amp;nbsp;2&amp;nbsp;git&amp;nbsp;&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12288&amp;nbsp;Aug&amp;nbsp;30&amp;nbsp;11:08&amp;nbsp;./&lt;br /&gt;drwxr-xr-x&amp;nbsp;21&amp;nbsp;root&amp;nbsp;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4096&amp;nbsp;Jun&amp;nbsp;27&amp;nbsp;16:28&amp;nbsp;../&lt;br /&gt;-rw-------&amp;nbsp;&amp;nbsp;1&amp;nbsp;git&amp;nbsp;&amp;nbsp;git&amp;nbsp;&amp;nbsp;5231063040&amp;nbsp;Aug&amp;nbsp;30&amp;nbsp;11:08&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1661825215_2022_08_30_14.6.1_gitlab_backup.tar&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 생성된 이 tar 파일로 필요시 복구를 진행하면 된다.&amp;nbsp; 필자는 다른 디스크에 백업하기 위해 &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;scp 명령어를 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;다른 서버에 해당 파일을 전송하였다.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;root@git:/var/opt/gitlab/backups#&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;scp 1661825215_2022_08_30_14.6.1_gitlab_backup.tar&amp;nbsp;&amp;nbsp;root@xxx.xxx.xxx.xxx:/var/opt/gitlab/backups/&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 비밀번호 입력 없이 key 접근을 위해 대상 서버 ~/.ssh/authorized_keys 파일에 전송 서버의 ssh-rsa 키도 등록해 놓았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; scp 명령어로 파일 전송 후 대상 서버 /var/opt/gitlab/backups 디렉터리에 파일이 존재하는지 확인하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 작업의 자동화를 위해 crontab에 등록하는 작업을 하겠다.&amp;nbsp; 다음 명령어로 crontab을 수정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;root@git:~#&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;crontab&amp;nbsp;-e&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;0&amp;nbsp;2&amp;nbsp;*&amp;nbsp;*&amp;nbsp;*&amp;nbsp;/opt/gitlab/bin/gitlab-backup&amp;nbsp;create&lt;br /&gt;0 3 * * * find /var/opt/gitlab/backups -type f -name '*gitlab_backup.tar' -ctime 0 -exec scp {} root@ xxx.xxx.xxx.xxx:/var/opt/gitlab/backups/ \;&lt;br /&gt;30&amp;nbsp;3&amp;nbsp;*&amp;nbsp;*&amp;nbsp;*&amp;nbsp;find&amp;nbsp;/var/opt/gitlab/backups&amp;nbsp;-type&amp;nbsp;f&amp;nbsp;-name&amp;nbsp;'*gitlab_backup.tar'&amp;nbsp;-ctime&amp;nbsp;+10&amp;nbsp;-exec&amp;nbsp;rm&amp;nbsp;{}&amp;nbsp;\;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 매일 2시 /opt/gitlab/bin/gitlab-backup create 명령어로 gitlab_backup.tar 파일을 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 매일 3시 /var/opt/gitlab/backups 디렉토리에 당일 생성된 gitlab_backup.tar 파일을 찾아 scp로 대상 서버에 전송한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 매일 3시 30분 ctime 기준으로 10일 이후의 파일들은 삭제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위 내용을 기입 후 저장으로 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;root@git:~#&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;/etc/init.d/cron&amp;nbsp;restart&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 크론탭을 재시작하면 작업이 완료된다.&amp;nbsp; 한 가지 주의할 점은 백업 시 레파지토리 이상(파일 깨짐 등등)으로 진행되지 않을 경우가 있다.&amp;nbsp; 문제는 그 레파지토리만 건너뛰는 것이 아니라 모든 레파지토리의 백업이 중단된다.&amp;nbsp; &amp;nbsp;꾸준한 모니터링은 필요하다.&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>backup</category>
      <category>crontab</category>
      <category>FIND</category>
      <category>gitlab</category>
      <category>scp</category>
      <category>백업</category>
      <category>설치형</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/46</guid>
      <comments>https://malchooni.tistory.com/entry/%EA%B9%83%EB%9E%A9%EC%84%A4%EC%B9%98%ED%98%95%EC%84%9C%EB%B2%84-%ED%81%AC%EB%A1%A0%ED%83%AD%EC%9C%BC%EB%A1%9C-%EC%9E%90%EB%8F%99-%EB%B0%B1%EC%97%85-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0#entry46comment</comments>
      <pubDate>Tue, 30 Aug 2022 12:19:41 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 부티크 호텔 10297 LED 작업 Vonado</title>
      <link>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 레고 모듈러 시리즈인 부티크 호텔은 모듈러 15주년 기념 2022년 1월 1일에 출시한 최신 모듈러이다. 부티크 호텔의 브릭수는 3066개로 조립시간은 약 8시간이 소요되었다. &lt;br&gt; &lt;br&gt; LED 설치를 위해 알리익스프레스에서 'Vonado' 라는 판매자에게 키트 제품을 구매하였다. 이 판매자에게 구매한 이유는 가장 먼저 키트 제품을 선보였다. 출시 후 얼마 지나지 않은 상황이라 빠른 설치를 위해 이 판매자에게 구매하였다. 구입 당시 가격은 $35.40 였으며 글을 쓰고 있는 지금은 $20.64에 판매하고 있다. 레고 출시 직후 LED 키트 제품은 추천하지 않는다. 다른 키트 제품이 나올 때까지 기다렸다가 비교해보고 구입하는 것이 좋겠다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D4ZWP/btrF00FAjeK/4RSCwt20k6J1EDJFTjMJk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D4ZWP/btrF00FAjeK/4RSCwt20k6J1EDJFTjMJk0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D4ZWP/btrF00FAjeK/4RSCwt20k6J1EDJFTjMJk0/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD4ZWP%2FbtrF00FAjeK%2F4RSCwt20k6J1EDJFTjMJk0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2YYSx/btrFY8rkd68/KgK0a1fbA29gUspTcU58j1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2YYSx/btrFY8rkd68/KgK0a1fbA29gUspTcU58j1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2YYSx/btrFY8rkd68/KgK0a1fbA29gUspTcU58j1/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2YYSx%2FbtrFY8rkd68%2FKgK0a1fbA29gUspTcU58j1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drO10S/btrFYxx5ZG1/cFvkHVV8qhhwMnyQCCUrW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drO10S/btrFYxx5ZG1/cFvkHVV8qhhwMnyQCCUrW0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drO10S/btrFYxx5ZG1/cFvkHVV8qhhwMnyQCCUrW0/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrO10S%2FbtrFYxx5ZG1%2FcFvkHVV8qhhwMnyQCCUrW0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;천장 조명 작업&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 각각의 LED 선들은 하나의 커넥터에 연결되는 구조이다. 층간 분리시 간섭이 발생할 수 있다. 선들의 작업이 깔끔하진 않다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/96Qva/btrF0tBgzSw/slvUKSk8bUuVebtlwTZEWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/96Qva/btrF0tBgzSw/slvUKSk8bUuVebtlwTZEWK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/96Qva/btrF0tBgzSw/slvUKSk8bUuVebtlwTZEWK/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F96Qva%2FbtrF0tBgzSw%2FslvUKSk8bUuVebtlwTZEWK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj7Rlx/btrFZKCVcyh/FkuNCelYzSRW1kmktQWuek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj7Rlx/btrFZKCVcyh/FkuNCelYzSRW1kmktQWuek/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj7Rlx/btrFZKCVcyh/FkuNCelYzSRW1kmktQWuek/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj7Rlx%2FbtrFZKCVcyh%2FFkuNCelYzSRW1kmktQWuek%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;천장 LED.1층과 2층 전선&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baEc0f/btrFZpZ7vjS/my3K3kgYr79DVtwtLGqGQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baEc0f/btrFZpZ7vjS/my3K3kgYr79DVtwtLGqGQk/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baEc0f/btrFZpZ7vjS/my3K3kgYr79DVtwtLGqGQk/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaEc0f%2FbtrFZpZ7vjS%2Fmy3K3kgYr79DVtwtLGqGQk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGlmme/btrF0kjGB4a/pl0r4XYZoECqvTBKBjkX0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGlmme/btrF0kjGB4a/pl0r4XYZoECqvTBKBjkX0k/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGlmme/btrF0kjGB4a/pl0r4XYZoECqvTBKBjkX0k/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGlmme%2FbtrF0kjGB4a%2Fpl0r4XYZoECqvTBKBjkX0k%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;가로등, 후면 커넥터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E6hEZ/btrF2M7WtAG/lJN3PA9TVkZBL2Tt157bJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E6hEZ/btrF2M7WtAG/lJN3PA9TVkZBL2Tt157bJK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E6hEZ/btrF2M7WtAG/lJN3PA9TVkZBL2Tt157bJK/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE6hEZ%2FbtrF2M7WtAG%2FlJN3PA9TVkZBL2Tt157bJK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0K68R/btrFZdTaZVX/4CG9TWFVNTQlciIBa1W3Wk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0K68R/btrFZdTaZVX/4CG9TWFVNTQlciIBa1W3Wk/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0K68R/btrFZdTaZVX/4CG9TWFVNTQlciIBa1W3Wk/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0K68R%2FbtrFZdTaZVX%2F4CG9TWFVNTQlciIBa1W3Wk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;테라스, 예술품점&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; 예술품점 간판은 알록달록 색이 변하는 LED 바를 설치했다. 다만 필자는 책상 옆에 전시해놓고 있어 LED 바가 너무 화려하여 전원을 꺼놓는다. &lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBfIe2/btrFYxSumzc/GeOonxRQCmySmhhqEBk8lK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBfIe2/btrFYxSumzc/GeOonxRQCmySmhhqEBk8lK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBfIe2/btrFYxSumzc/GeOonxRQCmySmhhqEBk8lK/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBfIe2%2FbtrFYxSumzc%2FGeOonxRQCmySmhhqEBk8lK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCHRZa/btrF0Z00R7a/cRyBk97vEmEixngdYZfrx0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCHRZa/btrF0Z00R7a/cRyBk97vEmEixngdYZfrx0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCHRZa/btrF0Z00R7a/cRyBk97vEmEixngdYZfrx0/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCHRZa%2FbtrF0Z00R7a%2FcRyBk97vEmEixngdYZfrx0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nc2DW/btrF2M7Xnkk/PxkIgVkHlmKBHjTtqv4iM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nc2DW/btrF2M7Xnkk/PxkIgVkHlmKBHjTtqv4iM1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nc2DW/btrF2M7Xnkk/PxkIgVkHlmKBHjTtqv4iM1/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNc2DW%2FbtrF2M7Xnkk%2FPxkIgVkHlmKBHjTtqv4iM1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;옥상 색이 변하는 LED&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 옥상에 설치된 LED이다. 느린 속도로 색이 변하는데 가장 마음에 드는 부분이다.&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/liiI9/btrF2NeJRuG/kWTHtYeCG5iqMpZD5MkVBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/liiI9/btrF2NeJRuG/kWTHtYeCG5iqMpZD5MkVBK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/liiI9/btrF2NeJRuG/kWTHtYeCG5iqMpZD5MkVBK/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FliiI9%2FbtrF2NeJRuG%2FkWTHtYeCG5iqMpZD5MkVBK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dma42R/btrFYxZiAB3/kiwfuCXCgtjeDxFltw5vB0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dma42R/btrFYxZiAB3/kiwfuCXCgtjeDxFltw5vB0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dma42R/btrFYxZiAB3/kiwfuCXCgtjeDxFltw5vB0/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdma42R%2FbtrFYxZiAB3%2FkiwfuCXCgtjeDxFltw5vB0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkY21B/btrF1DwEGBR/52ObpTzhxBO9t5h9vJhj60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkY21B/btrF1DwEGBR/52ObpTzhxBO9t5h9vJhj60/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkY21B/btrF1DwEGBR/52ObpTzhxBO9t5h9vJhj60/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkY21B%2FbtrF1DwEGBR%2F52ObpTzhxBO9t5h9vJhj60%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;LED 설치 완료&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;br&gt; 약 20분에 걸쳐 LED 설치 작업을 완료하였다. 설치 후 모습을 보니 매우 만족스러웠다. 하지만 층간 선들의 간섭이 심해 분리 시 매우 불편하였다. 반짝이는 LED 바와 옥상에 설치된 색이 변하는 LED는 만족스러웠다. &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tawZa/btrF1CEyPtH/tPtlbpJ8cLH9bmztYqcCA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tawZa/btrF1CEyPtH/tPtlbpJ8cLH9bmztYqcCA1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tawZa/btrF1CEyPtH/tPtlbpJ8cLH9bmztYqcCA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtawZa%2FbtrF1CEyPtH%2FtPtlbpJ8cLH9bmztYqcCA1%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;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[LEGO] 레고 ICONS 경찰서 10278 LED 작업 YEABRICKS&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;레고 ICONS 시리즈 중 모듈러인 경찰서에 LED 작업을 진행하였다. 알리익스프레스에서 'YEABRICKS' 판매자에게 LED 키트 제품을 &amp;nbsp;$23.65에 구입하였다. 지금은 구입 당시보다 저렴한 $20.53에 판매하고 있&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o3NFb/hyOUOXElFP/Ok4jfkUfdMiDLJN0KadBC0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/b0sR4v/hyOV4R5Bab/1K9eWkwBZ2wTUQ6eYCFC1K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/fgZPl/hyOV4dtjPX/ZrkJ2T2VVE7AuSRveiuOz0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot;&gt;
 &lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot; target=&quot;_blank&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o3NFb/hyOUOXElFP/Ok4jfkUfdMiDLJN0KadBC0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/b0sR4v/hyOV4R5Bab/1K9eWkwBZ2wTUQ6eYCFC1K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/fgZPl/hyOV4dtjPX/ZrkJ2T2VVE7AuSRveiuOz0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[LEGO] 레고 ICONS 경찰서 10278 LED 작업 YEABRICKS&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;레고 ICONS 시리즈 중 모듈러인 경찰서에 LED 작업을 진행하였다. 알리익스프레스에서 'YEABRICKS' 판매자에게 LED 키트 제품을 &amp;nbsp;$23.65에 구입하였다. 지금은 구입 당시보다 저렴한 $20.53에 판매하고 있&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUwUxZ/hyOVUhBS95/4OldKG9queMcyTzREDIJZ1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/cPvQr2/hyOV6CndVM/6Z5YKNGN2vXJRTXqQXKD3K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/cqM6je/hyOUZEPCd3/GUXlgtSukyL6AsUWWvg4X0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
 &lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUwUxZ/hyOVUhBS95/4OldKG9queMcyTzREDIJZ1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/cPvQr2/hyOV6CndVM/6Z5YKNGN2vXJRTXqQXKD3K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/cqM6je/hyOUZEPCd3/GUXlgtSukyL6AsUWWvg4X0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[LEGO] 레고 코닉세그 제스코 76900 LED 작업, EASYLITE&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;레고 코닉세그 제스코(76900)는 스피드 챔피언 시리즈이다. 코닉세그 제스코의 LED 작업은 두 번째이다. DIY로 LED 작업을 하였는데 선이 굵은 LED를 샀더니 마음에 들지 않아 재설치하기로 했다. 알&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSVmwk/hyOUSMuG8W/0ZKi91l51kKZVuDI38Sdfk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cZoeif/hyOV4LiSvz/KcEHj5nF1RM222XjYnd4L0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/J8sAG/hyOV7acxrG/AptEL3FYWel45wI4UHnJFk/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot;&gt;
 &lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot; target=&quot;_blank&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bSVmwk/hyOUSMuG8W/0ZKi91l51kKZVuDI38Sdfk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cZoeif/hyOV4LiSvz/KcEHj5nF1RM222XjYnd4L0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/J8sAG/hyOV7acxrG/AptEL3FYWel45wI4UHnJFk/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[LEGO] 레고 코닉세그 제스코 76900 LED 작업, EASYLITE&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;레고 코닉세그 제스코(76900)는 스피드 챔피언 시리즈이다. 코닉세그 제스코의 LED 작업은 두 번째이다. DIY로 LED 작업을 하였는데 선이 굵은 LED를 샀더니 마음에 들지 않아 재설치하기로 했다. 알&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cZT9lS/hyOVTXjxh2/kRGlwmIidA6WLZOOUpkRh1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/biVQeu/hyOUSsc30f/CwsWzaQYiFmD1wGZ93Gcak/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bexevd/hyOVZJ0mWH/XVscogB44zP6Gm95BwYs00/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
 &lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cZT9lS/hyOVTXjxh2/kRGlwmIidA6WLZOOUpkRh1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/biVQeu/hyOUSsc30f/CwsWzaQYiFmD1wGZ93Gcak/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bexevd/hyOVZJ0mWH/XVscogB44zP6Gm95BwYs00/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;</description>
      <category>LEGO</category>
      <category>10297</category>
      <category>Vonado</category>
      <category>레고</category>
      <category>부티크 호텔</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/45</guid>
      <comments>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado#entry45comment</comments>
      <pubDate>Wed, 29 Jun 2022 11:39:06 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 ICONS 경찰서 10278 LED 작업 YEABRICKS</title>
      <link>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 ICONS 시리즈 중 모듈러인 경찰서에 LED 작업을 진행하였다.&amp;nbsp; 알리익스프레스에서 'YEABRICKS' 판매자에게 LED 키트 제품을 &amp;nbsp;$23.65에 구입하였다.&amp;nbsp; 지금은 구입 당시보다 저렴한 $20.53에 판매하고 있다.&amp;nbsp; LED 키트 제품이어서 설치 설명서도 함께 제공하고 있다.&amp;nbsp; 이 판매자 제품의 특징은 층별, 구역별로 USB 전원 포트가 따로 나와있다.&amp;nbsp; 총 5개의 USB 전원 포트가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 선 작업은 아래 사진과 같이 비교적 깔끔하며 층간 간섭이 거의 없게 가이드되었다.&amp;nbsp; 그래서 LED 작업 후 층간 분리 시 큰 간섭이 없는 게 장점이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7XDpI/btrFXXXFoF2/yihHqU3wim81bXo5dRfJaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7XDpI/btrFXXXFoF2/yihHqU3wim81bXo5dRfJaK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_215430.jpg&quot; style=&quot;width: 25.855%; margin-right: 10px;&quot; data-widthpercent=&quot;26.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7XDpI/btrFXXXFoF2/yihHqU3wim81bXo5dRfJaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7XDpI%2FbtrFXXXFoF2%2FyihHqU3wim81bXo5dRfJaK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FkQxt/btrF1BZsQEp/NtXEKFqwLRkqakdMTAhNj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FkQxt/btrF1BZsQEp/NtXEKFqwLRkqakdMTAhNj1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220628_215508.jpg&quot; style=&quot;width: 45.9644%; margin-right: 10px;&quot; data-widthpercent=&quot;47.06&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FkQxt/btrF1BZsQEp/NtXEKFqwLRkqakdMTAhNj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFkQxt%2FbtrF1BZsQEp%2FNtXEKFqwLRkqakdMTAhNj1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/leDde/btrFZEiANqE/nM2pFI3KQRGp5uk49STiLK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/leDde/btrFZEiANqE/nM2pFI3KQRGp5uk49STiLK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_215547.jpg&quot; style=&quot;width: 25.855%;&quot; data-widthpercent=&quot;26.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/leDde/btrFZEiANqE/nM2pFI3KQRGp5uk49STiLK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleDde%2FbtrFZEiANqE%2FnM2pFI3KQRGp5uk49STiLK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;층별 선 작업&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 천장 조명도 다른 제품과 달리 브릭형이라 결합만 하면 되는 쉬운구조로 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oLKNf/btrFWycQxr9/ktLVLEKR9mfkDA5LpD6vl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oLKNf/btrFWycQxr9/ktLVLEKR9mfkDA5LpD6vl0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_215945.jpg&quot; style=&quot;width: 35.5814%; margin-right: 10px;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oLKNf/btrFWycQxr9/ktLVLEKR9mfkDA5LpD6vl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoLKNf%2FbtrFWycQxr9%2FktLVLEKR9mfkDA5LpD6vl0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FRFo0/btrFZEiAQWx/05lxfM5WlVxseSbEIHNF51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FRFo0/btrFZEiAQWx/05lxfM5WlVxseSbEIHNF51/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220628_215959.jpg&quot; style=&quot;width: 63.2558%;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FRFo0/btrFZEiAQWx/05lxfM5WlVxseSbEIHNF51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFRFo0%2FbtrFZEiAQWx%2F05lxfM5WlVxseSbEIHNF51%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;천장 조명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; LED 선의 길이도 매우 넉넉하여 층간 분리를 하여도 큰 어려움이 없다.&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-filename=&quot;20220628_220116.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k6WvS/btrFZFIvPVA/6jxYPjFtMUpwmcfMqnkbf1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k6WvS/btrFZFIvPVA/6jxYPjFtMUpwmcfMqnkbf1/img.jpg&quot; data-alt=&quot;층별 분리 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k6WvS/btrFZFIvPVA/6jxYPjFtMUpwmcfMqnkbf1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk6WvS%2FbtrFZFIvPVA%2F6jxYPjFtMUpwmcfMqnkbf1%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;20220628_220116.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;층별 분리 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다음은 LED 작업이 끝난 후 모습이다.&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-filename=&quot;20220628_214138.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8nVa/btrFZKCMGcl/KcpkUdD44wNI7ax0RVwq81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8nVa/btrFZKCMGcl/KcpkUdD44wNI7ax0RVwq81/img.jpg&quot; data-alt=&quot;전면 풀샷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8nVa/btrFZKCMGcl/KcpkUdD44wNI7ax0RVwq81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8nVa%2FbtrFZKCMGcl%2FKcpkUdD44wNI7ax0RVwq81%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;20220628_214138.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전면 풀샷&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buXrWm/btrFZo04Nvg/UGpQEKtBR0VAR5c04gMmrk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buXrWm/btrFZo04Nvg/UGpQEKtBR0VAR5c04gMmrk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_214231.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buXrWm/btrFZo04Nvg/UGpQEKtBR0VAR5c04gMmrk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuXrWm%2FbtrFZo04Nvg%2FUGpQEKtBR0VAR5c04gMmrk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sycAz/btrFZZGQOXQ/flKEwQBBCbCL8jfvk4AVUK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sycAz/btrFZZGQOXQ/flKEwQBBCbCL8jfvk4AVUK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_214308.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sycAz/btrFZZGQOXQ/flKEwQBBCbCL8jfvk4AVUK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsycAz%2FbtrFZZGQOXQ%2FflKEwQBBCbCL8jfvk4AVUK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lAdMs/btrFZl4Ed29/M23t3oxVpJWU2WPxnUaIV1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lAdMs/btrFZl4Ed29/M23t3oxVpJWU2WPxnUaIV1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_214402.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lAdMs/btrFZl4Ed29/M23t3oxVpJWU2WPxnUaIV1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlAdMs%2FbtrFZl4Ed29%2FM23t3oxVpJWU2WPxnUaIV1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;옥상, 도넛가게&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bInQ97/btrF1RVt2SL/bzFK6qwBUIqAlW1ZeGzizk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bInQ97/btrF1RVt2SL/bzFK6qwBUIqAlW1ZeGzizk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220628_214813.jpg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bInQ97/btrF1RVt2SL/bzFK6qwBUIqAlW1ZeGzizk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbInQ97%2FbtrF1RVt2SL%2FbzFK6qwBUIqAlW1ZeGzizk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOUgJ/btrFZKiuK10/Fe1KS0pj64a6up0tzJOj41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOUgJ/btrFZKiuK10/Fe1KS0pj64a6up0tzJOj41/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_214959.jpg&quot; style=&quot;width: 35.5814%;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOUgJ/btrFZKiuK10/Fe1KS0pj64a6up0tzJOj41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOUgJ%2FbtrFZKiuK10%2FFe1KS0pj64a6up0tzJOj41%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;전면, 색이 변하는 전광판 LED&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dw9pBd/btrFXYI5hfh/01o0cv4jikLbYafr9MEK00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dw9pBd/btrFXYI5hfh/01o0cv4jikLbYafr9MEK00/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_215108.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dw9pBd/btrFXYI5hfh/01o0cv4jikLbYafr9MEK00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdw9pBd%2FbtrFXYI5hfh%2F01o0cv4jikLbYafr9MEK00%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ETeDT/btrF0tnjxLh/vM5iYNLIELPJohkLfNosY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ETeDT/btrF0tnjxLh/vM5iYNLIELPJohkLfNosY0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220628_215046.jpg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ETeDT/btrF0tnjxLh/vM5iYNLIELPJohkLfNosY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FETeDT%2FbtrF0tnjxLh%2FvM5iYNLIELPJohkLfNosY0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;뒷면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220628_222308.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5ez5q/btrFXYvAVcx/1HxAjQVReYUL3e2Xk4vxa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5ez5q/btrFXYvAVcx/1HxAjQVReYUL3e2Xk4vxa1/img.jpg&quot; data-alt=&quot;경찰서, 부티크 호텔&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5ez5q/btrFXYvAVcx/1HxAjQVReYUL3e2Xk4vxa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5ez5q%2FbtrFXYvAVcx%2F1HxAjQVReYUL3e2Xk4vxa1%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;20220628_222308.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;경찰서, 부티크 호텔&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이번 구입한 LED 키트의 장점은 여유있는 길이의 선으로 인해 층별 분리 시 간섭이 적다는 것과 선정리 가이드가 비교적 잘 되어있다는 것이다.&amp;nbsp; 단점은 USB 포트가 5개라서 별도의 커넥터를 구입해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 조립시간은 8시간 걸린것에 비해 LED 설치는 20분 정도 걸렸다.&amp;nbsp; LED 작업 후 모습을 보니 매우 만족스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1656487611113&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 부티크 호텔 10297 LED 작업 Vonado&quot; data-og-description=&quot;레고 모듈러 시리즈인 부티크 호텔은 모듈러 15주년 기념 2022년 1월 1일에 출시한 최신 모듈러이다. 부티크 호텔의 브릭수는 3066개로 조립시간은 약 8시간이 소요되었다. LED 설치를 위해 알리익스&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eDsn3/hyOUW2rRIp/ikQrWAaikloCs9MckEtHU1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/lmD6O/hyOV45Df66/Ycwk2GAaEiz95oEqkdhSPK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DQJDM/hyOVRd9pva/b5xhaAAilc8U7bjDPddFR0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eDsn3/hyOUW2rRIp/ikQrWAaikloCs9MckEtHU1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/lmD6O/hyOV45Df66/Ycwk2GAaEiz95oEqkdhSPK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DQJDM/hyOVRd9pva/b5xhaAAilc8U7bjDPddFR0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 부티크 호텔 10297 LED 작업 Vonado&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 모듈러 시리즈인 부티크 호텔은 모듈러 15주년 기념 2022년 1월 1일에 출시한 최신 모듈러이다. 부티크 호텔의 브릭수는 3066개로 조립시간은 약 8시간이 소요되었다. LED 설치를 위해 알리익스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1656425289511&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 코닉세그 제스코 76900 LED 작업, EASYLITE&quot; data-og-description=&quot;레고 코닉세그 제스코(76900)는 스피드 챔피언 시리즈이다. 코닉세그 제스코의 LED 작업은 두 번째이다. DIY로 LED 작업을 하였는데 선이 굵은 LED를 샀더니 마음에 들지 않아 재설치하기로 했다. 알&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwhDFR/hyOUVhW3yh/wtYrE4ivuQ678nJkEPgdw0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/PEJoV/hyOVV1GIc7/Kkkkr6npki9h2gDkfVRDhK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cqFwlo/hyOVZiIK5T/ssDaVGHBGpmyiTnoXI0b50/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwhDFR/hyOUVhW3yh/wtYrE4ivuQ678nJkEPgdw0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/PEJoV/hyOVV1GIc7/Kkkkr6npki9h2gDkfVRDhK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/cqFwlo/hyOVZiIK5T/ssDaVGHBGpmyiTnoXI0b50/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 코닉세그 제스코 76900 LED 작업, EASYLITE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 코닉세그 제스코(76900)는 스피드 챔피언 시리즈이다. 코닉세그 제스코의 LED 작업은 두 번째이다. DIY로 LED 작업을 하였는데 선이 굵은 LED를 샀더니 마음에 들지 않아 재설치하기로 했다. 알&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1656425302640&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iO2Sp/hyOUXNx9kS/APrXKOo3lgDxyEOIZgqw20/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/jCKm4/hyOVSRqEam/1DfkdApFSkKf3GgQUIWch0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/djGTmF/hyOU2g3XOt/GwktRZxFa0VJhnJVedq5uk/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iO2Sp/hyOUXNx9kS/APrXKOo3lgDxyEOIZgqw20/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/jCKm4/hyOVSRqEam/1DfkdApFSkKf3GgQUIWch0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/djGTmF/hyOU2g3XOt/GwktRZxFa0VJhnJVedq5uk/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1656425315857&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-og-description=&quot;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dJLjr6/hyOUTj60N0/zglgrduNFdyUGZvINFA820/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/Qlv98/hyOU1WKs4u/sDaDo3oG6BKiWKQLlb3bg0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bkj8SE/hyOUQt90AW/NcbdUQWWGaxYlMViR78pK1/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dJLjr6/hyOUTj60N0/zglgrduNFdyUGZvINFA820/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/Qlv98/hyOU1WKs4u/sDaDo3oG6BKiWKQLlb3bg0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bkj8SE/hyOUQt90AW/NcbdUQWWGaxYlMViR78pK1/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>LEGO</category>
      <category>10278</category>
      <category>icons</category>
      <category>Led</category>
      <category>Police Station</category>
      <category>YEABRICKS</category>
      <category>경찰서</category>
      <category>레고</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/44</guid>
      <comments>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS#entry44comment</comments>
      <pubDate>Tue, 28 Jun 2022 23:10:27 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 코닉세그 제스코 76900 LED 작업, EASYLITE</title>
      <link>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 코닉세그 제스코(76900)는 스피드 챔피언 시리즈이다.&amp;nbsp; 코닉세그 제스코의 LED 작업은 두 번째이다.&amp;nbsp; DIY로 LED 작업을 하였는데 선이 굵은 LED를 샀더니 마음에 들지 않아 재설치하기로 했다.&amp;nbsp; 알리에서 'EASYLITE'라는 판매자에게 LED 키트 제품을 구매하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 아래 링크는 직전에 DIY로 LED 작업한 글이다.&lt;/p&gt;
&lt;figure id=&quot;og_1655871309075&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&quot; data-og-description=&quot;레고 구입 후 처음으로 LED 작업을 하였다. 해당 품번에 맞는 LED 키트 제품이 존재하였지만 이를 모르고 DIY로 진행하였다. 알리익스프레스에서 'DayDay Up Store' 구매자를 통해 구매하였다. 나중에 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRRsk6/hyOQv4mO0m/bClJr00DOVS3vSam7o135K/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/eQfh5/hyOQsNlQL6/TV39tkQ6bgbV1JyT4BDazK/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/civpBi/hyOQjv40oC/Heh8jLBLAP4oLtM1K2Kpw1/img.jpg?width=3024&amp;amp;height=3394&amp;amp;face=0_0_3024_3394&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRRsk6/hyOQv4mO0m/bClJr00DOVS3vSam7o135K/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/eQfh5/hyOQsNlQL6/TV39tkQ6bgbV1JyT4BDazK/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/civpBi/hyOQjv40oC/Heh8jLBLAP4oLtM1K2Kpw1/img.jpg?width=3024&amp;amp;height=3394&amp;amp;face=0_0_3024_3394');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 구입 후 처음으로 LED 작업을 하였다. 해당 품번에 맞는 LED 키트 제품이 존재하였지만 이를 모르고 DIY로 진행하였다. 알리익스프레스에서 'DayDay Up Store' 구매자를 통해 구매하였다. 나중에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 알리에서 'EASYLITE'라는 판매자를 통해 LED 키트 제품을 구매하였다.&amp;nbsp; 구매 가격은 $13.06이다.&amp;nbsp; 현재는 가격을 조금 더 내려 판매 중이다.&amp;nbsp; 키트 제품이라 설치 설명서도 함께 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; LED는 총 7개로 구성되어있다.&amp;nbsp; 전면 헤드라이트 2개, 후미등 2개, 운전석 1개, 배기구 1개, 날개 밑 부분 1개로 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEGhCY/btrFq8qyAt6/vCtNk9G2F7UTDz1cbbKLIk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEGhCY/btrFq8qyAt6/vCtNk9G2F7UTDz1cbbKLIk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_115945.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEGhCY/btrFq8qyAt6/vCtNk9G2F7UTDz1cbbKLIk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEGhCY%2FbtrFq8qyAt6%2FvCtNk9G2F7UTDz1cbbKLIk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3nIPx/btrFoon4UY9/9Yid4GlEc6LTB6ruVjvr1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3nIPx/btrFoon4UY9/9Yid4GlEc6LTB6ruVjvr1k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_123522.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3nIPx/btrFoon4UY9/9Yid4GlEc6LTB6ruVjvr1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3nIPx%2FbtrFoon4UY9%2F9Yid4GlEc6LTB6ruVjvr1k%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/llzv9/btrFrcUnvsd/zEKbqdOcZuDn4m7sfVH2G1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/llzv9/btrFrcUnvsd/zEKbqdOcZuDn4m7sfVH2G1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120002.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/llzv9/btrFrcUnvsd/zEKbqdOcZuDn4m7sfVH2G1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fllzv9%2FbtrFrcUnvsd%2FzEKbqdOcZuDn4m7sfVH2G1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt; 날개 밑부분, 배기구, 후미등 LED&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 작업의 난이도는 어렵지 않으며, 선이 얇아 브릭 결합에도 크게 어려운 점이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVhosX/btrFq9wekL3/2rR3mHWWhgssiHj2ezFBW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVhosX/btrFq9wekL3/2rR3mHWWhgssiHj2ezFBW0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120603.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVhosX/btrFq9wekL3/2rR3mHWWhgssiHj2ezFBW0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVhosX%2FbtrFq9wekL3%2F2rR3mHWWhgssiHj2ezFBW0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mPQwR/btrFo0HruC7/I4K8qUTWxc4KcEyDdwuYA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mPQwR/btrFo0HruC7/I4K8qUTWxc4KcEyDdwuYA1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120528.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mPQwR/btrFo0HruC7/I4K8qUTWxc4KcEyDdwuYA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmPQwR%2FbtrFo0HruC7%2FI4K8qUTWxc4KcEyDdwuYA1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;운전석 LED&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 운전석 실내에는 하나의 LED가 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsktrm/btrFrcUoZG6/JTnGAeUKVCPEfjn3MLYSc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsktrm/btrFrcUoZG6/JTnGAeUKVCPEfjn3MLYSc0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120514.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsktrm/btrFrcUoZG6/JTnGAeUKVCPEfjn3MLYSc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsktrm%2FbtrFrcUoZG6%2FJTnGAeUKVCPEfjn3MLYSc0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/njd8G/btrFtOL1f9A/YjLJi9VcSbBmewb2J94K8k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/njd8G/btrFtOL1f9A/YjLJi9VcSbBmewb2J94K8k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120509.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/njd8G/btrFtOL1f9A/YjLJi9VcSbBmewb2J94K8k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnjd8G%2FbtrFtOL1f9A%2FYjLJi9VcSbBmewb2J94K8k%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;전면 헤드라이트 LED&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 전면 헤드라이트는 투명색 브릭으로 가이드 하였으나 필자는 위치를 좀 바꾸어 브릭 교체 없이 진행하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC4hQ6/btrFsXXC8D0/NACbBRryzxNd9RlOxYg1mk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC4hQ6/btrFsXXC8D0/NACbBRryzxNd9RlOxYg1mk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_123612.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC4hQ6/btrFsXXC8D0/NACbBRryzxNd9RlOxYg1mk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC4hQ6%2FbtrFsXXC8D0%2FNACbBRryzxNd9RlOxYg1mk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdOwE/btrFtPZmoKQ/MEpbP5EKoMRzEU4T9S5s30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdOwE/btrFtPZmoKQ/MEpbP5EKoMRzEU4T9S5s30/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_123646.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdOwE/btrFtPZmoKQ/MEpbP5EKoMRzEU4T9S5s30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdOwE%2FbtrFtPZmoKQ%2FMEpbP5EKoMRzEU4T9S5s30%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;하단부 커넥트허브&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 'EASYLITE' 판매자의 LED 키트는 하단부에 LED선을 결합하는 구조이다.&amp;nbsp; 다행히 바퀴는 굴러가지만 높이가 거의 같아 커넥트허브가  바닥에 쓸린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QvNob/btrFt1yvXuA/BmPBrcYgUDc8O7npjmxlLK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QvNob/btrFt1yvXuA/BmPBrcYgUDc8O7npjmxlLK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120428.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QvNob/btrFt1yvXuA/BmPBrcYgUDc8O7npjmxlLK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQvNob%2FbtrFt1yvXuA%2FBmPBrcYgUDc8O7npjmxlLK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MSDDT/btrFufcaapT/DbEdmTsAcaIs8tpwUDe6aK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MSDDT/btrFufcaapT/DbEdmTsAcaIs8tpwUDe6aK/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;20220622_120441.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MSDDT/btrFufcaapT/DbEdmTsAcaIs8tpwUDe6aK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMSDDT%2FbtrFufcaapT%2FDbEdmTsAcaIs8tpwUDe6aK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;날개 결합 전, 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXCdfp/btrFuf4kfll/PE9wA9nWnJsZvQ36nXxn7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXCdfp/btrFuf4kfll/PE9wA9nWnJsZvQ36nXxn7k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120456.jpg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXCdfp/btrFuf4kfll/PE9wA9nWnJsZvQ36nXxn7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXCdfp%2FbtrFuf4kfll%2FPE9wA9nWnJsZvQ36nXxn7k%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CU1Bm/btrFueYEVPy/wj6GQsfsX7rYkSTUl77ThK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CU1Bm/btrFueYEVPy/wj6GQsfsX7rYkSTUl77ThK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220622_120503.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CU1Bm/btrFueYEVPy/wj6GQsfsX7rYkSTUl77ThK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCU1Bm%2FbtrFueYEVPy%2Fwj6GQsfsX7rYkSTUl77ThK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;전면 헤드라이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이렇게 LED 설치를 완료 하였다.&amp;nbsp; 단점은 하단부의 선정리가 깔끔하지 못했다.&amp;nbsp; 하지만 LED가 켜진 모습을 보니 만족스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655884271410&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&quot; data-og-description=&quot;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jVWT1/hyORRdQSS1/4ran0wLm7MRavZWYU71cVK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/imcAW/hyOQlt6HAx/AZCOAWApa0XdvXL0gE4Bmk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/C4NJR/hyORFLfZql/oHDKjWku8shaL2YLVlvR6k/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jVWT1/hyORRdQSS1/4ran0wLm7MRavZWYU71cVK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/imcAW/hyOQlt6HAx/AZCOAWApa0XdvXL0gE4Bmk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/C4NJR/hyORFLfZql/oHDKjWku8shaL2YLVlvR6k/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655884282504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ba051q/hyOQyNISg3/kqEXjDXzofkxOSJwJATL00/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/vvCrl/hyOQw3tHLr/kWhmJWDKFKWIleboyKV5bK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DWRE7/hyOQs03WsL/SiU2AwVKqpA4awzp7G82Jk/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ba051q/hyOQyNISg3/kqEXjDXzofkxOSJwJATL00/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/vvCrl/hyOQw3tHLr/kWhmJWDKFKWIleboyKV5bK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DWRE7/hyOQs03WsL/SiU2AwVKqpA4awzp7G82Jk/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655884294330&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-og-description=&quot;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/r1wRb/hyOQm7DEtN/P7y8CQOvcosub4tePAuRVk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/bwiP9a/hyOQqoFdFA/yHi6Z7qFwS8is64KPNPke0/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/3YxdG/hyORIurG6i/BTt3uysGWaB7B0CQXvZ6Tk/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/r1wRb/hyOQm7DEtN/P7y8CQOvcosub4tePAuRVk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/bwiP9a/hyOQqoFdFA/yHi6Z7qFwS8is64KPNPke0/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/3YxdG/hyORIurG6i/BTt3uysGWaB7B0CQXvZ6Tk/img.jpg?width=4032&amp;amp;height=3024&amp;amp;face=0_0_4032_3024');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 스피드 챔피언 시리즈 제품이다. LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다. 구입 가격은 $13.29 달러이다. 전원은 USB 포트를 사용한다. LED 선들이 하나의 US&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LEGO</category>
      <category>76900</category>
      <category>EASYLITE</category>
      <category>Koenigsegg Jesko</category>
      <category>Led</category>
      <category>Lego</category>
      <category>레고</category>
      <category>알리</category>
      <category>코닉세그 제스코</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/43</guid>
      <comments>https://malchooni.tistory.com/entry/LEGO-%EB%A0%88%EA%B3%A0-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-76900-LED-%EC%9E%91%EC%97%85-EASYLITE#entry43comment</comments>
      <pubDate>Wed, 22 Jun 2022 16:52:02 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업</title>
      <link>https://malchooni.tistory.com/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 알리에서 LED 키트를 구매하여 LED 작업을 완료하였다.&amp;nbsp; [10297]부티크 호텔은&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;$35.40 구매하였고, [&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;10278]&lt;/span&gt;경찰서는&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt; $23.65에 구입하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분 이내로 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 각 모듈러의 LED 작업은 아래의 글을 참고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1656472144026&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 부티크 호텔 10297 LED 작업 Vonado&quot; data-og-description=&quot;레고 모듈러 시리즈인 부티크 호텔은 모듈러 15주년 기념 2022년 1월 1일에 출시한 최신 모듈러이다. 부티크 호텔의 브릭수는 3066개로 조립시간은 약 8시간이 소요되었다. LED 설치를 위해 알리익스&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eDsn3/hyOUW2rRIp/ikQrWAaikloCs9MckEtHU1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/lmD6O/hyOV45Df66/Ycwk2GAaEiz95oEqkdhSPK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DQJDM/hyOVRd9pva/b5xhaAAilc8U7bjDPddFR0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-%EB%B6%80%ED%8B%B0%ED%81%AC-%ED%98%B8%ED%85%94-10297-LED-%EC%9E%91%EC%97%85-Vonado&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eDsn3/hyOUW2rRIp/ikQrWAaikloCs9MckEtHU1/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/lmD6O/hyOV45Df66/Ycwk2GAaEiz95oEqkdhSPK/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/DQJDM/hyOVRd9pva/b5xhaAAilc8U7bjDPddFR0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 부티크 호텔 10297 LED 작업 Vonado&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 모듈러 시리즈인 부티크 호텔은 모듈러 15주년 기념 2022년 1월 1일에 출시한 최신 모듈러이다. 부티크 호텔의 브릭수는 3066개로 조립시간은 약 8시간이 소요되었다. LED 설치를 위해 알리익스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1656472162658&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 ICONS 경찰서 10278 LED 작업 YEABRICKS&quot; data-og-description=&quot;레고 ICONS 시리즈 중 모듈러인 경찰서에 LED 작업을 진행하였다. 알리익스프레스에서 'YEABRICKS' 판매자에게 LED 키트 제품을 &amp;nbsp;$23.65에 구입하였다. 지금은 구입 당시보다 저렴한 $20.53에 판매하고 있&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o3NFb/hyOUOXElFP/Ok4jfkUfdMiDLJN0KadBC0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/b0sR4v/hyOV4R5Bab/1K9eWkwBZ2wTUQ6eYCFC1K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/fgZPl/hyOV4dtjPX/ZrkJ2T2VVE7AuSRveiuOz0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%A0%88%EA%B3%A0-ICONS-%EA%B2%BD%EC%B0%B0%EC%84%9C-10278-LED-%EC%9E%91%EC%97%85-YEABRICKS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o3NFb/hyOUOXElFP/Ok4jfkUfdMiDLJN0KadBC0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/b0sR4v/hyOV4R5Bab/1K9eWkwBZ2wTUQ6eYCFC1K/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/fgZPl/hyOV4dtjPX/ZrkJ2T2VVE7AuSRveiuOz0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 ICONS 경찰서 10278 LED 작업 YEABRICKS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 ICONS 시리즈 중 모듈러인 경찰서에 LED 작업을 진행하였다. 알리익스프레스에서 'YEABRICKS' 판매자에게 LED 키트 제품을 &amp;nbsp;$23.65에 구입하였다. 지금은 구입 당시보다 저렴한 $20.53에 판매하고 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRvO1y/btrxbOGTdws/WKCDHNpjpKBhNwRZtpkAQK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRvO1y/btrxbOGTdws/WKCDHNpjpKBhNwRZtpkAQK/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220213_142237.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRvO1y/btrxbOGTdws/WKCDHNpjpKBhNwRZtpkAQK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRvO1y%2FbtrxbOGTdws%2FWKCDHNpjpKBhNwRZtpkAQK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKyzmc/btrxbO7YwXW/iws5KDKlLLtb0OGuYNEVz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKyzmc/btrxbO7YwXW/iws5KDKlLLtb0OGuYNEVz1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220213_142248.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKyzmc/btrxbO7YwXW/iws5KDKlLLtb0OGuYNEVz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKyzmc%2FbtrxbO7YwXW%2Fiws5KDKlLLtb0OGuYNEVz1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;부티크호텔, 경찰서&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvvH0/btrxcx5JM2c/0UmkIHkBhVxV2Fp3l1ctV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvvH0/btrxcx5JM2c/0UmkIHkBhVxV2Fp3l1ctV0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220213_142256.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 21.4407%; margin-right: 10px;&quot; data-widthpercent=&quot;21.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvvH0/btrxcx5JM2c/0UmkIHkBhVxV2Fp3l1ctV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvvH0%2Fbtrxcx5JM2c%2F0UmkIHkBhVxV2Fp3l1ctV0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9NXV2/btrxcyKk5kQ/I44k9mEvxcgamR96a1eEkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9NXV2/btrxcyKk5kQ/I44k9mEvxcgamR96a1eEkK/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220213_142312.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.1168%; margin-right: 10px;&quot; data-widthpercent=&quot;39.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9NXV2/btrxcyKk5kQ/I44k9mEvxcgamR96a1eEkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9NXV2%2FbtrxcyKk5kQ%2FI44k9mEvxcgamR96a1eEkK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnXIQB/btrxaPMPrPF/K3AKUC0ugVeCoK9UCq4rf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnXIQB/btrxaPMPrPF/K3AKUC0ugVeCoK9UCq4rf0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220213_142335.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 38.1168%;&quot; data-widthpercent=&quot;39.03&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnXIQB/btrxaPMPrPF/K3AKUC0ugVeCoK9UCq4rf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnXIQB%2FbtrxaPMPrPF%2FK3AKUC0ugVeCoK9UCq4rf0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;경찰서&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220213_142320.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGZey/btrw7SXO2RS/IwtTmB0AKRjjysaKJUVfW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGZey/btrw7SXO2RS/IwtTmB0AKRjjysaKJUVfW0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGZey/btrw7SXO2RS/IwtTmB0AKRjjysaKJUVfW0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGZey%2Fbtrw7SXO2RS%2FIwtTmB0AKRjjysaKJUVfW0%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;20220213_142320.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220213_142346.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqwfQ/btrw5P1S4fW/XkQbnHTWCKABoTIyodeaC1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqwfQ/btrw5P1S4fW/XkQbnHTWCKABoTIyodeaC1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqwfQ/btrw5P1S4fW/XkQbnHTWCKABoTIyodeaC1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqqwfQ%2Fbtrw5P1S4fW%2FXkQbnHTWCKABoTIyodeaC1%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;20220213_142346.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b19H2O/btrw8Ot5xDx/lUBsgmcn2pg39kaNpbI8W0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b19H2O/btrw8Ot5xDx/lUBsgmcn2pg39kaNpbI8W0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220213_142448.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b19H2O/btrw8Ot5xDx/lUBsgmcn2pg39kaNpbI8W0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb19H2O%2Fbtrw8Ot5xDx%2FlUBsgmcn2pg39kaNpbI8W0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckzTKn/btrxaOf5Gjt/rwhRlmkNAu8v1GvwZGMTl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckzTKn/btrxaOf5Gjt/rwhRlmkNAu8v1GvwZGMTl0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220213_142502.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckzTKn/btrxaOf5Gjt/rwhRlmkNAu8v1GvwZGMTl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckzTKn%2FbtrxaOf5Gjt%2FrwhRlmkNAu8v1GvwZGMTl0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220213_142414.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buBHpz/btrxbN83wHN/CEmIsZuKJzlOr112Gx2faK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buBHpz/btrxbN83wHN/CEmIsZuKJzlOr112Gx2faK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buBHpz/btrxbN83wHN/CEmIsZuKJzlOr112Gx2faK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuBHpz%2FbtrxbN83wHN%2FCEmIsZuKJzlOr112Gx2faK%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;20220213_142414.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&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;figure id=&quot;og_1655561513018&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvA265/hyONUcl6rW/5QEwjqWiCrV0yzDKW24NT0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/bKMmEd/hyONLNeUap/kKb1H71OHuh9BMi5EbzJr0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/ioRhM/hyONUDrdGU/pzvE6nMX42wacevYhbkxB0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvA265/hyONUcl6rW/5QEwjqWiCrV0yzDKW24NT0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/bKMmEd/hyONLNeUap/kKb1H71OHuh9BMi5EbzJr0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/ioRhM/hyONUDrdGU/pzvE6nMX42wacevYhbkxB0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655561532955&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-og-description=&quot;레고 76895 LED 작업&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1648100030384&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[레고] 76900 코닉세그 제스코 LED 작업&quot; data-og-description=&quot;레고 76900 LED 조립을 하기 위해 알리에서 부품을 구매하였다. 선 구매 후 검색 결과, 해당 모델 + LED 를 검색하면 맞춤형 LED 키트를 판단는걸 뒤 늦게 알아버렸다. 'DayDay Up Store' 구매자에게 구매하&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1W9qO/hyNM743eze/DgHAPRl9KIQDgsUMQieQX1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/clywAz/hyNNqQ3JpH/kaKcPxkAQtLFBOPz7unHD1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/TH2LF/hyNOkhomQJ/MF8DVdWAsSC3kckOp2UQlK/img.jpg?width=3024&amp;amp;height=2709&amp;amp;face=0_0_3024_2709&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1W9qO/hyNM743eze/DgHAPRl9KIQDgsUMQieQX1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/clywAz/hyNNqQ3JpH/kaKcPxkAQtLFBOPz7unHD1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/TH2LF/hyNOkhomQJ/MF8DVdWAsSC3kckOp2UQlK/img.jpg?width=3024&amp;amp;height=2709&amp;amp;face=0_0_3024_2709');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[레고] 76900 코닉세그 제스코 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 76900 LED 조립을 하기 위해 알리에서 부품을 구매하였다. 선 구매 후 검색 결과, 해당 모델 + LED 를 검색하면 맞춤형 LED 키트를 판단는걸 뒤 늦게 알아버렸다. 'DayDay Up Store' 구매자에게 구매하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LEGO</category>
      <category>10278</category>
      <category>10279</category>
      <category>Led</category>
      <category>경찰서</category>
      <category>레고</category>
      <category>부티크 호텔</category>
      <category>알리</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/42</guid>
      <comments>https://malchooni.tistory.com/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297#entry42comment</comments>
      <pubDate>Thu, 24 Mar 2022 14:30:25 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax</title>
      <link>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다.&amp;nbsp; 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다.&amp;nbsp; 가격은 구입 당시 $18.74이며 무료 배송으로 2주 소요되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 해당 품번에 맞는 키트 제품이었기에 작업시간은 10분밖에 걸리지 않았다.&amp;nbsp; &amp;nbsp;물론 가이드 문서도 함께 동봉되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wkY0m/btrE5ihfxVo/rpafTfZ2PeLMH4KiReVg71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wkY0m/btrE5ihfxVo/rpafTfZ2PeLMH4KiReVg71/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220618_215043.jpg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wkY0m/btrE5ihfxVo/rpafTfZ2PeLMH4KiReVg71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwkY0m%2FbtrE5ihfxVo%2FrpafTfZ2PeLMH4KiReVg71%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6e2SC/btrE9Sur3Yw/bv4niDvhvRkooxWlQBdWWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6e2SC/btrE9Sur3Yw/bv4niDvhvRkooxWlQBdWWk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220618_214319.jpg&quot; data-widthpercent=&quot;36&quot; style=&quot;width: 35.5814%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6e2SC/btrE9Sur3Yw/bv4niDvhvRkooxWlQBdWWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6e2SC%2FbtrE9Sur3Yw%2Fbv4niDvhvRkooxWlQBdWWk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;열차 헤드라이트, 커넥트 허브&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 전면부 헤드라이트엔 백색 LED 2개가 설치되며 전선은 기관사 의자 양옆으로 뺀 후 브릭 밑판으로 이동했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d12hkK/btrE6xSk1PY/vSN6jYX3jxGwUCjCXePxv1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d12hkK/btrE6xSk1PY/vSN6jYX3jxGwUCjCXePxv1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220618_214422.jpg&quot; data-widthpercent=&quot;47.06&quot; style=&quot;width: 45.9644%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d12hkK/btrE6xSk1PY/vSN6jYX3jxGwUCjCXePxv1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd12hkK%2FbtrE6xSk1PY%2FvSN6jYX3jxGwUCjCXePxv1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0v5CC/btrE4VGE0vE/KKd6RNqv8vDVsk3bY4dLb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0v5CC/btrE4VGE0vE/KKd6RNqv8vDVsk3bY4dLb0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220618_214755.jpg&quot; style=&quot;width: 25.855%; margin-right: 10px;&quot; data-widthpercent=&quot;26.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0v5CC/btrE4VGE0vE/KKd6RNqv8vDVsk3bY4dLb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0v5CC%2FbtrE4VGE0vE%2FKKd6RNqv8vDVsk3bY4dLb0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FW2ab/btrE8OTl0f8/ZwE7z64D9V2AfL2JGLKkZk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FW2ab/btrE8OTl0f8/ZwE7z64D9V2AfL2JGLKkZk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220618_214910.jpg&quot; style=&quot;width: 25.855%;&quot; data-widthpercent=&quot;26.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FW2ab/btrE8OTl0f8/ZwE7z64D9V2AfL2JGLKkZk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFW2ab%2FbtrE8OTl0f8%2FZwE7z64D9V2AfL2JGLKkZk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;실내 LED, 배터리 케이스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; CR2032 규격의 건전지 두개 들어가는 케이스이다.&amp;nbsp; 기차 내부에 넣을 만큼 작다.&amp;nbsp; 사진으로 보다시피 여유공간도 많아 쉽게 넣을 수 있다.&amp;nbsp; 배터리 케이스가 기차 안에 있어 기차를 구동시켜도 라이트도 정상 동작한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VgnHU/btrE7EwXGzQ/rl10ZSxbn3inPNVeWMOkSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VgnHU/btrE7EwXGzQ/rl10ZSxbn3inPNVeWMOkSk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220618_215524.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VgnHU/btrE7EwXGzQ/rl10ZSxbn3inPNVeWMOkSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVgnHU%2FbtrE7EwXGzQ%2Frl10ZSxbn3inPNVeWMOkSk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rm3CN/btrE5giNN21/th5n5pCT5HLtBJ8bKR1Zf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rm3CN/btrE5giNN21/th5n5pCT5HLtBJ8bKR1Zf0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220618_215537.jpg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rm3CN/btrE5giNN21/th5n5pCT5HLtBJ8bKR1Zf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRm3CN%2FbtrE5giNN21%2Fth5n5pCT5HLtBJ8bKR1Zf0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CLShD/btrE6xx01XR/2xprCUK76lwi6I8doogMLK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CLShD/btrE6xx01XR/2xprCUK76lwi6I8doogMLK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220618_215349.jpg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CLShD/btrE6xx01XR/2xprCUK76lwi6I8doogMLK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCLShD%2FbtrE6xx01XR%2F2xprCUK76lwi6I8doogMLK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;LED 선 연결&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 승객칸의 LED 연결도 쉽다.&amp;nbsp; 선이 얇기 때문에 브릭을 체결해도 살짝만 뜬다.&amp;nbsp; 물론 선은 끊어지지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 작업을 완료하고 LED를 켠 채로 작동시켜 보았다.&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-filename=&quot;나의 동영상 (1).gif&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3VvUO/btrqUTtOhpm/Hnxknkjpof0v2NUzkhT820/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3VvUO/btrqUTtOhpm/Hnxknkjpof0v2NUzkhT820/img.gif&quot; data-alt=&quot;LED 설치 후 기차 구동 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3VvUO/btrqUTtOhpm/Hnxknkjpof0v2NUzkhT820/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/d3VvUO/btrqUTtOhpm/Hnxknkjpof0v2NUzkhT820/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;388&quot; data-filename=&quot;나의 동영상 (1).gif&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LED 설치 후 기차 구동 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; LED 작업을 완료 한 후 책장 선반에 진열해 놓았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diEpjF/btrqMktbfJh/mFBYOdaXg1aPy3JbXYiYzK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diEpjF/btrqMktbfJh/mFBYOdaXg1aPy3JbXYiYzK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220115_202705.jpg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diEpjF/btrqMktbfJh/mFBYOdaXg1aPy3JbXYiYzK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiEpjF%2FbtrqMktbfJh%2FmFBYOdaXg1aPy3JbXYiYzK%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WJDOz/btrqTZA7sA5/vlbYoTk7v9y3PIAsWVEg0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WJDOz/btrqTZA7sA5/vlbYoTk7v9y3PIAsWVEg0k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220112_003612.jpg&quot; style=&quot;width: 35.5814%;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WJDOz/btrqTZA7sA5/vlbYoTk7v9y3PIAsWVEg0k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWJDOz%2FbtrqTZA7sA5%2FvlbYoTk7v9y3PIAsWVEg0k%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFYmIa/btrqNfd5YR6/fBqw193GXyt5Fj7Y9X0gd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFYmIa/btrqNfd5YR6/fBqw193GXyt5Fj7Y9X0gd1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220112_003557.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFYmIa/btrqNfd5YR6/fBqw193GXyt5Fj7Y9X0gd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFYmIa%2FbtrqNfd5YR6%2FfBqw193GXyt5Fj7Y9X0gd1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FOvwQ/btrqOf5LanS/02uA8lABxKkMTxMUYJnKdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FOvwQ/btrqOf5LanS/02uA8lABxKkMTxMUYJnKdk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220115_202640.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOvwQ/btrqOf5LanS/02uA8lABxKkMTxMUYJnKdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFOvwQ%2FbtrqOf5LanS%2F02uA8lABxKkMTxMUYJnKdk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFUrJl/btrqNeGhZFf/ACGxTzwAGsMCklwXkJOz01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFUrJl/btrqNeGhZFf/ACGxTzwAGsMCklwXkJOz01/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220112_003601.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFUrJl/btrqNeGhZFf/ACGxTzwAGsMCklwXkJOz01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFUrJl%2FbtrqNeGhZFf%2FACGxTzwAGsMCklwXkJOz01%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Y0tL/btrqLZbJ9rk/rOoFZIYTLs718XgR12b4e0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Y0tL/btrqLZbJ9rk/rOoFZIYTLs718XgR12b4e0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220115_202609.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Y0tL/btrqLZbJ9rk/rOoFZIYTLs718XgR12b4e0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Y0tL%2FbtrqLZbJ9rk%2FrOoFZIYTLs718XgR12b4e0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pkc4N/btrqNfZtQxA/dxYfVanHyljtZ9yTybtQc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pkc4N/btrqNfZtQxA/dxYfVanHyljtZ9yTybtQc1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220115_202616.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pkc4N/btrqNfZtQxA/dxYfVanHyljtZ9yTybtQc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPkc4N%2FbtrqNfZtQxA%2FdxYfVanHyljtZ9yTybtQc1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 어두울때 켜놓은 조명은 확실히 예쁘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_20220112_003532.jpg&quot; data-origin-width=&quot;2994&quot; data-origin-height=&quot;1652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH8mfL/btrE5SWIJf8/njvZkoaCwvaZxjn6hiwmbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH8mfL/btrE5SWIJf8/njvZkoaCwvaZxjn6hiwmbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH8mfL/btrE5SWIJf8/njvZkoaCwvaZxjn6hiwmbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH8mfL%2FbtrE5SWIJf8%2FnjvZkoaCwvaZxjn6hiwmbk%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;2994&quot; height=&quot;1652&quot; data-filename=&quot;edited_20220112_003532.jpg&quot; data-origin-width=&quot;2994&quot; data-origin-height=&quot;1652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_20220112_003540.jpg&quot; data-origin-width=&quot;2188&quot; data-origin-height=&quot;1641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOzc1M/btrE8Oy35CY/7fQT95SVyzQylHMJmkUI40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOzc1M/btrE8Oy35CY/7fQT95SVyzQylHMJmkUI40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOzc1M/btrE8Oy35CY/7fQT95SVyzQylHMJmkUI40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOzc1M%2FbtrE8Oy35CY%2F7fQT95SVyzQylHMJmkUI40%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;2188&quot; height=&quot;1641&quot; data-filename=&quot;edited_20220112_003540.jpg&quot; data-origin-width=&quot;2188&quot; data-origin-height=&quot;1641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; BriksMax의 LED 키트는 대체로 만족했다.&amp;nbsp; 다만 승객열차에 LED를 설치하기 위해 1x4 브릭이 하나 추가 되는데 이 브릭으로 인해 미니피규어와의 간섭이 조금 아쉽게 느껴졌다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655559209822&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&quot; data-og-description=&quot;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TLNhQ/hyONR00LqT/jTXwvKaK5a9F6TkdJuZZnK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/YmhAk/hyONRtafjS/EiTGYDQEk1Oa3VN9WbbkK1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bYbHfY/hyOOyyK2KC/dZ6F2PZRH4KFdreaLOepJK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TLNhQ/hyONR00LqT/jTXwvKaK5a9F6TkdJuZZnK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/YmhAk/hyONRtafjS/EiTGYDQEk1Oa3VN9WbbkK1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bYbHfY/hyOOyyK2KC/dZ6F2PZRH4KFdreaLOepJK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655559264892&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&quot; data-og-description=&quot;레고 76900 LED 조립을 하기 위해 알리에서 부품을 구매하였다. 선 구매 후 검색 결과, 해당 모델 + LED 를 검색하면 맞춤형 LED 키트를 판단는걸 뒤 늦게 알아버렸다. 'DayDay Up Store' 구매자에게 구매하&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TXSA8/hyONVh2wUn/NK8kpgqhiVrQVcUfiBGfn0/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/cV6UiU/hyOOs6mVjp/p1xTYYkKH3RDmlfnmuOQD1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/bv8Wmt/hyONNRPVwx/t6tYWxc2pKp4B59WSsFdV0/img.jpg?width=3024&amp;amp;height=3394&amp;amp;face=0_0_3024_3394&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TXSA8/hyONVh2wUn/NK8kpgqhiVrQVcUfiBGfn0/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/cV6UiU/hyOOs6mVjp/p1xTYYkKH3RDmlfnmuOQD1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/bv8Wmt/hyONNRPVwx/t6tYWxc2pKp4B59WSsFdV0/img.jpg?width=3024&amp;amp;height=3394&amp;amp;face=0_0_3024_3394');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 76900 LED 조립을 하기 위해 알리에서 부품을 구매하였다. 선 구매 후 검색 결과, 해당 모델 + LED 를 검색하면 맞춤형 LED 키트를 판단는걸 뒤 늦게 알아버렸다. 'DayDay Up Store' 구매자에게 구매하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655561590964&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-og-description=&quot;레고 76895 LED 작업&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LEGO</category>
      <category>60197</category>
      <category>BriksMax</category>
      <category>Led</category>
      <category>Lego</category>
      <category>레고</category>
      <category>알리</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/41</guid>
      <comments>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax#entry41comment</comments>
      <pubDate>Sun, 16 Jan 2022 22:26:43 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업</title>
      <link>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 스피드 챔피언 시리즈 제품이다.&amp;nbsp; LED 제품은 알리익스프레스에서 'LIGHTALING Official Store' 판매자에게 구매하였다.&amp;nbsp; 구입 가격은 $13.29 달러이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 전원은 USB 포트를 사용한다.&amp;nbsp; LED 선들이 하나의 USB포트에 결합되어 있어 선정리도 깔끔하고 브릭 간섭, 바퀴 간섭도 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; LED 구성은 헤드라이트 2개, 후미등 2개, 운전석 1개로 총 5개의 LED로 구성되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wo0NU/btrE8OtngAc/dwb4d9dOdUaEW1JZHTN5b0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wo0NU/btrE8OtngAc/dwb4d9dOdUaEW1JZHTN5b0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220619_203906.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wo0NU/btrE8OtngAc/dwb4d9dOdUaEW1JZHTN5b0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwo0NU%2FbtrE8OtngAc%2Fdwb4d9dOdUaEW1JZHTN5b0%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWBCkI/btrE8OfOG7y/SycOIBYACEnXopoj0GV1g1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWBCkI/btrE8OfOG7y/SycOIBYACEnXopoj0GV1g1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;20220619_204018.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWBCkI/btrE8OfOG7y/SycOIBYACEnXopoj0GV1g1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWBCkI%2FbtrE8OfOG7y%2FSycOIBYACEnXopoj0GV1g1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;하단 선 정리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 헤드 라이트 및 운전석, 후미등 선 모드 하단으로 선이 정리된다.&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eqczRX/btrE9RwCKAc/jCOXa3NKcAnglkUx4e9hOk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eqczRX/btrE9RwCKAc/jCOXa3NKcAnglkUx4e9hOk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220619_204258.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eqczRX/btrE9RwCKAc/jCOXa3NKcAnglkUx4e9hOk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeqczRX%2FbtrE9RwCKAc%2FjCOXa3NKcAnglkUx4e9hOk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrT5m/btrFbOsEsPS/zPuDMupZlNOhgdfournHxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrT5m/btrFbOsEsPS/zPuDMupZlNOhgdfournHxk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220619_204122.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrT5m/btrFbOsEsPS/zPuDMupZlNOhgdfournHxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrT5m%2FbtrFbOsEsPS%2FzPuDMupZlNOhgdfournHxk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;운전석 , 후미등 선 작업&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdJyjb/btrFch2nsIH/DRuoP4vwDxeCvWyXJmaML1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdJyjb/btrFch2nsIH/DRuoP4vwDxeCvWyXJmaML1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220619_204420.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdJyjb/btrFch2nsIH/DRuoP4vwDxeCvWyXJmaML1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdJyjb%2FbtrFch2nsIH%2FDRuoP4vwDxeCvWyXJmaML1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDkC91/btrE8OfOGSV/411CPYgX4riKGCOHwzzM4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDkC91/btrE8OfOGSV/411CPYgX4riKGCOHwzzM4k/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;20220619_204431.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDkC91/btrE8OfOGSV/411CPYgX4riKGCOHwzzM4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDkC91%2FbtrE8OfOGSV%2F411CPYgX4riKGCOHwzzM4k%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;헤드라이트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220619_204515.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qb2rU/btrFe3CAkNA/3gWSEJb6wKKaOm7LKrf060/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qb2rU/btrFe3CAkNA/3gWSEJb6wKKaOm7LKrf060/img.jpg&quot; data-alt=&quot;후미등&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qb2rU/btrFe3CAkNA/3gWSEJb6wKKaOm7LKrf060/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqb2rU%2FbtrFe3CAkNA%2F3gWSEJb6wKKaOm7LKrf060%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;20220619_204515.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;후미등&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220107_213612.jpg&quot; data-origin-width=&quot;4031&quot; data-origin-height=&quot;2526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G8rxd/btrqTZnxquX/FXdUvRlBRKK4RjkYKolY1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G8rxd/btrqTZnxquX/FXdUvRlBRKK4RjkYKolY1k/img.jpg&quot; data-alt=&quot;코닉세그 제스코&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G8rxd/btrqTZnxquX/FXdUvRlBRKK4RjkYKolY1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG8rxd%2FbtrqTZnxquX%2FFXdUvRlBRKK4RjkYKolY1k%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;4031&quot; height=&quot;2526&quot; data-filename=&quot;20220107_213612.jpg&quot; data-origin-width=&quot;4031&quot; data-origin-height=&quot;2526&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코닉세그 제스코&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; USB 포트의 전원을 사용하여 컴퓨터에 연결하였다.&amp;nbsp; 컴퓨터 전원을 켜면 작업했던 LED도 같이 불이 켜진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이번에 구입한 LED 제품은 얇은 선과 하나의 USB 포트에 LED선이 모두 결합되어있어 깔끔하고 좋았다.&amp;nbsp; 불이 켜진 레고를 보니 매우 만족스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655646653110&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&quot; data-og-description=&quot;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oB1yq/hyOOIhAMY8/FiUKNTpxYY11kOfX5DVckK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/eEbEb/hyONURsi0p/n9ToYLmkBQPP3pK8MzKJq0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/VHqai/hyONVW9mjO/5ZWvUoOvzvuCRlsNSCSxDK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oB1yq/hyOOIhAMY8/FiUKNTpxYY11kOfX5DVckK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/eEbEb/hyONURsi0p/n9ToYLmkBQPP3pK8MzKJq0/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/VHqai/hyONVW9mjO/5ZWvUoOvzvuCRlsNSCSxDK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655646670032&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbNq9E/hyONJWHlMk/FQgh9A9iyXtnkCZeeUWXj0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/Pjp1e/hyOOI2W92w/7VYKWRzr4UssjxuZlE4mLk/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/edM7hB/hyONVpiF47/WpI9AiOFHPGg6sJKylksI0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbNq9E/hyONJWHlMk/FQgh9A9iyXtnkCZeeUWXj0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/Pjp1e/hyOOI2W92w/7VYKWRzr4UssjxuZlE4mLk/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/edM7hB/hyONVpiF47/WpI9AiOFHPGg6sJKylksI0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655646681239&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&quot; data-og-description=&quot;레고 구입 후 처음으로 LED 작업을 하였다. 해당 품번에 맞는 LED 키트 제품이 존재하였지만 이를 모르고 DIY로 진행하였다. 알리익스프레스에서 'DayDay Up Store' 구매자를 통해 구매하였다. 나중에 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bQofrR/hyONMy8i0b/P9R9Uw27GaWvY7mdPKHYx1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/bCxLt2/hyOOu4Hp7c/d6YPkLZC9bKcMALEJR2CdK/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/RarGf/hyOOElWI5B/l4JJ5kBjHMRkLoyEpTlKK0/img.jpg?width=3024&amp;amp;height=2709&amp;amp;face=0_0_3024_2709&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bQofrR/hyONMy8i0b/P9R9Uw27GaWvY7mdPKHYx1/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/bCxLt2/hyOOu4Hp7c/d6YPkLZC9bKcMALEJR2CdK/img.jpg?width=800&amp;amp;height=658&amp;amp;face=0_0_800_658,https://scrap.kakaocdn.net/dn/RarGf/hyOOElWI5B/l4JJ5kBjHMRkLoyEpTlKK0/img.jpg?width=3024&amp;amp;height=2709&amp;amp;face=0_0_3024_2709');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 76900 코닉세그 제스코 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 구입 후 처음으로 LED 작업을 하였다. 해당 품번에 맞는 LED 키트 제품이 존재하였지만 이를 모르고 DIY로 진행하였다. 알리익스프레스에서 'DayDay Up Store' 구매자를 통해 구매하였다. 나중에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LEGO</category>
      <category>76895</category>
      <category>Led</category>
      <category>Lego</category>
      <category>LIGHTALING</category>
      <category>Tributo</category>
      <category>페라리</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/40</guid>
      <comments>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85#entry40comment</comments>
      <pubDate>Sun, 16 Jan 2022 21:49:28 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 특정 파일 주기적 SCP 전송 (명령어 find, scp)</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%ED%8A%B9%EC%A0%95-%ED%8C%8C%EC%9D%BC-%EC%A3%BC%EA%B8%B0%EC%A0%81-SCP-%EC%A0%84%EC%86%A1-%EB%AA%85%EB%A0%B9%EC%96%B4-find-scp</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; gitlab-ce 운영 중 데이터를 주기적으로 백업하였다.&amp;nbsp; 이 백업파일을 물리적인 다른 서버에 전송하기 위해 scp 명령어를 사용하겠다.&amp;nbsp; 당일 생성된 파일만 보내기 위해 find 명령어를 함께 사용하여 crontab 에 등록하는 것이 목표다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 먼저 crontab에 등록할 명령어 부터 생성하겠다. &amp;nbsp;ssh 접근시 인증할 공개키를 대상서버에 미리 등록해 두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;find /var/opt/gitlab/backups -type f -name '*gitlab_backup.tar' -ctime 0 -exec scp {} xxxx@000.000.000.000:/var/opt/gitlab/backups/ \;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 76px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 34.8837%; height: 20px;&quot;&gt;find 옵션명&lt;/td&gt;
&lt;td style=&quot;width: 65.1163%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 34.8837%; height: 20px;&quot;&gt;-type f&lt;/td&gt;
&lt;td style=&quot;width: 65.1163%; height: 20px;&quot;&gt;파일만 검색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 34.8837%; height: 18px;&quot;&gt;-name '*gitlab_backup.tar'&lt;/td&gt;
&lt;td style=&quot;width: 65.1163%; height: 18px;&quot;&gt;gitlab_backup.tar 끝나는 &lt;span style=&quot;background-color: #f9f9f9;&quot;&gt;파일명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 34.8837%; height: 18px;&quot;&gt;-ctime 0&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 65.1163%; height: 18px;&quot;&gt;당일 생성된 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.8837%;&quot;&gt;-exec&lt;/td&gt;
&lt;td style=&quot;width: 65.1163%;&quot;&gt;수행 명령어&amp;nbsp;&lt;br /&gt;한칸 띄우고 \; 필수 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이제 해당 명령어를 크론탭에 등록한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;crontab -e&lt;/b&gt;&lt;br /&gt;0 0 * * * &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;find /var/opt/gitlab/backups -type f -name '*gitlab_backup.tar' -ctime 0 -exec scp {} xxxx@000.000.000.000:/var/opt/gitlab/backups/ \;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 등록 후 크론탭 서비스 재시작.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;$ &lt;b&gt;/etc/init.d/cron restart&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; find의 ctime 옵션으로 특정 날짜의 파일을 검색, 전송할 명령어를 생성하였다.&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>ctime</category>
      <category>FIND</category>
      <category>GitLab Backup</category>
      <category>scp</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/39</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%ED%8A%B9%EC%A0%95-%ED%8C%8C%EC%9D%BC-%EC%A3%BC%EA%B8%B0%EC%A0%81-SCP-%EC%A0%84%EC%86%A1-%EB%AA%85%EB%A0%B9%EC%96%B4-find-scp#entry39comment</comments>
      <pubDate>Fri, 7 Jan 2022 15:54:08 +0900</pubDate>
    </item>
    <item>
      <title>[LEGO] 레고 76900 코닉세그 제스코 LED 작업</title>
      <link>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 레고 구입 후 처음으로 LED 작업을 하였다.&amp;nbsp; 해당 품번에 맞는 LED 키트 제품이 존재하였지만 이를 모르고 DIY로 진행하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 알리익스프레스에서 &lt;span&gt;'DayDay Up Store'&lt;span&gt; 구매자를 통해 구매하였다.&amp;nbsp; 나중에 안 사실이지만 LED 키트 제품으로 나오는 선은 얇고 좋다.&amp;nbsp; 해당 제품은 선이 두꺼워 브릭 결합이 힘들어 내부에 브릭을 몇 개 뺏다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 구입 가격은 총 $16..47이었고 품목은 다음과 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 백색 LED : $1.29 x 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 적색 LED : $1.30 x 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 황색 LED : $1.30&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - power supply box : $ 9.99&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S90Y2/btrptzY1Ple/sfhJCuiGU4qUSAiRn2wN3K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S90Y2/btrptzY1Ple/sfhJCuiGU4qUSAiRn2wN3K/img.jpg&quot; data-origin-width=&quot;3023&quot; data-origin-height=&quot;2233&quot; data-filename=&quot;20211230_001443.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;35.32&quot; style=&quot;width: 34.4978%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S90Y2/btrptzY1Ple/sfhJCuiGU4qUSAiRn2wN3K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS90Y2%2FbtrptzY1Ple%2FsfhJCuiGU4qUSAiRn2wN3K%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;3023&quot; height=&quot;2233&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caIzw6/btrputrx7Ru/jk8knJKHknqOrkUg4cXZG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caIzw6/btrputrx7Ru/jk8knJKHknqOrkUg4cXZG0/img.jpg&quot; data-origin-width=&quot;3023&quot; data-origin-height=&quot;2218&quot; data-filename=&quot;20211230_001439.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;35.56&quot; style=&quot;width: 34.7311%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caIzw6/btrputrx7Ru/jk8knJKHknqOrkUg4cXZG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaIzw6%2Fbtrputrx7Ru%2Fjk8knJKHknqOrkUg4cXZG0%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;3023&quot; height=&quot;2218&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GtGj3/btrpD1mxSkl/T6D2XKpDEBkQYL6ZxqPKE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GtGj3/btrpD1mxSkl/T6D2XKpDEBkQYL6ZxqPKE1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2709&quot; data-filename=&quot;20211230_001344.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;29.12&quot; style=&quot;width: 28.4456%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GtGj3/btrpD1mxSkl/T6D2XKpDEBkQYL6ZxqPKE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGtGj3%2FbtrpD1mxSkl%2FT6D2XKpDEBkQYL6ZxqPKE1%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;3024&quot; height=&quot;2709&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;전면부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 전면부는 하늘빛 백색 LED를 사용하였다.&amp;nbsp; 선이 굵기에 내부 브릭을 몇 개 제거하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RIkY6/btrpu63X0VT/5LJv72v3fe6gs7kghUVLJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RIkY6/btrpu63X0VT/5LJv72v3fe6gs7kghUVLJ0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1612&quot; data-filename=&quot;20211230_001313.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.5398%; margin-right: 10px;&quot; data-widthpercent=&quot;58.22&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RIkY6/btrpu63X0VT/5LJv72v3fe6gs7kghUVLJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRIkY6%2Fbtrpu63X0VT%2F5LJv72v3fe6gs7kghUVLJ0%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;3024&quot; height=&quot;1612&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lqnYW/btrpz2MEzUi/WJZcZPciKkzU3gYpRkkMBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lqnYW/btrpz2MEzUi/WJZcZPciKkzU3gYpRkkMBK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2246&quot; data-filename=&quot;20211230_001522.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.2975%;&quot; data-widthpercent=&quot;41.78&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lqnYW/btrpz2MEzUi/WJZcZPciKkzU3gYpRkkMBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlqnYW%2Fbtrpz2MEzUi%2FWJZcZPciKkzU3gYpRkkMBK%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;3024&quot; height=&quot;2246&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tgWff/btrpz2slvGh/MxCX18yFnXl8EsJ1oFkm81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tgWff/btrpz2slvGh/MxCX18yFnXl8EsJ1oFkm81/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2490&quot; data-filename=&quot;20211230_001802.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.0111%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;57.68&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tgWff/btrpz2slvGh/MxCX18yFnXl8EsJ1oFkm81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtgWff%2Fbtrpz2slvGh%2FMxCX18yFnXl8EsJ1oFkm81%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;3024&quot; height=&quot;2490&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bndsGj/btrpuujJaWL/VdtKZZkHwY2WnLVkbjpnU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bndsGj/btrpuujJaWL/VdtKZZkHwY2WnLVkbjpnU0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;3394&quot; data-filename=&quot;20211230_001811.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.8261%; margin-top: 10px;&quot; data-widthpercent=&quot;42.32&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bndsGj/btrpuujJaWL/VdtKZZkHwY2WnLVkbjpnU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbndsGj%2FbtrpuujJaWL%2FVdtKZZkHwY2WnLVkbjpnU0%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;3024&quot; height=&quot;3394&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;후면부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 후면부는 날개 부분의 빈 공간을 이용해 선을 이동시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqcbmj/btrpD1UmqMb/8zDlnF9BfHRLqWTVb9sN1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqcbmj/btrpD1UmqMb/8zDlnF9BfHRLqWTVb9sN1k/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2487&quot; data-filename=&quot;20211230_002013.jpg&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4583%; margin-right: 10px;&quot; data-widthpercent=&quot;50.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqcbmj/btrpD1UmqMb/8zDlnF9BfHRLqWTVb9sN1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqcbmj%2FbtrpD1UmqMb%2F8zDlnF9BfHRLqWTVb9sN1k%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;3024&quot; height=&quot;2487&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuz8KG/btrpyjVMJbp/nT9pqOK4CiuwrrVCx7sOt0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuz8KG/btrpyjVMJbp/nT9pqOK4CiuwrrVCx7sOt0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2491&quot; data-filename=&quot;20211230_001234.jpg&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;49.96&quot; style=&quot;width: 49.3789%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuz8KG/btrpyjVMJbp/nT9pqOK4CiuwrrVCx7sOt0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcuz8KG%2FbtrpyjVMJbp%2FnT9pqOK4CiuwrrVCx7sOt0%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;3024&quot; height=&quot;2491&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20211230_002854.jpg&quot; data-origin-width=&quot;2956&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8p73/btrpvRyHl8b/4dWq9W8Rd5lvkRjcp38H6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8p73/btrpvRyHl8b/4dWq9W8Rd5lvkRjcp38H6k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8p73/btrpvRyHl8b/4dWq9W8Rd5lvkRjcp38H6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8p73%2FbtrpvRyHl8b%2F4dWq9W8Rd5lvkRjcp38H6k%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;2956&quot; height=&quot;2000&quot; data-filename=&quot;20211230_002854.jpg&quot; data-origin-width=&quot;2956&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 작은 레고일수록 LED 키트 제품을 구입하여 작업하는 걸 추천한다.&amp;nbsp; 검색을 많이 하고 구입했어야 하는데 선도 굵고 개수도 많아 선 정리가 힘들었다.&amp;nbsp; 그래도 완료하고 불이 들어온 모습을 보니 만족한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1655560893289&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&quot; data-og-description=&quot;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TLNhQ/hyONR00LqT/jTXwvKaK5a9F6TkdJuZZnK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/YmhAk/hyONRtafjS/EiTGYDQEk1Oa3VN9WbbkK1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bYbHfY/hyOOyyK2KC/dZ6F2PZRH4KFdreaLOepJK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/LEGO-%EB%AA%A8%EB%93%88%EB%9F%AC-%ED%98%B8%ED%85%94-%EA%B2%BD%EC%B0%B0%EC%84%9C-LED-%EA%BE%B8%EB%AF%B8%EA%B8%B0-10278-10297&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TLNhQ/hyONR00LqT/jTXwvKaK5a9F6TkdJuZZnK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/YmhAk/hyONRtafjS/EiTGYDQEk1Oa3VN9WbbkK1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bYbHfY/hyOOyyK2KC/dZ6F2PZRH4KFdreaLOepJK/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 모듈러 호텔 10297 + 경찰서 10278 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;알리에서 LED 키트를 구매하여 LED 작업을 완료하였다. [10297]부티크 호텔은&amp;nbsp;$35.40 구매하였고, [10278]경찰서는 $23.65에 구입하였다. 모듈러들의 조립시간은 8~9시간 걸려 완성하였고 LED 설치는 30분&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655561410639&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&quot; data-og-description=&quot;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvA265/hyONUcl6rW/5QEwjqWiCrV0yzDKW24NT0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/bKMmEd/hyONLNeUap/kKb1H71OHuh9BMi5EbzJr0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/ioRhM/hyONUDrdGU/pzvE6nMX42wacevYhbkxB0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%EC%8B%9C%ED%8B%B0-%EC%97%AC%EA%B0%9D%EC%97%B4%EC%B0%A8-60197-LED-%EC%9E%91%EC%97%85-BriksMax&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvA265/hyONUcl6rW/5QEwjqWiCrV0yzDKW24NT0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/bKMmEd/hyONLNeUap/kKb1H71OHuh9BMi5EbzJr0/img.jpg?width=800&amp;amp;height=1066&amp;amp;face=0_0_800_1066,https://scrap.kakaocdn.net/dn/ioRhM/hyONUDrdGU/pzvE6nMX42wacevYhbkxB0/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO] 레고 시티 여객열차 60197 LED 작업, BriksMax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 시티 여객열차 LED 작업을 위해 알리익스프레스 LED 키트를 주문하였다. 레고 품번으로 조회하면 몇 가지 키트가 뜨는데 그중 BriksMax라는 제품을 구입하였다. 가격은 구입 당시 $18.74이며 무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1655561380922&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&quot; data-og-description=&quot;레고 76895 LED 작업&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EB%A0%88%EA%B3%A0-%ED%8E%98%EB%9D%BC%EB%A6%AC-F8-Tributo-76895-LED-%EC%9E%91%EC%97%85&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNsl8g/hyONOpHgry/M7VKnR6oqE3aJ35XKfKMKk/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/dY7d85/hyONGFcGkw/BwpKYYe57u42RwaBGmn321/img.jpg?width=800&amp;amp;height=783&amp;amp;face=0_0_800_783,https://scrap.kakaocdn.net/dn/JPKtM/hyONOwqVvI/txyLg5k6tw1TpKqmoYGnfK/img.jpg?width=4031&amp;amp;height=2526&amp;amp;face=0_0_4031_2526');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[LEGO]  레고 페라리 F8 Tributo 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;레고 76895 LED 작업&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LEGO</category>
      <category>76900</category>
      <category>Led</category>
      <category>레고 LED</category>
      <category>제스코</category>
      <category>코닉세그</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/37</guid>
      <comments>https://malchooni.tistory.com/entry/%EB%A0%88%EA%B3%A0-76900-%EC%BD%94%EB%8B%89%EC%84%B8%EA%B7%B8-%EC%A0%9C%EC%8A%A4%EC%BD%94-LED-%EC%9E%91%EC%97%85#entry37comment</comments>
      <pubDate>Mon, 3 Jan 2022 01:08:26 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 우분투에서 CIFS(SMB) 마운트</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-CIFSSMB-%EB%A7%88%EC%9A%B4%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1640768811764&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버구축] 홈네트워크 구성하기 (1)&quot; data-og-description=&quot;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105 [홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnrTCc/hyMSX9Y3v8/OPzA3lwTIOxzwdHz1arKN1/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/IUrr4/hyMTIJ89vS/BVccyE8gqVkA804UkYZc3k/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/X0w7N/hyMSZ03XoX/KzikUeUqGcHnRECOiMRTwK/img.png?width=768&amp;amp;height=576&amp;amp;face=0_0_768_576&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnrTCc/hyMSX9Y3v8/OPzA3lwTIOxzwdHz1arKN1/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/IUrr4/hyMTIJ89vS/BVccyE8gqVkA804UkYZc3k/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286,https://scrap.kakaocdn.net/dn/X0w7N/hyMSZ03XoX/KzikUeUqGcHnRECOiMRTwK/img.png?width=768&amp;amp;height=576&amp;amp;face=0_0_768_576');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버구축] 홈네트워크 구성하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105 [홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 홈서버 및 사설망 네트워크를 구성하고 디바이스들 간에 공유디스크 필요성이 느껴졌다.&amp;nbsp; 그래서 SMB로 공유디스크를 구성하였고 이를&amp;nbsp; 우분투서버에 마운트 하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 첫 단계로 cifs-utils을 설치한다.&amp;nbsp; 필자는 작업 편의를 위해 root 계정으로 진행하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;apt-get&amp;nbsp;install&amp;nbsp;cifs-utils&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 만약 apt를 통해 인스톨 시 404 not found 에러가 났다면 'apt-get update'를 실행해보는 것도 하나의 해결 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 설치 이후 마운트 할 경로에 디렉터리를 생성한다.&amp;nbsp; /mnt/ghostdisk에 SMB 공유디스크를 마운트 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;mkdir&amp;nbsp;/mnt/ghostdisk&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 디렉터리 생성 후 CIFS로 SMB 공유디스크 마운트를 위해&amp;nbsp;다음 명령어를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;mount -t cifs -o user=xxxx,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mount error(2): No such file or directory&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Refer&amp;nbsp;to&amp;nbsp;the&amp;nbsp;mount.cifs(8)&amp;nbsp;manual&amp;nbsp;page&amp;nbsp;(e.g.&amp;nbsp;man&amp;nbsp;mount.cifs)&amp;nbsp;and&amp;nbsp;kernel&amp;nbsp;log&amp;nbsp;messages&amp;nbsp;(dmesg)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 마운트 명령어를 입력하였으나 &lt;span style=&quot;color: #ee2323;&quot;&gt;No such file or directory라는&lt;span style=&quot;color: #000000;&quot;&gt; 오류가 발생하여 검색을 시작하였다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1640764743113&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;우분투 SMB mount error(2): No such file or directory 오류&quot; data-og-description=&quot;우분투에서 cifs 마운트 중 다음과 같은 오류가 발생하였다. $ mount -t cifs -o user=xxxx,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/ mount error(2): No such file or directory Refer to the mount.cif..&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98&quot; data-og-url=&quot;https://malchooni.name/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wu0db/hyMSSOo1I9/MaOp9G5Wq1bMQMlA3jmZ60/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfvwUy/hyMSSt5AFd/9EkNj4g0Sbr3lkcKKC27w0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wu0db/hyMSSOo1I9/MaOp9G5Wq1bMQMlA3jmZ60/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfvwUy/hyMSSt5AFd/9EkNj4g0Sbr3lkcKKC27w0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;우분투 SMB mount error(2): No such file or directory 오류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우분투에서 cifs 마운트 중 다음과 같은 오류가 발생하였다. $ mount -t cifs -o user=xxxx,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/ mount error(2): No such file or directory Refer to the mount.cif..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다시 옵션 값에 버전 정보를 명령어에 넣은 후 실행하였더니 정상적으로 마운트 되었다.&amp;nbsp; 옵션으로 넣은 user와 password는 SMB 서버의 계정과 패스워드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;mount -t cifs -o user=xxxx,&lt;span style=&quot;color: #006dd7;&quot;&gt;vers=2.0&lt;/span&gt;,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;df -BG&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;udev &lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;0G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G &lt;span&gt;&amp;nbsp; &lt;/span&gt;0% /dev&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;tmpfs&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;1G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G &lt;span&gt;&amp;nbsp; &lt;/span&gt;1% /run&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;/dev/nvme0n1p2 &lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;234G &lt;span&gt;&amp;nbsp; &lt;/span&gt;87G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;136G&lt;span&gt;&amp;nbsp; &lt;/span&gt;39% /&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;tmpfs&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;0G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G &lt;span&gt;&amp;nbsp; &lt;/span&gt;0% /dev/shm&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;tmpfs&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;0G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G &lt;span&gt;&amp;nbsp; &lt;/span&gt;0% /run/lock&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;tmpfs&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;0G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;4G &lt;span&gt;&amp;nbsp; &lt;/span&gt;0% /sys/fs/cgroup&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;/dev/nvme0n1p1 &lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;1G&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1G &lt;span&gt;&amp;nbsp; &lt;/span&gt;2% /boot/efi&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;//172.30.1.1/hdd1 &amp;nbsp; &amp;nbsp; 1864G &amp;nbsp; 31G &amp;nbsp; &amp;nbsp; 1833G &amp;nbsp; 2% /mnt/ghostdisk&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그러나 root 계정으로 작업하였더니 다른 계정에서 접근권한 오류가 발생하였다.&amp;nbsp; 마운트 옵션 중에 uid, gid 입력하여 해결할 수 있다.&amp;nbsp; 특정 계정에 'id'라는 명령어로 uid, gid를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;id&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;uid=1000(xxxx) gid=1000(xxxx) groups=1000(xxxx),.......&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다시 마운트를 하기 위해 언마운트 먼저 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;umount&amp;nbsp;-l&amp;nbsp;/mnt/ghostdisk&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;mount -t cifs -o uid=1000,gid=1000,user=xxxx,vers=2.0,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; uid, gid를 입력하여 그 계정에게 권한을 주었다.&amp;nbsp; 그러나 필자는 어느 계정이든 접근이 목적이기에 언마운트 후 uid와 gid 옵션을 제거, '&lt;b&gt;noperm&lt;/b&gt;' 이란 옵션을 넣었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;mount -t cifs -o user=xxxx,vers=2.0,noperm,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이후 재부팅 시 자동 마운트 가능하게 /etc/fstab 파일을 vi 에디터로 열어 맨 마지막 줄에 다음 내용을 추가하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;b&gt;vi /etc/fstab&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;//172.30.1.1/hdd1 /mnt/ghostdisk/ cifs user=xxxx,vers=2.0,noperm,password=xxxx 0 0&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 추가된 내용은 의미는 &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt; 순이며, 구분자는 스페이스 혹은 탭으로 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이렇게 SMB 공유디스크를 우분투 서버에 마운트를 완료하였다.&amp;nbsp; 다음은 mount 명령어에서 사용한 -o 옵션에 대한 설명이다.&amp;nbsp; 구글 번역으로 바꾸었기 때문에 해석이 어색할 수 있음을 참고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 752px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.279%; text-align: center;&quot;&gt;옵션&lt;/td&gt;
&lt;td style=&quot;width: 78.721%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.279%; text-align: center;&quot;&gt;user 혹은 username&lt;/td&gt;
&lt;td style=&quot;width: 78.721%;&quot;&gt;연결할&amp;nbsp;사용자&amp;nbsp;이름을&amp;nbsp;지정합니다.&amp;nbsp;이것이&amp;nbsp;주어지지&amp;nbsp;않으면&amp;nbsp;환경변수&amp;nbsp;USER가&amp;nbsp;사용됩니다.&lt;br /&gt;이전&amp;nbsp;버전의&amp;nbsp;mount.cifs도&amp;nbsp;파일에&amp;nbsp;사용자&amp;nbsp;이름을&amp;nbsp;지정할&amp;nbsp;수&amp;nbsp;있었습니다.&lt;br /&gt;암호를&amp;nbsp;허용하려면&amp;nbsp;&quot;user%password&quot;&amp;nbsp;또는&amp;nbsp;&quot;workgroup/user&quot;&amp;nbsp;또는&amp;nbsp;&quot;workgroup/user%password&quot;&lt;br /&gt;사용자 이름의 일부로 지정될 작업 그룹. 대체 지원 사용자&amp;nbsp;이름&amp;nbsp;형식은&amp;nbsp;이제&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;사용되지&amp;nbsp;않으며&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;사용해서는&amp;nbsp;안&amp;nbsp;됩니다.&amp;nbsp;사용자는&amp;nbsp;다음을&amp;nbsp;사용해야&amp;nbsp;합니다.&lt;br /&gt;개별 &quot;password=&quot; 및 &quot;domain=&quot;을 사용하여 해당 값을 지정합니다. 일부 버전의cifs 커널 모듈은 &quot;user=&quot;를 이 옵션의 약어로 허용합니다.&lt;br /&gt;표준&amp;nbsp;마운트&amp;nbsp;프로그램을&amp;nbsp;이것이&amp;nbsp;수퍼유저가&amp;nbsp;아닌&amp;nbsp;마운트라고&amp;nbsp;생각하도록&amp;nbsp;혼동하십시오.&lt;br /&gt;따라서&amp;nbsp;전체&amp;nbsp;&quot;username=&quot;&amp;nbsp;옵션&amp;nbsp;이름을&amp;nbsp;사용하는&amp;nbsp;것이&amp;nbsp;좋습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.279%; text-align: center;&quot;&gt;password&lt;/td&gt;
&lt;td style=&quot;width: 78.721%;&quot;&gt;CIFS&amp;nbsp;암호를&amp;nbsp;지정합니다.&amp;nbsp;이&amp;nbsp;옵션이&amp;nbsp;주어지지&amp;nbsp;않으면&amp;nbsp;환경&amp;nbsp;변수PASSWD가&amp;nbsp;사용됩니다.&amp;nbsp;비밀번호를&amp;nbsp;직접&amp;nbsp;또는&amp;nbsp;간접적으로&amp;nbsp;지정하지&amp;nbsp;않은&amp;nbsp;경우마운트에&amp;nbsp;대한&amp;nbsp;인수,&amp;nbsp;mount.cifs는&amp;nbsp;게스트&amp;nbsp;옵션이&amp;nbsp;지정.&lt;br /&gt;&lt;br /&gt;구분&amp;nbsp;기호(예:&amp;nbsp;쉼표&amp;nbsp;',')가&amp;nbsp;포함된&amp;nbsp;암호는&amp;nbsp;명령줄에서&amp;nbsp;올바르게&amp;nbsp;구문&amp;nbsp;분석되지&amp;nbsp;않습니다.&amp;nbsp;단,&amp;nbsp;에&amp;nbsp;정의된&amp;nbsp;것과&amp;nbsp;동일한&amp;nbsp;비밀번호&amp;nbsp;PASSWD&amp;nbsp;환경&amp;nbsp;변수&amp;nbsp;또는&amp;nbsp;자격&amp;nbsp;증명&amp;nbsp;파일을&amp;nbsp;통해&amp;nbsp;암호&amp;nbsp;프롬프트가&amp;nbsp;올바르게&amp;nbsp;읽혀질&amp;nbsp;것입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.279%; text-align: center;&quot;&gt;vers&lt;/td&gt;
&lt;td style=&quot;width: 78.721%;&quot;&gt;SMB&amp;nbsp;프로토콜&amp;nbsp;버전.&amp;nbsp;허용되는&amp;nbsp;값은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;&amp;middot; 1.0 - 클래식 CIFS/SMBv1 프로토콜. 이것이 기본값입니다.&lt;br /&gt;&amp;middot;&amp;nbsp;2.0&amp;nbsp;-&amp;nbsp;SMBv2.002&amp;nbsp;프로토콜.&amp;nbsp;이것은&amp;nbsp;Windows&amp;nbsp;Vista에서&amp;nbsp;처음&amp;nbsp;도입되었습니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서비스&amp;nbsp;팩&amp;nbsp;1&amp;nbsp;및&amp;nbsp;Windows&amp;nbsp;Server&amp;nbsp;2008.&amp;nbsp;초기&amp;nbsp;릴리스&amp;nbsp;버전&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Windows Vista는 지원되지 않는 약간 다른 방언(2.000)을 사용했습니다.&lt;br /&gt;&amp;middot;&amp;nbsp;2.1&amp;nbsp;-&amp;nbsp;Microsoft&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;및&amp;nbsp;Windows에&amp;nbsp;도입된&amp;nbsp;SMBv2.1&amp;nbsp;프로토콜&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서버 2008R2.&lt;br /&gt;&amp;middot;&amp;nbsp;3.0&amp;nbsp;-&amp;nbsp;Microsoft&amp;nbsp;Windows&amp;nbsp;8&amp;nbsp;및&amp;nbsp;Windows에&amp;nbsp;도입된&amp;nbsp;SMBv3.0&amp;nbsp;프로토콜&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서버&amp;nbsp;2012.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;옵션이&amp;nbsp;사용된&amp;nbsp;프로토콜&amp;nbsp;버전을&amp;nbsp;제어하지만&amp;nbsp;모든&amp;nbsp;기능이&amp;nbsp;각&amp;nbsp;버전을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.279%; text-align: center;&quot;&gt;noperm&lt;/td&gt;
&lt;td style=&quot;width: 78.721%;&quot;&gt;클라이언트는&amp;nbsp;권한&amp;nbsp;확인을&amp;nbsp;하지&amp;nbsp;않습니다.&amp;nbsp;이렇게&amp;nbsp;하면&amp;nbsp;이&amp;nbsp;마운트의&amp;nbsp;파일이&amp;nbsp;다음을&amp;nbsp;통해&amp;nbsp;액세스할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;로컬&amp;nbsp;클라이언트&amp;nbsp;시스템의&amp;nbsp;다른&amp;nbsp;사용자.&amp;nbsp;일반적으로&amp;nbsp;서버가&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;경우에만&amp;nbsp;필요합니다.&lt;br /&gt;CIFS&amp;nbsp;Unix&amp;nbsp;Extensions를&amp;nbsp;지원하지만&amp;nbsp;클라이언트&amp;nbsp;및&amp;nbsp;서버&amp;nbsp;시스템의&amp;nbsp;UID/GID는&amp;nbsp;지원하지&amp;nbsp;않습니다.&lt;br /&gt;마운트를&amp;nbsp;수행하는&amp;nbsp;사용자가&amp;nbsp;액세스할&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;만큼&amp;nbsp;밀접하게&amp;nbsp;일치하지&amp;nbsp;않습니다.&amp;nbsp;&lt;br /&gt;이&amp;nbsp;서버&amp;nbsp;소프트웨어에서&amp;nbsp;수행하는&amp;nbsp;대상&amp;nbsp;시스템의&amp;nbsp;일반&amp;nbsp;ACL&amp;nbsp;검사에는&amp;nbsp;영향을&amp;nbsp;미치지&amp;nbsp;않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 자세한 mount 명령어 확인은 아래 링크를 참고 한다.&lt;/p&gt;
&lt;figure id=&quot;og_1640766485463&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Ubuntu Manpage:

       mount.cifs - mount using the Common Internet File System (CIFS)&quot; data-og-description=&quot;Powered by the Ubuntu Manpage Repository, file bugs in Launchpad &amp;copy; 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.&quot; data-og-host=&quot;manpages.ubuntu.com&quot; data-og-source-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; data-og-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu Manpage: mount.cifs - mount using the Common Internet File System (CIFS)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Powered by the Ubuntu Manpage Repository, file bugs in Launchpad &amp;copy; 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;manpages.ubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>cifs</category>
      <category>fstab</category>
      <category>mount</category>
      <category>mount error (2)</category>
      <category>noperm</category>
      <category>smb</category>
      <category>공유디스크</category>
      <category>서버</category>
      <category>우분투 마운트</category>
      <category>자동 마운트</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/36</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-CIFSSMB-%EB%A7%88%EC%9A%B4%ED%8A%B8#entry36comment</comments>
      <pubDate>Wed, 29 Dec 2021 17:32:09 +0900</pubDate>
    </item>
    <item>
      <title>우분투 SMB mount error(2): No such file or directory 오류</title>
      <link>https://malchooni.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 우분투에서 CIFS(SMB) 마운트 중 다음과 같은 오류가 발생하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ &lt;span style=&quot;color: #1a5490;&quot;&gt;mount -t cifs -o user=xxxx,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;mount error(2): No such file or directory&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 해당 위치의 경로를 확인하였으나 정상이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 검색을 통해 밑의 글을 확인하였다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1640755560091&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;mount.cifs fails with mount error(2): No such file or directory&quot; data-og-description=&quot;Mounting a samba share (from linux samba server) is not possible from shell on fresh kubuntu 19.04 installation root@client:~# mount -t cifs -o user=myuser //myserver/myshare /home/user/myserver/m...&quot; data-og-host=&quot;askubuntu.com&quot; data-og-source-url=&quot;https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory&quot; data-og-url=&quot;https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cT8hyH/hyMTHRUsDg/BqvhoWlko32la6XWl9Jyn0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://askubuntu.com/questions/1162199/mount-cifs-fails-with-mount-error2-no-such-file-or-directory&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cT8hyH/hyMTHRUsDg/BqvhoWlko32la6XWl9Jyn0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;mount.cifs fails with mount error(2): No such file or directory&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Mounting a samba share (from linux samba server) is not possible from shell on fresh kubuntu 19.04 installation root@client:~# mount -t cifs -o user=myuser //myserver/myshare /home/user/myserver/m...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;askubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이후 버전 정보를 3.0 , 2.0 , 1.0 순으로 옵션을 넣었더니 해결 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;mount -t cifs -o user=xxxx,vers=2.0,password=xxxx //172.30.1.1/hdd1 /mnt/ghostdisk/&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; vers 옵션에 대한 설명은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;SMB&amp;nbsp;프로토콜&amp;nbsp;버전.&amp;nbsp;허용되는&amp;nbsp;값은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;&amp;middot; 1.0 - 클래식 CIFS/SMBv1 프로토콜. 이것이 기본값입니다.&lt;br /&gt;&amp;middot;&amp;nbsp;2.0&amp;nbsp;-&amp;nbsp;SMBv2.002&amp;nbsp;프로토콜.&amp;nbsp;이것은&amp;nbsp;Windows&amp;nbsp;Vista에서&amp;nbsp;처음&amp;nbsp;도입되었습니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서비스&amp;nbsp;팩&amp;nbsp;1&amp;nbsp;및&amp;nbsp;Windows&amp;nbsp;Server&amp;nbsp;2008.&amp;nbsp;초기&amp;nbsp;릴리스&amp;nbsp;버전&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Windows Vista는 지원되지 않는 약간 다른 방언(2.000)을 사용했습니다.&lt;br /&gt;&amp;middot;&amp;nbsp;2.1&amp;nbsp;-&amp;nbsp;Microsoft&amp;nbsp;Windows&amp;nbsp;7&amp;nbsp;및&amp;nbsp;Windows에&amp;nbsp;도입된&amp;nbsp;SMBv2.1&amp;nbsp;프로토콜&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서버 2008R2.&lt;br /&gt;&amp;middot;&amp;nbsp;3.0&amp;nbsp;-&amp;nbsp;Microsoft&amp;nbsp;Windows&amp;nbsp;8&amp;nbsp;및&amp;nbsp;Windows에&amp;nbsp;도입된&amp;nbsp;SMBv3.0&amp;nbsp;프로토콜&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;서버&amp;nbsp;2012.&lt;br /&gt;&lt;br /&gt;이&amp;nbsp;옵션이&amp;nbsp;사용된&amp;nbsp;프로토콜&amp;nbsp;버전을&amp;nbsp;제어하지만&amp;nbsp;모든&amp;nbsp;기능이&amp;nbsp;각&amp;nbsp;버전을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1640767948799&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Ubuntu Manpage:

       mount.cifs - mount using the Common Internet File System (CIFS)&quot; data-og-description=&quot;Powered by the Ubuntu Manpage Repository, file bugs in Launchpad &amp;copy; 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.&quot; data-og-host=&quot;manpages.ubuntu.com&quot; data-og-source-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; data-og-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu Manpage: mount.cifs - mount using the Common Internet File System (CIFS)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Powered by the Ubuntu Manpage Repository, file bugs in Launchpad &amp;copy; 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;manpages.ubuntu.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>cifs</category>
      <category>mount error(2)</category>
      <category>no such file or directory</category>
      <category>smb</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/35</guid>
      <comments>https://malchooni.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-SMB-mount-error2-No-such-file-or-directory-%EC%98%A4%EB%A5%98#entry35comment</comments>
      <pubDate>Wed, 29 Dec 2021 16:30:32 +0900</pubDate>
    </item>
    <item>
      <title>javamail ssl 오류 SSLHandshakeException</title>
      <link>https://malchooni.tistory.com/entry/javamail-ssl-%EC%98%A4%EB%A5%98-SSLHandshakeException</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 자바 메일 발송시 다음과 같은 Exception이 발생하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; JDK가 TLS 프로토콜이 비활성 되어있거나 TLS 버전이 상이하여 발생하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그래서 다음 명령어를 통해 어떤 버전이 지원 가능한지 서버에 요청해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;$ openssl s_client -connect 서버주소:465 -tls1_2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; TLS 1.2 와 1.3은 정상 접속이 되는데 1.1은&amp;nbsp; &lt;span&gt;error:141E70BF:SSL routines 라는 오류가 발생하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그래서 자바 메일에서 사용할 기본 TLS 버전을 1.2로 변경하기로 했다.&amp;nbsp; JDK가 사용할 TLS 클라이언트 버전 설정은 시스템프로퍼티로 등록하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 18px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 18px;&quot;&gt;System.setProperty(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;jdk.tls.client.protocols&quot;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;TLSv1.2&quot;&lt;/span&gt;)&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 혹은 java 옵션 &lt;span style=&quot;color: #323232;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;-Djdk.tls.client.protocols=TLSv1.2&lt;/span&gt;을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #323232;&quot;&gt;&amp;nbsp; https의 TLS 버전을 변경하고 싶을 땐 &lt;span style=&quot;color: #ee2323;&quot;&gt;-Dhttps.protocols=TLSv1.2&lt;/span&gt; 옵션을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 98px;&quot; border=&quot;1&quot; width=&quot;100%&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 1.16279%; height: 18px;&quot; width=&quot;1%&quot;&gt;&lt;b&gt;Property&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 18px;&quot; width=&quot;1%&quot;&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 1.16279%; height: 20px;&quot; width=&quot;1%&quot;&gt;jdk.tls.client.protocols&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 20px;&quot; width=&quot;1%&quot;&gt;&lt;span style=&quot;color: #323232;&quot;&gt;기본 JDK TLS 프로토콜 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 1.16279%; height: 60px;&quot; width=&quot;1%&quot;&gt;https.protocols&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 60px;&quot; width=&quot;1%&quot;&gt;&lt;span style=&quot;color: #323232;&quot;&gt;HttpsURLConnection 클래스 또는 URL.openStream() 작업을 사용하여 https 연결을 얻는 클라이언트에서 사용하는 프로토콜 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/자바</category>
      <category>JAVA MAIL</category>
      <category>mail</category>
      <category>smtp</category>
      <category>TLS</category>
      <category>메일</category>
      <category>자바메일</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/34</guid>
      <comments>https://malchooni.tistory.com/entry/javamail-ssl-%EC%98%A4%EB%A5%98-SSLHandshakeException#entry34comment</comments>
      <pubDate>Thu, 4 Nov 2021 16:56:30 +0900</pubDate>
    </item>
    <item>
      <title>netty 간단한 http client, application/json 요청하기</title>
      <link>https://malchooni.tistory.com/entry/netty-%EA%B0%84%EB%8B%A8%ED%95%9C-http-client-applicationjson-%EC%9A%94%EC%B2%AD%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&amp;nbsp; buycycle를 활용하면 증권사 api를 http post 방식으로 요청 및 응답을 받을 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1617867997935&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 네티를 활용하여 buycycle에 http post application/json 요청하는 예제이다.&amp;nbsp; 간단한 http 요청이기에 비교적 소스는 간결하다.&amp;nbsp; channelpipeline 에 등록된 핸들러는 Http 코덱을 위한 HttpClientCodec과 응답에 대한 처리를 구현한 ResponseHandler 두 종류이다.&amp;nbsp; 보통 코덱은 인코더와 디코더로 구분하여 등록하나 &lt;span style=&quot;color: #333333;&quot;&gt;HttpClientCodec은 CombinedChannelDuplexHandler 상속 받은 핸들러이기에 인코더와 디코더가 함께 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617864615543&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package test;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.*;

import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;

public class NettyHttpRequest {

    public static void main(String[] args){

        EventLoopGroup group = new NioEventLoopGroup();
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group);
        bootstrap.channel(NioSocketChannel.class);
        bootstrap.handler(new ChannelInitializer&amp;lt;SocketChannel&amp;gt;() {
            @Override
            protected void initChannel(SocketChannel ch) throws Exception {
                ChannelPipeline pipeline = ch.pipeline();
                pipeline.addLast(new HttpClientCodec());
                pipeline.addLast(new NettyHttpResponseHandler());
            }
        });

        String content =
                &quot;{&quot; +
                &quot;  \&quot;body\&quot;: {&quot; +
                &quot;    \&quot;trName\&quot;: \&quot;t1511\&quot;,&quot; +
                &quot;    \&quot;bNext\&quot;: false,&quot; +
                &quot;    \&quot;query\&quot;: {&quot; +
                &quot;      \&quot;upcode\&quot;: \&quot;001\&quot;&quot; +
                &quot;    }&quot; +
                &quot;  },&quot; +
                &quot;   \&quot;header\&quot;: {&quot; +
                &quot;    \&quot;uuid\&quot;: \&quot;7b81c375-d9b9-43c1-8449-77e561a979f2\&quot;&quot; +
                &quot;  }&quot; +
                &quot;}&quot;;

        try {
            URI uri = new URI(&quot;http://localhost:7771/data/ebest/query&quot;);
            FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri.getRawPath());
            request.headers().set(HttpHeaderNames.HOST, uri.getHost());
            request.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON);
            request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE);

            ByteBuf byteBuf = Unpooled.copiedBuffer(content, StandardCharsets.UTF_8);
            request.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes());
            request.content().writeBytes(byteBuf);

            Channel ch = bootstrap.connect(uri.getHost(), uri.getPort()).sync().channel();
            ch.writeAndFlush(request);
            ch.closeFuture().sync();

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } finally {
            group.shutdownGracefully();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; DefaultFullHttpRequest 객체 생성 시 Http 버전 정보와, method, raw path 파라미터를 함께 넣을 수 있다. http body에 해당하는 content 파라미터도 넣을 수 있으나 해당 예제에선 request.content().writeBytes() 메소드를 이용하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Http header 정보로 Host 값과 content type, connection 정보도 같이 넣어주었다.&amp;nbsp; chunked 전송이 아니므로 content_length 정보도 꼭 넣어주어야 한다. chunked 전송시 io.netty.handler.codec.http.HttpUtil.&lt;span&gt;setTransferEncodingChunked&lt;/span&gt;()&lt;span&gt;; 이용시&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;setTransferEncodingChunked 메소드의 소스를 보면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;content_length header 정보는 삭제하는 걸 알 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 다음은 인바운드에 대한 handler 구현체이다.&lt;/p&gt;
&lt;pre id=&quot;code_1617864641067&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package test;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.*;
import io.netty.util.CharsetUtil;

public class NettyHttpResponseHandler extends SimpleChannelInboundHandler&amp;lt;HttpObject&amp;gt; {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
        if (msg instanceof HttpResponse) {
            HttpResponse response = (HttpResponse) msg;

            System.out.println(&quot;STATUS: &quot; + response.status());
            System.out.println(&quot;VERSION: &quot; + response.protocolVersion());
            System.out.println();

            if (!response.headers().isEmpty()) {
                for (CharSequence name: response.headers().names()) {
                    for (CharSequence value: response.headers().getAll(name)) {
                        System.out.println(&quot;HEADER: &quot; + name + &quot; = &quot; + value);
                    }
                }
                System.out.println();
            }
            System.out.println(&quot;CONTENT [&quot;);
        }

        if (msg instanceof HttpContent) {
            HttpContent content = (HttpContent) msg;

            System.out.print(content.content().toString(CharsetUtil.UTF_8));
            System.out.flush();

            if (content instanceof LastHttpContent) {
                System.out.println();
                System.out.println(&quot;] END OF CONTENT&quot;);
                ctx.close();
            }
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp; 해당 핸들러를 디버깅 해보면 channelRead0 메소드가 3번 호출 되는걸 알 수 있다.&amp;nbsp; 처음으로 DefaultHttpReponse instance 가 호출 되고 그 다음에 DefaultHttpContent 그 다음으로 EmptyLastHttpContent이다.&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;EmptyLastHttpContent 객체는 실제로 데이터는 없고 마지막을 알리는 플래그 값이라고 이해하면 쉽다.&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;DefaultHttpReponse에서는 헤더에 대한 정보를 출력하고 &lt;span style=&quot;color: #333333;&quot;&gt;DefaultHttpContent에서는 Body 부분에 담긴 데이터를 출력 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍/buycycle</category>
      <category>buycycle</category>
      <category>ebest api</category>
      <category>Example</category>
      <category>HttpClientCodec</category>
      <category>netty http client</category>
      <category>네티 http</category>
      <category>네티 클라이언트</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/33</guid>
      <comments>https://malchooni.tistory.com/entry/netty-%EA%B0%84%EB%8B%A8%ED%95%9C-http-client-applicationjson-%EC%9A%94%EC%B2%AD%ED%95%98%EA%B8%B0#entry33comment</comments>
      <pubDate>Thu, 8 Apr 2021 22:40:49 +0900</pubDate>
    </item>
    <item>
      <title>eBest xing api RESTful 요청 예제</title>
      <link>https://malchooni.tistory.com/entry/eBest-xing-api-RESTful-%EC%9A%94%EC%B2%AD-%EC%98%88%EC%A0%9C</link>
      <description>&lt;figure id=&quot;og_1663327833053&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;opensource.buycycle.name&quot; data-og-source-url=&quot;https://opensource.buycycle.name&quot; data-og-url=&quot;https://opensource.buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://opensource.buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opensource.buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opensource.buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Buycycle 설치 후 모듈을 실행 하면 기본 localhost 7771번 포트로 바인딩 된다.&amp;nbsp; 이 URL을 통해 HttpURLConnection를 활용하여 json 메시지로 요청 및 응답을 받아 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1616943338018&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import com.google.common.net.HttpHeaders;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Map;

public class BuyCyclePostRequest {

    public static void main(String[] args){
        try {
            URL url = new URL(&quot;http://localhost:7771/data/ebest/query&quot;);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

            httpURLConnection.setRequestMethod(&quot;POST&quot;);
            httpURLConnection.setRequestProperty(HttpHeaders.CONTENT_TYPE, &quot;application/json;charset=utf8&quot;);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);

            String requestMessage =
                &quot;{&quot; +
                &quot;  \&quot;body\&quot;: {&quot; +
                &quot;    \&quot;trName\&quot;: \&quot;t1511\&quot;,&quot; +
                &quot;    \&quot;bNext\&quot;: false,&quot; +
                &quot;    \&quot;query\&quot;: {&quot; +
                &quot;      \&quot;upcode\&quot;: \&quot;001\&quot;&quot; +
                &quot;    }&quot; +
                &quot;  },&quot; +
                &quot;   \&quot;header\&quot;: {&quot; +
                &quot;    \&quot;uuid\&quot;: \&quot;7b81c375-d9b9-43c1-8449-77e561a979f2\&quot;&quot; +
                &quot;  }&quot; +
                &quot;}&quot;;

            OutputStream os = httpURLConnection.getOutputStream();
            os.write(requestMessage.getBytes());
            os.flush();

            for (Map.Entry&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt; header : httpURLConnection.getHeaderFields().entrySet()) {
                for (String value : header.getValue()) {
                    System.out.println(header.getKey() + &quot; : &quot; + value);
                }
            }

            InputStream is = httpURLConnection.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String readLine = null;

            while ((readLine = br.readLine()) != null) {
                System.out.println(readLine);
            }

            br.close();
            os.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Buycycle의 api를 참조하여 http://localhost:7771/data/ebest/query URL 설정 후 메소드는 'POST' 헤더 값엔 Content-Type 을 &lt;span&gt;application/json 으로 설정 후 요청 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 테스트 해 본 TR은 '업종현재가'이며 '001'은 종합을 뜻한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 해당 요청에 대한 응답은 다음 스크린샷과 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;스크린샷 2021-03-29 오전 12.00.23.png&quot; data-origin-width=&quot;1655&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXxqlW/btq1beqHKI3/i47QojlKMeNZl7Sfy2oZ31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXxqlW/btq1beqHKI3/i47QojlKMeNZl7Sfy2oZ31/img.png&quot; data-alt=&quot;응답 헤더 및 응답 바디&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXxqlW/btq1beqHKI3/i47QojlKMeNZl7Sfy2oZ31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXxqlW%2Fbtq1beqHKI3%2Fi47QojlKMeNZl7Sfy2oZ31%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;1655&quot; height=&quot;161&quot; data-filename=&quot;스크린샷 2021-03-29 오전 12.00.23.png&quot; data-origin-width=&quot;1655&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;응답 헤더 및 응답 바디&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; HttpURLConnection을 활용하여 간단한 예제 코드를 구현 하였다.&amp;nbsp; json 메시지에 대한 부분은 편의를 위해 String으로 하였으나 jackson 이나 gson 등 라이브러리를 활용하면 손 쉽게 json 메시지 구현이 가능하다.&lt;/p&gt;</description>
      <category>프로그래밍/buycycle</category>
      <category>buycycle</category>
      <category>Example</category>
      <category>HttpURLConnection</category>
      <category>post</category>
      <category>바이사이클</category>
      <category>예제</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/32</guid>
      <comments>https://malchooni.tistory.com/entry/eBest-xing-api-RESTful-%EC%9A%94%EC%B2%AD-%EC%98%88%EC%A0%9C#entry32comment</comments>
      <pubDate>Mon, 29 Mar 2021 00:06:13 +0900</pubDate>
    </item>
    <item>
      <title>eBest xing api를 http json으로 요청 응답 하기</title>
      <link>https://malchooni.tistory.com/entry/eBest-xing-api%EB%A5%BC-http-json%EC%9C%BC%EB%A1%9C-%EC%9A%94%EC%B2%AD-%EC%9D%91%EB%8B%B5-%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;buycycle.png&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdzmOH/btq0A2ywprD/tQmLsk14kLjcvHgggroNmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdzmOH/btq0A2ywprD/tQmLsk14kLjcvHgggroNmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdzmOH/btq0A2ywprD/tQmLsk14kLjcvHgggroNmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdzmOH%2Fbtq0A2ywprD%2FtQmLsk14kLjcvHgggroNmK%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;219&quot; height=&quot;71&quot; data-filename=&quot;buycycle.png&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;71&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;이베스트투자증권에서 제공하는 xing api를 사용자가 접근하기 쉬운 json 메시지로 요청 및 응답 받는 오픈소스를 소개 한다.&amp;nbsp; buycycle 모듈을 기동하면 그 모듈이 리슨하고 있는 포트로 json 요청 응답을 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://opensource.buycycle.name&quot;&gt;https://opensource.buycycle.name&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1663327756820&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;opensource.buycycle.name&quot; data-og-source-url=&quot;https://opensource.buycycle.name&quot; data-og-url=&quot;https://opensource.buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://opensource.buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opensource.buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opensource.buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 해당 모듈은 Spring Boot 기반이며, Vue.js로 구현된 웹환경의 API 명세 및 테스트 할 수 있는 웹페이지도 함께 제공하고 있다.&amp;nbsp; 해당 모듈은 오픈소스이므로 &lt;a href=&quot;https://github.com/malchooni/buycycle&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/malchooni/buycycle&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;&amp;nbsp; buycycle의 프로세스는 두가지로 구분 할 수 있는데 조회성 단일 이벤트(xa query)의 경우 HTTP POST(restful)로 json 메시지를 요청하면 그 결과를 json 메시지로 응답 받는다.&amp;nbsp; 실시간성 데이터(xa real)일 경우 websocket을 연결하여 실시간 수신 이벤트를 웹소켓을 통해 제공 받는다.&amp;nbsp; buycycle은 xing api의 구현체를 내포하고 있어 사용자는 HTTP 클라이언트 및 웹소켓 클라이언트를 구현하여 서비스를 제공 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; buycycle은 모듈 기동시 웹화면을 같이 제공하는데 그 웹화면에선 xing api 에서 제공하는 인터페이스 목록과 해당 인터페이스의 상세 명세도 확인 할 수 있다.&amp;nbsp; 또한 웹화면엔 HTTP 클라이언트 및 웹소켓 클라이언트도 같이 구현되어있어 사용자가 참조할 수 있고 테스트 또 한 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다음 동영상을 통해 buycycle의 동작을 엿볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/rD5R_XTzDis&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;youtu.be/rD5R_XTzDis&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=rD5R_XTzDis&amp;amp;feature=youtu.be&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/9Od7n/hyJCwnIjdE/DgjgOLJ3zqyXknF7nD0Stk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;undefined&quot; data-video-origin-height=&quot;undefined&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/rD5R_XTzDis&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다운로드는 buycycle.name에 접속하여 '다운로드' 메뉴를 통해 github release 페이지에서 buycycle.zip 바이너리 파일을 다운 받는다.&amp;nbsp; 다운 받은 파일은 압축을 풀어 buycycle/config/application.yaml 파일에 아이디 비번 정보를 저장 후 startBuycycle.bat 실행을 통해 기동할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/buycycle</category>
      <category>buycycle</category>
      <category>Restful</category>
      <category>WebSocket</category>
      <category>XING API</category>
      <category>xing json</category>
      <category>xing json request</category>
      <category>이베스트 http 요청</category>
      <category>이베스트 json</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/31</guid>
      <comments>https://malchooni.tistory.com/entry/eBest-xing-api%EB%A5%BC-http-json%EC%9C%BC%EB%A1%9C-%EC%9A%94%EC%B2%AD-%EC%9D%91%EB%8B%B5-%ED%95%98%EA%B8%B0#entry31comment</comments>
      <pubDate>Mon, 22 Mar 2021 19:14:20 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] v-dialog , $refs 오브젝트가 존재하지 않을 때</title>
      <link>https://malchooni.tistory.com/entry/Vuejs-v-dialog-refs-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8%EA%B0%80-%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</link>
      <description>&lt;p&gt;&amp;nbsp; vuetifyjs 프레임워크 사용시 ref 속성을 지정해도 $refs의 참조 오브젝트가 존재 하지 않는 일이 발생했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 개발자 모드로 디버깅 해 보아도 해당 오브젝트가 없었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.13.41.png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;105&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btlH8d/btqVAJpko1V/SrkTj4QkDSAgBKQJc389Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btlH8d/btqVAJpko1V/SrkTj4QkDSAgBKQJc389Uk/img.png&quot; data-alt=&quot;ref 속성으로 지정한 오브젝트가 없음.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btlH8d/btqVAJpko1V/SrkTj4QkDSAgBKQJc389Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtlH8d%2FbtqVAJpko1V%2FSrkTj4QkDSAgBKQJc389Uk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.13.41.png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;105&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref 속성으로 지정한 오브젝트가 없음.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;278&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.13.55.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8BNZM/btqVCcY6Ore/hRX30RrktyrcWN0D9zMe21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8BNZM/btqVCcY6Ore/hRX30RrktyrcWN0D9zMe21/img.png&quot; data-alt=&quot;$refs 오브젝트를 확인해도 존재하는 오브젝트가 없음.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8BNZM/btqVCcY6Ore/hRX30RrktyrcWN0D9zMe21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8BNZM%2FbtqVCcY6Ore%2FhRX30RrktyrcWN0D9zMe21%2Fimg.png&quot; data-origin-width=&quot;385&quot; data-origin-height=&quot;278&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.13.55.png&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;$refs 오브젝트를 확인해도 존재하는 오브젝트가 없음.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vuetifyjs.com/en/getting-started/upgrade-guide/#framework&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;vuetifyjs.com/en/getting-started/upgrade-guide/#framework&lt;/a&gt;&amp;nbsp; 확인해 본 결과 다음과 같은 문구를 발견할 수 있었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;The following components are now&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;lazy&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;by default. This means they will not render their content until they are explicitly activated. This drastically improves performance but may not be wanted depending upon your application&amp;rsquo;s needs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(i.e. For SEO purposes)&lt;/span&gt;&lt;span&gt;. To return to the previous behavior, use the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;eager&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;prop.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; v-dialog 태그 뿐만 아니라 &lt;span style=&quot;color: #333333;&quot;&gt;v-menu, &lt;span style=&quot;color: #333333;&quot;&gt;v-tooltip, &lt;span style=&quot;color: #333333;&quot;&gt;v-bottom-sheet 구성요소는 성능을 위해 활성화 될 때 까지 &lt;span&gt;렌더링을&amp;nbsp;&lt;/span&gt;지연 한다고 한다.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;eager 속성을 사용하면 렌더링 지연 없이 바로 생성한다.&amp;nbsp; 해당 속성을 삽입한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.21.19.png&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pImIG/btqVyUSoKaw/tVA0m8Gsk6XPcKPolkXPnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pImIG/btqVyUSoKaw/tVA0m8Gsk6XPcKPolkXPnk/img.png&quot; data-alt=&quot;v-dialog eager 속성 지정.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pImIG/btqVyUSoKaw/tVA0m8Gsk6XPcKPolkXPnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpImIG%2FbtqVyUSoKaw%2FtVA0m8Gsk6XPcKPolkXPnk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-02-03 오후 5.21.19.png&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;280&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-dialog eager 속성 지정.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 해당 속성을 넣으면 v-dialog 활성 전에도 refs 오브젝트에 참조 오브젝트가 접근 가능한 걸 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Vue.js</category>
      <category>$refs</category>
      <category>undefined</category>
      <category>v-bottom-sheet</category>
      <category>v-dialog</category>
      <category>v-menu</category>
      <category>v-tooltip</category>
      <category>vuejs</category>
      <category>vuetify</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/30</guid>
      <comments>https://malchooni.tistory.com/entry/Vuejs-v-dialog-refs-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8%EA%B0%80-%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C#entry30comment</comments>
      <pubDate>Wed, 3 Feb 2021 17:23:09 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105</link>
      <description>&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[홈서버구축] 홈네트워크 구성하기 (1)&quot; data-og-description=&quot;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105 [홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/du2khx/hyHuDJgbIk/Ojc2lK2LhfKveqsKwwduyk/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/du2khx/hyHuDJgbIk/Ojc2lK2LhfKveqsKwwduyk/img.png?width=558&amp;amp;height=286&amp;amp;face=0_0_558_286');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버구축] 홈네트워크 구성하기 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105 [홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 홈 네트워크 구성을 완료하고 홈서버에 어떤 디바이스를 사용할지 고민해 보았다.&amp;nbsp; 개인용 홈서버로 집에서 사용할 모델들을 검색하였고 비교적 저렴한 GIGABYTE BRIX s GB-BLCE-4105를 구입하였다.&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;GB-BLCE-4105 선택한 첫 번째 이유는&amp;nbsp;&lt;/span&gt;저전력 cpu이다.&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;저전력 cpu &lt;/span&gt;기반이라 빠른 퍼포먼스는 기대할 순 없어도 개인이 활용할 용도로는 절대 부족하지 않는 사양이다.&amp;nbsp; 두 번째는 작은 크기이다.&amp;nbsp; 모니터에 설치할 수 있도록 베사홀 케이스까지 제공해준다.&amp;nbsp; 그 정도 작은 크기의 디바이스라면 홈서버로 사용하기엔 좋을 것이다.&amp;nbsp; 세 번째는 확장성이다.&amp;nbsp; 크기와 확정성은 비록 반비례하지만 3.5인치의 확장성까지 갖추고 있다.&amp;nbsp; 메인 스토리지로 m2 ssd를 사용하지만, 3.5인치 ssd 또는 hdd까지 확장이 가능하다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mq6rn/btqIydEjKaE/5Z5dRPG64HMmHAAzPLY1rK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mq6rn/btqIydEjKaE/5Z5dRPG64HMmHAAzPLY1rK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mq6rn/btqIydEjKaE/5Z5dRPG64HMmHAAzPLY1rK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmq6rn%2FbtqIydEjKaE%2F5Z5dRPG64HMmHAAzPLY1rK%2Fimg.jpg&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 아주 심플하고 아름다운 디자인을 갖추었다.&amp;nbsp; 홈서버 용도로 구입하였지만 디자인도 마음에 들었다.&amp;nbsp; 전원키 위치가 본체 위쪽에 삼각형 모양으로 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EncGY/btqIGm0GsoF/8J9pOsJykziKsLCdMLU7N1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EncGY/btqIGm0GsoF/8J9pOsJykziKsLCdMLU7N1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EncGY/btqIGm0GsoF/8J9pOsJykziKsLCdMLU7N1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEncGY%2FbtqIGm0GsoF%2F8J9pOsJykziKsLCdMLU7N1%2Fimg.jpg&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 메모리는 [삼성전자 노트북 DDR4 4G PC4-19200] 두개를 꽂아 8기가로 맞추었다.&amp;nbsp; 이 디바이스의 최대 지원 메모리도 8기가이다.&amp;nbsp; 비교적 적은 메모리 용량이 아쉽지만 본인은 m2 ssd를 256기가를 설치하여 이중 16기가를 스왑 메모리로 할당하였다.&amp;nbsp; m2 ssd의 읽고 쓰는 속도는 빠른 편이므로 메모리만큼은 아니지만 부족한 부분을 채워주기엔 적당한 솔루션이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 하나의 랜선 포트를 지원하며, USB type C 규격의 포트도 존재한다.&amp;nbsp; 모니터 출력은 hdmi이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oYCKo/btqIFxVz7WQ/oKTa6GDQNKEwQeQaqol6P1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oYCKo/btqIFxVz7WQ/oKTa6GDQNKEwQeQaqol6P1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oYCKo/btqIFxVz7WQ/oKTa6GDQNKEwQeQaqol6P1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoYCKo%2FbtqIFxVz7WQ%2FoKTa6GDQNKEwQeQaqol6P1%2Fimg.jpg&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 메인보드를 고정한 나사를 풀면, 기판을 뜯어낼 수 있다. 그리고 윗면에 cpu j4105가 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btQD20/btqIGltVYxg/hOC3SoOTwuCElxkhXKGuI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btQD20/btqIGltVYxg/hOC3SoOTwuCElxkhXKGuI1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btQD20/btqIGltVYxg/hOC3SoOTwuCElxkhXKGuI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtQD20%2FbtqIGltVYxg%2FhOC3SoOTwuCElxkhXKGuI1%2Fimg.jpg&quot; data-origin-width=&quot;720.0&quot; data-origin-height=&quot;960.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 팬과 방열판을 뜯어내면 CPU가 나타난다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;960.0&quot; data-origin-height=&quot;720.0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyEbWj/btqIxZeDyh5/U4atbC8r763Rxz9e4KZY6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyEbWj/btqIxZeDyh5/U4atbC8r763Rxz9e4KZY6k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyEbWj/btqIxZeDyh5/U4atbC8r763Rxz9e4KZY6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyEbWj%2FbtqIxZeDyh5%2FU4atbC8r763Rxz9e4KZY6k%2Fimg.jpg&quot; data-origin-width=&quot;960.0&quot; data-origin-height=&quot;720.0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이렇게 디바이스를 두 개 구입하여 홈네트워크를 구성하였다.&amp;nbsp; 메일서버, 깃 서버, 웹서버 등을 설치하여 현재 24시간 운영 중이며, 최근에는 도커를 설치하여 운영 중인 프로세스들을 액티브, 스탠바이 구조로 구성하였다.&amp;nbsp; 트래픽이 많지 않으니 디바이스 두 개를 동시에 키는 것보다 하나씩 돌아가서면서 운영하는 방법을 택하고 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>BRIX</category>
      <category>GB-BLCE-4105</category>
      <category>GIGABYTE</category>
      <category>J4105</category>
      <category>개인서버</category>
      <category>도커</category>
      <category>디바이스</category>
      <category>메일서버</category>
      <category>저전력</category>
      <category>홈서버</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/29</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105#entry29comment</comments>
      <pubDate>Mon, 14 Sep 2020 14:16:25 +0900</pubDate>
    </item>
    <item>
      <title>wsdl2java 간편한 웹서비스 클라이언트 생성</title>
      <link>https://malchooni.tistory.com/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1</link>
      <description>&lt;p&gt;&amp;nbsp; 웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 웹서비스 클라이언트를 구축하려면 일단 웹서비스 제공자가 필요할 테니 밑의 글을 참고하거나 WSDL를 발행하는 웹서비스를 찾도록 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1599617398932&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;jax-ws 웹서비스 서버 구축하기&quot; data-og-description=&quot;웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다. 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기�&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eaQRzD/hyHrDalAlg/DNt3KsxernsuhnNzY2hql1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/rOz9M/hyHrASdDK2/C33MGQuq8mkyfigDJkChS0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eaQRzD/hyHrDalAlg/DNt3KsxernsuhnNzY2hql1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/rOz9M/hyHrASdDK2/C33MGQuq8mkyfigDJkChS0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;jax-ws 웹서비스 서버 구축하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다. 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp; wsdl2java를 활용할 주소는 http://localhost:8080/personalInfoService?wsdl 이다.&amp;nbsp; 위의 글을 참고하여 로컬에 구축하였다.&amp;nbsp; URL이나 파일 형태의 WSDL를 확인한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; wsdl2java 실행에 앞서 필자의 워크스페이스 파일 인코딩은 UTF-8을 사용한다.&amp;nbsp; 그래서 wsdl2java의 스크립트를 다음과 같이 약간 변경하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2캡처_.png&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;818&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqXQOH/btqIl91o5Mw/9kRXlGKCTkpjbtzQUXOGk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqXQOH/btqIl91o5Mw/9kRXlGKCTkpjbtzQUXOGk1/img.png&quot; data-alt=&quot;-Dfile.encoding 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqXQOH/btqIl91o5Mw/9kRXlGKCTkpjbtzQUXOGk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqXQOH%2FbtqIl91o5Mw%2F9kRXlGKCTkpjbtzQUXOGk1%2Fimg.png&quot; data-filename=&quot;2캡처_.png&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;818&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;-Dfile.encoding 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 이후 wsdl2java 명령어를 실행하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.PNG&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;62&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp5Qwp/btqIhrPp0gv/CqkoCxKjmDjpyJvFSkcrVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp5Qwp/btqIhrPp0gv/CqkoCxKjmDjpyJvFSkcrVK/img.png&quot; data-alt=&quot;wsdl2java 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp5Qwp/btqIhrPp0gv/CqkoCxKjmDjpyJvFSkcrVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp5Qwp%2FbtqIhrPp0gv%2FCqkoCxKjmDjpyJvFSkcrVK%2Fimg.png&quot; data-filename=&quot;7.PNG&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;62&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;wsdl2java 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 40px;&quot;&gt;D:\apache-cxf-&lt;span&gt;3.4.0&lt;/span&gt;\bin&amp;gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;wsdl2java -d D:/workspace/study/studyjaxws/src/main/java -p test.client.webservice -client http://localhost:8080/personalInfoService?wsdl&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;-d 옵션은 자바파일이 생성될 루트 디렉터리로 설정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;-p 생성될 자바파일의 패키지를 지정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;-client 옵션을 넣으면 웹서비스 호출하는 샘플 파일이 같이 생성된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;WSDL URL or WSDL File 경로&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; 밑의 CXF 공식 사이트를 참조하면 옵션에 대한 설명이 나와 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1599626526349&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apache CXF -- WSDL to Java&quot; data-og-description=&quot;&amp;nbsp; WSDL to JavaNamewsdl2java - takes a WSDL document and generates fully annotated Java code from which to implement a service.Synopsis Usage : wsdl2java -fe|-frontend -db|-databinding -wv -p &amp;lt;[wsdl-namespace =]package-name&amp;gt;* -sn -b * -reserveClass * -cata&quot; data-og-host=&quot;cxf.apache.org&quot; data-og-source-url=&quot;http://cxf.apache.org/docs/wsdl-to-java.html&quot; data-og-url=&quot;http://cxf.apache.org/docs/wsdl-to-java.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://cxf.apache.org/docs/wsdl-to-java.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://cxf.apache.org/docs/wsdl-to-java.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Apache CXF -- WSDL to Java&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp; WSDL to JavaNamewsdl2java - takes a WSDL document and generates fully annotated Java code from which to implement a service.Synopsis Usage : wsdl2java -fe|-frontend -db|-databinding -wv -p &amp;lt;[wsdl-namespace =]package-name&amp;gt;* -sn -b * -reserveClass * -cata&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;cxf.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 3426px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-?,&lt;span&gt;&amp;nbsp;&lt;/span&gt;-h,-help&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;이 유틸리티에 대한 온라인 도움말을 표시하고 종료합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-fe frontend-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;프런트 엔드를 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 JAXWS입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 JAX-WS 2.1 호환 코드를 생성하기 위해 JAXWS 프런트 엔드 및 &quot;jaxws21&quot;프런트 엔드 만 지원합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-db databinding-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;데이터 바인딩을 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 jaxb입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 jaxb, xmlbeans, sdo (sdo-static 및 sdo-dynamic) 및 jibx를 지원합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-wv wsdl-version&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;wsdl 버전을 지정합니다. 기본값은 WSDL1.1입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;현재 WSDL1.1 버전만 지원합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-p [ wsdl-namespace= ] PackageName&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;생성된 코드에 사용할 0 개 이상의 패키지 이름을 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지 이름 매핑에 대한 WSDL 네임 스페이스를 선택적으로 지정합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-sn service-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;생성된 코드에 사용할 WSDL 서비스 이름입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-b binding-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;JAXWS 또는 JAXB 바인딩 파일 또는 XMLBeans 컨텍스트 파일을 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;여러 항목을 지정하려면 여러 -b 플래그를 사용하십시오.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-catalog catalog-file-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;가져온 wsdl / schema를 맵핑할 카탈로그 파일 지정&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-d output-directory&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;생성된 코드 파일이 기록되는 디렉토리를 지정합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-compile&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;생성된 Java 파일을 컴파일합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-classdir compile-class-dir&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;컴파일된 클래스 파일이 기록되는 디렉토리를 지정합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-client&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;클라이언트 메인 라인의 시작점 코드를 생성합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-clientjar jar-file-name&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;모든 클라이언트 클래스와 wsdl을 포함하는 jar 파일을 생성합니다. -clientJar가 정의되면 지정된 wsdlLocation이 작동하지 않습니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-server&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;서버 메인 라인의 시작점 코드를 생성합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-impl&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;구현 객체의 시작점 코드를 생성합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-all&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;유형, 서비스 프록시, 서비스 인터페이스, 서버 메인 라인, 클라이언트 메인 라인, 구현 오브젝트 및 Ant&lt;span&gt;&amp;nbsp;build.xml파일&amp;nbsp;과&lt;/span&gt; 같은 모든 시작점 코드를 생성&amp;nbsp;합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-ant&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;Ant&lt;span&gt;&amp;nbsp;build.xml스크립트&amp;nbsp;를&lt;/span&gt; 생성하도록 지정하십시오&amp;nbsp;.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-autoNameResolution&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;바인딩 사용자 지정을 사용하지 않고도 이름 충돌을 자동으로 해결합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-defaultValues=[DefaultValueProvider impl]&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;impl 및 클라이언트에 대해 기본값이 생성되도록 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용자 지정 기본값 공급자를 제공할 수도 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 공급자는RandomValueProvider&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 126px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 126px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-nexclude schema-namespace [=java-packagename]&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 126px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드를 생성할 때 지정된 WSDL 스키마 네임 스페이스를 무시하십시오.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 옵션은 여러 번 지정할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;또한 제외된 네임 스페이스에 설명된 유형에 사용되는 Java 패키지 이름을 선택적으로 지정합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 198px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 198px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-exsh (true/false)&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 198px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;암시 적 SOAP 헤더 (예 : wsdl : binding에는 정의되었지만 wsdl : portType 섹션에는 정의되지 않은 SOAP 헤더)의 처리를 활성화하거나 비활성화합니다. SOAP 헤더를 처리하려면 CXF 2.4.x에서 기본값이 아닌 클래스 경로에서 사용할 수 있는 SOAP 바인딩 jar가 필요합니다. 나이.&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 플래그가 작동하려면 cxf-rt-binding-soap에 종속성을 추가해야 할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 거짓입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 126px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 126px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-dns (true/false)&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 126px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;기본 네임 스페이스 패키지 이름 매핑의 로드를 활성화하거나 비활성화합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 true이며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.w3.org/2005/08/addressing=org.apache.cxf.ws.addressing&quot;&gt;http://www.w3.org/2005/08/addressing=org.apache.cxf.ws.addressing&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;네임 스페이스 패키지 매핑이 활성화됩니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-dex (true/false)&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;기본 제외 네임 스페이스 매핑 로드를 활성화하거나 비활성화합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 true입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-validate&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드를 생성하기 전에 WSDL의 유효성을 검사할 수 있습니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-keep&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드 생성기가 기존 파일을 덮어쓰지 않도록 지정합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;결과적으로 발생하는 컴파일 문제를 해결해야 합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-wsdlLocation wsdlLocation&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;@WebServiceClient 주석의 wsdlLocation 속성 값을 지정합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-xjc&amp;lt;xjc args&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;JAXB 데이터 바인딩을 사용할 때 XJC 프로세서로 직접 전달되는 쉼표로 구분된&amp;nbsp;&lt;a href=&quot;https://jaxb.dev.java.net/nonav/2.2/docs/xjc.html&quot;&gt;인수&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;목록을 지정합니다.&amp;nbsp;사용 가능한 XJC 플러그인 목록은&lt;span&gt;&amp;nbsp;&lt;/span&gt;-xjc-X.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-noAddressBinding&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;CXF 2.0과의 호환성을 위해이 플래그는 코드 생성기가 JAX-WS 2.1 호환 WS-Addressing 유형 대신 이전 CXF 독점 WS-Addressing 유형을 생성하도록 지시합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-v&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;도구의 버전 번호를 표시합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-verbose&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드 생성 프로세스 중에 주석을 표시합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-quiet&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드 생성 프로세스 중에 주석을 억제합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 78px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-exceptionSuper&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 78px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;wsdl : fault 요소에서 생성된 결함 Bean의 슈퍼 클래스 (기본값은 java.lang.Exception)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-reserveClass classname&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-autoNameResolution과 함께 사용되며 클래스&lt;span&gt;&amp;nbsp;생성 시&lt;/span&gt; 사용하지&lt;b&gt; 않도록&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;wsdl-to-java의 클래스 이름을 정의합니다.&amp;nbsp;여러 클래스에 대해이 옵션을 여러 번 사용하십시오.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-allowElementReferences&amp;lt;=true&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;(또는 -aer) 참이면, 래퍼 스타일 매핑을 사용할 때 요소 참조를 허용하지 않는 JAX-WS 2.2 사양의 섹션 2.3.1.2 (v)에 제공된 규칙을 무시합니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-asyncMethods=foo,bar,...&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;JAX-WS 바인딩 파일의 enableAsyncMapping과 유사하게 클라이언트 측 비동기 호출을 허용하기 위해 이후에 생성되는 Java 클래스 메서드 목록입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-bareMethods=foo,bar,...&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;JAX-WS 바인딩 파일의 enableWrapperStyle과 유사한 래퍼 스타일 (아래 참조)을 갖는 후속 생성된 Java 클래스 메서드 목록입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-mimeMethods=foo,bar,...&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;JAX-WS 바인딩 파일의 enableMIMEContent와 유사하게 mime : content 맵핑을 사용하기 위해 이후에 생성된 Java 클래스 메서드 목록입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 102px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-faultSerialVersionUID &amp;lt;fault-serialVersionUID&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 102px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;오류 예외의 suid를 생성하는 방법.&lt;span&gt;&amp;nbsp;&lt;/span&gt;NONE, TIMESTAMP, FQCN 또는 특정 숫자를 사용하십시오.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 NONE입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;-mark-generated&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;생성된 클래스에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://docs.oracle.com/javase/6/docs/api/javax/annotation/Generated.html&quot;&gt;@Generated&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주석을&lt;span&gt;&amp;nbsp;추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;-suppress-generated-date&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;생성 된 파일에 현재 타임 스탬프 쓰기를 억제합니다 (CXF 버전 3.2.2 이후).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;-maxExtensionStackDepth &amp;lt;int&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;스키마 확장을 구문 분석 할 때 허용되는 최대 스택 깊이입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본값은 5입니다 (&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CXF 3.3.4&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이후&lt;span&gt;&amp;nbsp;&lt;/span&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;wsdlurl&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;
&lt;p&gt;코드 생성에 사용할 WSDL 파일의 경로 및 이름입니다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; wsdl2java 명령어를 실행하면 다음 그림과 같이 자바 파일이 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3_.png&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;777&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ4FDG/btqIl8hhiLV/Bfvx7ldUOTRDQASPgynnJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ4FDG/btqIl8hhiLV/Bfvx7ldUOTRDQASPgynnJK/img.png&quot; data-alt=&quot;생성된 자바 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ4FDG/btqIl8hhiLV/Bfvx7ldUOTRDQASPgynnJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ4FDG%2FbtqIl8hhiLV%2FBfvx7ldUOTRDQASPgynnJK%2Fimg.png&quot; data-filename=&quot;3_.png&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;777&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성된 자바 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; -client 옵션을 선택하여 PInfoByIjyoon_PInfoPort_Client.java 파일이 같이 생성되었다.&amp;nbsp; 해당 자바 파일을 확인하면 웹서비스를 인보크 하는 샘플이 나와있다.&amp;nbsp; value object가 null로 되어있으니 요청 value object 입력하여 호출하여 본다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4_.png&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;697&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/prCNI/btqIasnXcQm/6KIOZPKpkM7bQb5S7uBVy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/prCNI/btqIasnXcQm/6KIOZPKpkM7bQb5S7uBVy1/img.png&quot; data-alt=&quot;웹서비스 인보크&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/prCNI/btqIasnXcQm/6KIOZPKpkM7bQb5S7uBVy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FprCNI%2FbtqIasnXcQm%2F6KIOZPKpkM7bQb5S7uBVy1%2Fimg.png&quot; data-filename=&quot;4_.png&quot; data-origin-width=&quot;1031&quot; data-origin-height=&quot;697&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹서비스 인보크&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.PNG&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;212&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XxcED/btqH51RRHuO/P6P7WacBHotw83VvEe6TKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XxcED/btqH51RRHuO/P6P7WacBHotw83VvEe6TKk/img.png&quot; data-alt=&quot;클라이언트 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XxcED/btqH51RRHuO/P6P7WacBHotw83VvEe6TKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXxcED%2FbtqH51RRHuO%2FP6P7WacBHotw83VvEe6TKk%2Fimg.png&quot; data-filename=&quot;5.PNG&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;212&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클라이언트 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.PNG&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;234&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Vfix/btqIlu6aBEZ/5h5K6H0X5GPPmIIePkE9A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Vfix/btqIlu6aBEZ/5h5K6H0X5GPPmIIePkE9A0/img.png&quot; data-alt=&quot;서버 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Vfix/btqIlu6aBEZ/5h5K6H0X5GPPmIIePkE9A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Vfix%2FbtqIlu6aBEZ%2F5h5K6H0X5GPPmIIePkE9A0%2Fimg.png&quot; data-filename=&quot;6.PNG&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;234&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 호출 후 응답 value object를 확인하면 웹서비스 제공 측에서 전달한 응답 값을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1599709240129&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;HttpURLConnection을 이용한 Http 클라이언트&quot; data-og-description=&quot;사용자는 웹브라우저(익스플로러, 크롬, 사파리 등등)를 통해 웹서버에게 필요 URI를 요청하고 응답 값을 받는다. 웹브라우저는 그 응답 값(보통 HTML)을 해석하여 화면을 만들어준다. 이 처럼 웹��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8&quot; data-og-url=&quot;https://malchooni.name/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uFNDE/hyHs3MRmQN/IGegC5vTQIIO4WbERsiLl0/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397,https://scrap.kakaocdn.net/dn/dktvIB/hyHtcQzwfL/QgbSHzU4GJk1mOiSlgTgok/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397,https://scrap.kakaocdn.net/dn/NwXjT/hyHrvKZsM3/k21TAse9WzA0Lx6T4Ro0u1/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uFNDE/hyHs3MRmQN/IGegC5vTQIIO4WbERsiLl0/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397,https://scrap.kakaocdn.net/dn/dktvIB/hyHtcQzwfL/QgbSHzU4GJk1mOiSlgTgok/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397,https://scrap.kakaocdn.net/dn/NwXjT/hyHrvKZsM3/k21TAse9WzA0Lx6T4Ro0u1/img.png?width=500&amp;amp;height=397&amp;amp;face=0_0_500_397');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;HttpURLConnection을 이용한 Http 클라이언트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;사용자는 웹브라우저(익스플로러, 크롬, 사파리 등등)를 통해 웹서버에게 필요 URI를 요청하고 응답 값을 받는다. 웹브라우저는 그 응답 값(보통 HTML)을 해석하여 화면을 만들어준다. 이 처럼 웹��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Web Service</category>
      <category>Client</category>
      <category>cxf</category>
      <category>webservice</category>
      <category>WSDL</category>
      <category>wsdl2java</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/28</guid>
      <comments>https://malchooni.tistory.com/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1#entry28comment</comments>
      <pubDate>Wed, 9 Sep 2020 14:28:44 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] OS 계정 추가 및 이메일 송수신</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0</link>
      <description>&lt;figure id=&quot;og_1598421163408&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] postfix smtp 메일 서버 구축&quot; data-og-description=&quot;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] postfix smtp 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1598421175214&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] dovecot pop3 imap 메일 서버 구축&quot; data-og-description=&quot;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] dovecot pop3 imap 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 개인 메일 서버 구축을 완료하고 테스트해볼 시간이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 사용자 계정 추가시 홈 디렉터리에 Maildir을 자동 추가해야 하므로 우선 /&lt;span&gt;etc/skel 경로로 이동하여 Maildir 디렉토리를 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:~#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;mkdir /etc/skel/Maildir&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 이 후 계정 생성 시 계정의 홈 디렉터리에 Maildir 디렉터리가 생성될 것이다.&amp;nbsp; 이 디렉터리는 메일 파일이 저장되는 디렉터리이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/home# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;adduser test&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Adding user `test' ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Adding new group `test' (1001) ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Adding new user `test' (1001) with group `test' ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Creating home directory `/home/test' ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Copying files from `/etc/skel' ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;New password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Retype new password:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;passwd: password updated successfully&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Changing the user information for test&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Enter the new value, or press ENTER for the default&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Full Name []:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Room Number []:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Work Phone []:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Home Phone []:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Other []:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Is the information correct? [Y/n] &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Y&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/home# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ll&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;total 16&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;drwxr-xr-x 1 root&lt;span&gt;&amp;nbsp; &lt;/span&gt;root&lt;span&gt;&amp;nbsp; &lt;/span&gt;4096 Aug 26 14:06 ./&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;drwxr-xr-x 1 root&lt;span&gt;&amp;nbsp; &lt;/span&gt;root&lt;span&gt;&amp;nbsp; &lt;/span&gt;4096 Aug 25 17:29 ../&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;drwxr-xr-x 3 test&lt;span&gt;&amp;nbsp; &lt;/span&gt;test&lt;span&gt;&amp;nbsp; &lt;/span&gt;4096 Aug 26 14:06 &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/home# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;cd test&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/home/test# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ll&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;total 24&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;drwxr-xr-x 3 test test 4096 Aug 26 14:06 ./&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;drwxr-xr-x 1 root root 4096 Aug 26 14:06 ../&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-rw-r--r-- 1 test test&lt;span&gt;&amp;nbsp; &lt;/span&gt;220 Aug 26 14:06 .bash_logout&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-rw-r--r-- 1 test test 3771 Aug 26 14:06 .bashrc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;-rw-r--r-- 1 test test&lt;span&gt;&amp;nbsp; &lt;/span&gt;807 Aug 26 14:06 .profile&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;drwxr-xr-x 2 test test 4096 Aug 26 14:06 Maildir/&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/home/test#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; test란 계정을 생성하였으니 &lt;span style=&quot;color: #333333;&quot;&gt;마이크로소프트 outlook 어플을 이용해&amp;nbsp;&lt;/span&gt;test@yalsooni.name으로 메일을 수발신 해보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_20200826-143411_Outlook.jpg&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNpr5I/btqHesitMQc/2ffsW1yhKJaHw7F71we471/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNpr5I/btqHesitMQc/2ffsW1yhKJaHw7F71we471/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNpr5I/btqHesitMQc/2ffsW1yhKJaHw7F71we471/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNpr5I%2FbtqHesitMQc%2F2ffsW1yhKJaHw7F71we471%2Fimg.jpg&quot; data-filename=&quot;Screenshot_20200826-143411_Outlook.jpg&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; 이메일 주소를 입력한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_20200826-143440_Outlook.jpg&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;159&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIxx7M/btqHjqKuuOy/DCIRd1r1VgCQj8IG0A3mq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIxx7M/btqHjqKuuOy/DCIRd1r1VgCQj8IG0A3mq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIxx7M/btqHjqKuuOy/DCIRd1r1VgCQj8IG0A3mq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIxx7M%2FbtqHjqKuuOy%2FDCIRd1r1VgCQj8IG0A3mq0%2Fimg.jpg&quot; data-filename=&quot;Screenshot_20200826-143440_Outlook.jpg&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;159&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; imap 혹은 pop3 프로토콜을 선택한다. 본인은 pop3 선택.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_20200826-143519_Outlook.jpg&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;766&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9YPCE/btqHb0lK2Dc/j0KWC5VNeChk5xnvTndRY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9YPCE/btqHb0lK2Dc/j0KWC5VNeChk5xnvTndRY0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9YPCE/btqHb0lK2Dc/j0KWC5VNeChk5xnvTndRY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9YPCE%2FbtqHb0lK2Dc%2Fj0KWC5VNeChk5xnvTndRY0%2Fimg.jpg&quot; data-filename=&quot;Screenshot_20200826-143519_Outlook.jpg&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;766&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; 이름과 서버 정보를 입력한다. 암호는 계정 생성시 입력했던 암호를 입력한다.&amp;nbsp; 인증서 설정이 잘못 되었다면 '인증서가 유효하지 않는다'는 메시지가 출력될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_20200826-143604_Outlook.jpg&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;677&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv87ls/btqHbZN5kkv/eQgCUh7XvxRT1zTWDFkpR1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv87ls/btqHbZN5kkv/eQgCUh7XvxRT1zTWDFkpR1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv87ls/btqHbZN5kkv/eQgCUh7XvxRT1zTWDFkpR1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv87ls%2FbtqHbZN5kkv%2FeQgCUh7XvxRT1zTWDFkpR1%2Fimg.jpg&quot; data-filename=&quot;Screenshot_20200826-143604_Outlook.jpg&quot; data-origin-width=&quot;472&quot; data-origin-height=&quot;677&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; 새 메시지를 터치하여 자신의 이메일 주소로 메일을 발송한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_20200826-143631_Outlook.jpg&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO8Tw4/btqHlVDtLLn/wVjDsoznzlcI1Ix34pJQBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO8Tw4/btqHlVDtLLn/wVjDsoznzlcI1Ix34pJQBK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO8Tw4/btqHlVDtLLn/wVjDsoznzlcI1Ix34pJQBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO8Tw4%2FbtqHlVDtLLn%2FwVjDsoznzlcI1Ix34pJQBK%2Fimg.jpg&quot; data-filename=&quot;Screenshot_20200826-143631_Outlook.jpg&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; 받은 편지함을 새로고침하여 자신이 보낸 메일을 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 이렇게 letletsencrypt + postfix + dovecot 활용하여 개인 메일 서버를 구축, 테스트하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 자신만의 개인 서버 및 유니크한 이메일 주소를 가져보는 것은 흥미로운 일이다.&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>Dovecot</category>
      <category>letletsencrypt</category>
      <category>mail</category>
      <category>Maildir</category>
      <category>outlook</category>
      <category>Postfix</category>
      <category>skel</category>
      <category>메일</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/27</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0#entry27comment</comments>
      <pubDate>Wed, 26 Aug 2020 14:55:19 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] dovecot pop3 imap 메일 서버 구축</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95</link>
      <description>&lt;figure id=&quot;og_1598416002100&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] letsencrypt 인증서 발급 받기&quot; data-og-description=&quot;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oRkmG/hyHidoJ6zh/kb2yb1JpVOIKNXe8oLZWd1/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/cVtcJM/hyHgynJMD4/8kipWKDbjACHpkqdSX018K/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/Qssrc/hyHihdB89u/dGB07NamcJbI9zZspzjvLk/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oRkmG/hyHidoJ6zh/kb2yb1JpVOIKNXe8oLZWd1/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/cVtcJM/hyHgynJMD4/8kipWKDbjACHpkqdSX018K/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/Qssrc/hyHihdB89u/dGB07NamcJbI9zZspzjvLk/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1598416034268&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] postfix smtp 메일 서버 구축&quot; data-og-description=&quot;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] postfix smtp 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; Dovecot의 공식 사이트 첫 페이지에 기재된 문장이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &quot;&lt;span style=&quot;color: #000000;&quot;&gt;Dovecot is an&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://dovecot.org/doc/COPYING&quot;&gt;open source&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Imap&quot;&gt;IMAP&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Post_Office_Protocol&quot;&gt;POP3&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, requires no special administration and it uses very little memory.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;Dovecot은 설치와 설정이 매우 간편 하였다.&amp;nbsp; Dovecot은 오픈소스 imap, pop3 이메일 서버이다.&amp;nbsp; Postfix가 발신 서버이면, Dovecot은 수신 서버라고 생각하면 편한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1598408083533&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Dovecot&quot; data-og-description=&quot;DOVECOT The Secure IMAP server Dovecot is an open source&amp;nbsp;IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, r&quot; data-og-host=&quot;www.dovecot.org&quot; data-og-source-url=&quot;https://www.dovecot.org/&quot; data-og-url=&quot;https://www.dovecot.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.dovecot.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dovecot.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Dovecot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;DOVECOT The Secure IMAP server Dovecot is an open source&amp;nbsp;IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, r&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.dovecot.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp; 다음과 같은 명령어로 Dovecot 설치를 진행 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:~# &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;apt-get install dovecot-core dovecot-pop3d dovecot-imapd&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 설치가 완료되면 &lt;span&gt;/etc/dovecot/conf.d 디렉터리로 이동 후 설정 파일들을 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 73px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 54px;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi 10-auth.conf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 19px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.23.53.png&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;104&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcH3h2/btqHelXiGau/K5p1Af9Z5fKiFXxBttH6f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcH3h2/btqHelXiGau/K5p1Af9Z5fKiFXxBttH6f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcH3h2/btqHelXiGau/K5p1Af9Z5fKiFXxBttH6f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcH3h2%2FbtqHelXiGau%2FK5p1Af9Z5fKiFXxBttH6f1%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.23.53.png&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;104&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; Postfix와의 연동을 위해 auth의 login 텍스트를 추가해주어야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi 10-mail.conf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.25.38.png&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;152&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEoLaf/btqHcedmUWQ/11282s0KDn6HeByHkJpOPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEoLaf/btqHcedmUWQ/11282s0KDn6HeByHkJpOPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEoLaf/btqHcedmUWQ/11282s0KDn6HeByHkJpOPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEoLaf%2FbtqHcedmUWQ%2F11282s0KDn6HeByHkJpOPK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.25.38.png&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;152&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; 메일의 위치를 지정하는 설정이다.&amp;nbsp; 각 계정의 Maildir 디렉토리로 설정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi 10-master.conf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.27.21.png&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qbtha/btqHmyBrudc/ZUKWhQKrbYCxdTlZKOyHoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qbtha/btqHmyBrudc/ZUKWhQKrbYCxdTlZKOyHoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qbtha/btqHmyBrudc/ZUKWhQKrbYCxdTlZKOyHoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqbtha%2FbtqHmyBrudc%2FZUKWhQKrbYCxdTlZKOyHoK%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.27.21.png&quot; data-origin-width=&quot;590&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;Postfix와의 연동을 위한 설정이다.&amp;nbsp; postfix 계정의 권한을 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi 10-ssl.conf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-26 오후 2.30.44.png&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;160&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J9IBu/btqHq2u1fhW/hayTFG649qJ6CkmskVeijk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J9IBu/btqHq2u1fhW/hayTFG649qJ6CkmskVeijk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J9IBu/btqHq2u1fhW/hayTFG649qJ6CkmskVeijk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9IBu%2FbtqHq2u1fhW%2FhayTFG649qJ6CkmskVeijk%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-26 오후 2.30.44.png&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;160&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; ssl 사용 여부를 yes로 바꾼 후 letsencrypt에서 발급받은 인증서 파일 경로를 지정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi 20-pop3.conf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.30.10.png&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;377&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8h3s2/btqHgqqsW92/Dl3GWHp9XYQhgwk0qyVJ0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8h3s2/btqHgqqsW92/Dl3GWHp9XYQhgwk0qyVJ0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8h3s2/btqHgqqsW92/Dl3GWHp9XYQhgwk0qyVJ0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8h3s2%2FbtqHgqqsW92%2FDl3GWHp9XYQhgwk0qyVJ0k%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-26 오전 11.30.10.png&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;377&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; 주석을 제거하여 POP3 UIDL 포맷 형식을 지정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 설정 적용을 위해 Dovecot 재시작을 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;/etc/init.d/dovecot stop&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;* Stopping IMAP/POP3 mail server dovecot&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;[ OK ]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;/etc/init.d/dovecot start&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;* Starting IMAP/POP3 mail server dovecot&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;[ OK ]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@mail:/etc/dovecot/conf.d#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 설치가 완료된 메일 서버( letsletsencrypt + postfix + dovecot )를 테스트해보겠다.&lt;/p&gt;
&lt;figure id=&quot;og_1598421912465&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] OS 계정 추가 및 이메일 송수신&quot; data-og-description=&quot;[홈서버] postfix smtp 메일 서버 구축 POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CVtg1/hyHgEBAgr1/HKVfwClqS56KSI32XXp810/img.jpg?width=488&amp;amp;height=738&amp;amp;face=0_0_488_738,https://scrap.kakaocdn.net/dn/btQVRc/hyHhXlG3KZ/JkX31zxTcsrz8ulq8Dgcz1/img.jpg?width=488&amp;amp;height=738&amp;amp;face=0_0_488_738,https://scrap.kakaocdn.net/dn/0N1G3/hyHiiDDzfR/KsL1ooJv4rAXJ5pxUsmos0/img.jpg?width=490&amp;amp;height=766&amp;amp;face=0_0_490_766&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-OS-%EA%B3%84%EC%A0%95-%EC%B6%94%EA%B0%80-%EB%B0%8F-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%86%A1%EC%88%98%EC%8B%A0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CVtg1/hyHgEBAgr1/HKVfwClqS56KSI32XXp810/img.jpg?width=488&amp;amp;height=738&amp;amp;face=0_0_488_738,https://scrap.kakaocdn.net/dn/btQVRc/hyHhXlG3KZ/JkX31zxTcsrz8ulq8Dgcz1/img.jpg?width=488&amp;amp;height=738&amp;amp;face=0_0_488_738,https://scrap.kakaocdn.net/dn/0N1G3/hyHiiDDzfR/KsL1ooJv4rAXJ5pxUsmos0/img.jpg?width=490&amp;amp;height=766&amp;amp;face=0_0_490_766');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] OS 계정 추가 및 이메일 송수신&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[홈서버] postfix smtp 메일 서버 구축 POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>10-auth</category>
      <category>10-mail</category>
      <category>10-master</category>
      <category>10-ssl</category>
      <category>20-pop3</category>
      <category>Dovecot</category>
      <category>imap</category>
      <category>letsletsencrypt</category>
      <category>pop3</category>
      <category>Postfix</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/26</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95#entry26comment</comments>
      <pubDate>Wed, 26 Aug 2020 13:29:44 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] postfix smtp 메일 서버 구축</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다.&amp;nbsp; 앞서 아래 콘텐츠를 먼저 열람하길 바란다.&lt;/p&gt;
&lt;figure id=&quot;og_1597823865790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] letsencrypt 인증서 발급 받기&quot; data-og-description=&quot;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bafoOg/hyHbDulr6C/1jtwmT2v6zfgk83rxb39zK/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/PInrh/hyHdCu5A2q/Ig4ZAW5u3aijHiW9FmQEh0/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/eoX1Vo/hyHdyTLlHS/GkJH3N5PopIlyZ9zjtLky0/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bafoOg/hyHbDulr6C/1jtwmT2v6zfgk83rxb39zK/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/PInrh/hyHdCu5A2q/Ig4ZAW5u3aijHiW9FmQEh0/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276,https://scrap.kakaocdn.net/dn/eoX1Vo/hyHdyTLlHS/GkJH3N5PopIlyZ9zjtLky0/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 메일 서버는 발송하는 부분과 사용자가 수신받는 부분으로 나눌 수 있다.&amp;nbsp; 메일을 발송하는 SMTP 서버 구축을 위해 POSTFIX를 사용하기로 한다.&amp;nbsp; 사이트에서 POSTFIX는 구글의 'Wietse Venema'라는 개발자가 개발했다고 한다.&lt;/p&gt;
&lt;figure id=&quot;og_1653359998128&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The Postfix Home Page&quot; data-og-description=&quot;The Postfix Home Page All programmers are optimists -- Frederick P. Brooks, Jr. First of all, thank you for your interest in the Postfix project. What is Postfix? It is Wietse Venema's mail server that started life at IBM research as an alternative to the &quot; data-og-host=&quot;www.postfix.org&quot; data-og-source-url=&quot;https://www.postfix.org/&quot; data-og-url=&quot;https://www.postfix.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.postfix.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postfix.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The Postfix Home Page&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Postfix Home Page All programmers are optimists -- Frederick P. Brooks, Jr. First of all, thank you for your interest in the Postfix project. What is Postfix? It is Wietse Venema's mail server that started life at IBM research as an alternative to the&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postfix.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;OS는 우분투 20.04 버전에서 작업을 하였다.&amp;nbsp; 설치는 간단한 명령어로 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;gt; apt-get install postfix&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;root@mail:/# &lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;apt-get install postfix&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;.&lt;br /&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Postfix Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;---------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Please select the mail server configuration type that best meets your needs.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;No configuration:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Should be chosen to leave the current configuration unchanged.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Internet site:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Mail is sent and received directly using SMTP.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Internet with smarthost:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Mail is received directly using SMTP or by running a utility such&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;as fetchmail. Outgoing mail is sent using a smarthost.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Satellite system:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;All mail is sent to another machine, called a 'smarthost', for delivery.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Local only:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;The only delivered mail is the mail for local users. There is no network.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;1. No configuration&lt;span&gt;&amp;nbsp; &lt;/span&gt;2. Internet Site&lt;span&gt;&amp;nbsp; &lt;/span&gt;3. Internet with smarthost&lt;span&gt;&amp;nbsp; &lt;/span&gt;4. Satellite system&lt;span&gt;&amp;nbsp; &lt;/span&gt;5. Local only&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;General type of mail configuration: &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;Unpacking postfix (3.4.13-0ubuntu1) ...&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Postfix 설치 시 설치 유형을 물어본다, &lt;span style=&quot;color: #333333;&quot;&gt;No configuration을 선택 후 세부적인 설정은 환경설정 파일을 변경하여 진행할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; Postfix의 설정 파일은 /etc/postfix 디렉터리의 main.cf 와 master.cf로 구성되어있다.&amp;nbsp; 이 파일들에 대한 권한은 루트에게 있어야 한다. 환경 설정 변경 후 적용은 재시작 또는 &quot;postfix reload&quot; 명령어를 활용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 설정에 앞서 &lt;a href=&quot;https://www.postfix.org/postconf.5.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;main.cf 파라미터 정보는 공식 사이트에서&lt;/a&gt; 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 보통 /etc/postfix 디렉터리로 이동 후 프로토타입의 설정 파일을 main.cf로 복사 한다. 그러나 필자는 파라미터 정보를 확인 후 새로운 파일로 생성하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;root@mail:/etc/postfix# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi main.cf&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;# 도메인 이름 (기본값 &amp;gt;&amp;gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;postconf -d | grep mydomain )&lt;br /&gt;&lt;/span&gt;&lt;span&gt;mydomain&lt;/span&gt;&lt;span&gt; = &lt;span style=&quot;color: #006dd7;&quot;&gt;yalsooni.name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# hotname (기본값 &amp;gt;&amp;gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;postconf -d | grep mydomain )&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;myhostname&lt;/span&gt;&lt;span&gt; =&lt;span style=&quot;color: #006dd7;&quot;&gt; mail.yalsooni.name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 배달되는 도메인 목록&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;mydestination&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;$myhostname&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$mydomain&lt;/span&gt;&lt;span&gt;, localhost&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 배달되는 도메인 이름 &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;myorigin&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;$mydomain&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# smtp 접속 인사말&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_banner&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;$myhostname&lt;/span&gt;&lt;span&gt; ESMTP &lt;/span&gt;&lt;span&gt;$mail_name&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 알림 설정 제거&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;biff&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;no&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 메일 크기 제한 (기본값 51200000)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;mailbox_size_limit&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 주소 확장 구분 기호&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;recipient_delimiter&lt;/span&gt;&lt;span&gt; = +&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 사용자 홈 디렉터리 설정 for qmail-style delivery&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;home_mailbox&lt;/span&gt;&lt;span&gt; = Maildir/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 이전 버전과 호환을 위한 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;compatibility_level&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 전달 별칭 데이터베이스 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;alias_maps&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt;:/etc/aliases&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# SASL 인증 활성화&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_auth_enable&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 비표준 지원 여부 (RFC 4954)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;broken_sasl_auth_clients&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# Dovecot SASL 사용&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_type&lt;/span&gt;&lt;span&gt; = dovecot&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# UNIX Domain&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_path&lt;/span&gt;&lt;span&gt; = private/auth&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 인증 메커니즘&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_security_options&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;noanonymous&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_tls_security_options&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;noanonymous&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_tls_auth_only&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;no&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_relay_restrictions&lt;/span&gt;&lt;span&gt; = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 로그인 이름에 도메인 추가 e.g. &quot;john&quot; instead of &quot;john@example.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_sasl_local_domain&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;$mydomain&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# smtp client tls level&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtp_tls_security_level&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;may&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# smtp server tls level&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_tls_security_level&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;may&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# CA인증서&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_tls_CAfile&lt;/span&gt;&lt;span&gt; = &lt;span style=&quot;color: #006dd7;&quot;&gt;/etc/letsencrypt/live/yalsooni.name/fullchain.pem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 공개키&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_tls_cert_file&lt;/span&gt;&lt;span&gt; = &lt;span style=&quot;color: #006dd7;&quot;&gt;/etc/letsencrypt/live/yalsooni.name/cert.pem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;# 개인키&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;smtpd_tls_key_file&lt;/span&gt;&lt;span&gt; = &lt;span style=&quot;color: #006dd7;&quot;&gt;/etc/letsencrypt/live/yalsooni.name/privkey.pem&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위의 설정 파일은 Dovecot (pop3d, imapd)를 고려한 설정이다.&amp;nbsp; 설정 복사 시 도메인, 인증서 등 필요 설정을 자신에 맞게 변경하면 된다.&amp;nbsp; 변경해야 할 부분은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;파란색&lt;/b&gt;&lt;/span&gt;으로 표시했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이후 master.cf 설정 파일을 열어 아래와 같이 주석과 설정 값을 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 19px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;root@mail:/etc/postfix#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;vi master.cf&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;스크린샷 2020-08-24 오후 5.48.24.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG1Cms/btqHhE9LpWo/qZc0s0xghdzlhzK5afjby0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG1Cms/btqHhE9LpWo/qZc0s0xghdzlhzK5afjby0/img.png&quot; data-alt=&quot;master.cf 설정 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG1Cms/btqHhE9LpWo/qZc0s0xghdzlhzK5afjby0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG1Cms%2FbtqHhE9LpWo%2FqZc0s0xghdzlhzK5afjby0%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;693&quot; data-filename=&quot;스크린샷 2020-08-24 오후 5.48.24.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;master.cf 설정 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위의 스크린숏처럼 빨간 네모 부분을 수정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; POSTFIX 재시작에 앞서 /etc/aliases 파일을 빌드한다.&amp;nbsp; 방법은 두 가지다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;run &quot;&lt;/span&gt;&lt;b&gt;postalias /etc/aliases&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot; (or wherever your system stores the mail alias file), or simply run &quot;&lt;/span&gt;&lt;b&gt;newaliases&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot; to build the necessary DBM or DB file.&quot;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &lt;b&gt;postalias /etc/aliases &lt;/b&gt;명령어를 실행하거나 &lt;b&gt;&lt;b&gt;newaliases &lt;/b&gt;&lt;/b&gt;명령어를 실행하면 된다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;root@mail:/etc/postfix#&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;postalias /etc/aliases&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; POSTFIX를 재시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span&gt;root@mail:/etc/postfix# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;/etc/init.d/postfix stop&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;* Stopping Postfix Mail Transport Agent postfix &lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;[ OK ]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;root@mail:/etc/postfix# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;/etc/init.d/postfix start&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;* Starting Postfix Mail Transport Agent postfix &lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;[ OK ]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;root@mail:/etc/postfix#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Dovecot을 활용한 수신 메일 서버를 구축하고 OS 계정을 추가하여 메일 테스트를 진행해 보겠다.&lt;/p&gt;
&lt;figure id=&quot;og_1598416213596&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] dovecot pop3 imap 메일 서버 구축&quot; data-og-description=&quot;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] dovecot pop3 imap 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>홈서버</category>
      <category>mail</category>
      <category>Postfix</category>
      <category>sasl</category>
      <category>smtp</category>
      <category>TLS</category>
      <category>개인 메일</category>
      <category>메일서버</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/25</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95#entry25comment</comments>
      <pubDate>Wed, 26 Aug 2020 10:57:45 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] letsencrypt 인증서 발급 받기</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0</link>
      <description>&lt;p&gt;&amp;nbsp; 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는 쉬운 일이 아니었다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 그러나 letsencrypt 인증기관을 통해 개인도 쉽게 인증된 기관의 인증서를 활용할 수 있게 되었다. letsencrypt 사이트를 방문하면&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;span style=&quot;color: #006dd7;&quot;&gt;Let's Encrypt는&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.abetterinternet.org/&quot;&gt;비영리 인터넷 보안 연구 그룹 (ISRG)&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;에서 가져온 무료, 자동 및 공개 인증 기관입니다.&lt;/span&gt;&quot;라는 문구를 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1597738392830&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Let's Encrypt - 무료 SSL/TLS 인증서&quot; data-og-description=&quot;&quot; data-og-host=&quot;letsencrypt.org&quot; data-og-source-url=&quot;https://letsencrypt.org/ko/&quot; data-og-url=&quot;https://letsencrypt.org/ko/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://letsencrypt.org/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://letsencrypt.org/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Let's Encrypt - 무료 SSL/TLS 인증서&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;letsencrypt.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2020-08-14 오후 2.19.01.png&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;276&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caYhcS/btqGHqS3h0K/gnWCBy5wxmM7KovKqRJSB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caYhcS/btqGHqS3h0K/gnWCBy5wxmM7KovKqRJSB0/img.png&quot; data-alt=&quot;발급 받은 인증서 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caYhcS/btqGHqS3h0K/gnWCBy5wxmM7KovKqRJSB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaYhcS%2FbtqGHqS3h0K%2FgnWCBy5wxmM7KovKqRJSB0%2Fimg.png&quot; data-filename=&quot;스크린샷 2020-08-14 오후 2.19.01.png&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;276&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;발급 받은 인증서 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; 이 인증서를 발급받아 안전한 메일서버 및 웹서버를 구축하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; Certbot을 이용하면 letsencrypt의 인증서를 쉽게 발급받을 수 있다.&amp;nbsp; certbot 사이트에 방문하면 자신이 사용하는 OS와 사용할 소프트웨어를 선택하면 설치 명령어를 얻을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1597385640704&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Certbot&quot; data-og-description=&quot;Different Internet services are distinguished by using different TCP port numbers. Unencrypted HTTP normally uses TCP port 80, while encrypted HTTPS normally uses TCP port 443. To use certbot &amp;ndash;webroot, certbot &amp;ndash;apache, or certbot &amp;ndash;nginx, you should h&quot; data-og-host=&quot;certbot.eff.org&quot; data-og-source-url=&quot;https://certbot.eff.org/&quot; data-og-url=&quot;https://certbot.eff.org/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bA2IIe/hyG9pCF5Fc/XkiEyK1kik0vgkbkjsbwYK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/ry3c6/hyG7VXuB8O/jXdGW6Ne8WuaSwAlxKfdK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://certbot.eff.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://certbot.eff.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bA2IIe/hyG9pCF5Fc/XkiEyK1kik0vgkbkjsbwYK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/ry3c6/hyG7VXuB8O/jXdGW6Ne8WuaSwAlxKfdK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Certbot&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Different Internet services are distinguished by using different TCP port numbers. Unencrypted HTTP normally uses TCP port 80, while encrypted HTTPS normally uses TCP port 443. To use certbot &amp;ndash;webroot, certbot &amp;ndash;apache, or certbot &amp;ndash;nginx, you should h&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;certbot.eff.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp; 본인은 우분투 20.04 기반에 Nginx를 사용할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;gt; apt-get update&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;gt; apt-get install software-properties-common&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;gt; apt-get update&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;gt; apt-get install certbot python3-certbot-nginx&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 설치 완료 후 Certbot 버전 확인을 통해 실행되는지 확인해 본다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;gt; &lt;span&gt;certbot --version&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@mail:/# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;certbot --version&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;certbot 0.31.0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; certonly라는 옵션을 넣어 인증서 파일만 발급받을 목적이다.&amp;nbsp; 주의할 점은 인증서 발급 과정에서 해당 도메인이 내 것이 맞다는 것을 입증하기 위해 인증하는 방법이 여러 가지가 있으나, 본인은 홈서버의 80번 포트를 개방하여 인증할 것이다. certbot 인증서 발급 명령 전에 netstat를 사용하여 80번 포트가 점유 중인지 확인해야 한다.&amp;nbsp; 우분투 서버 OS 설치 시 아파치를 설치하였다면 80번 포트가 점유 중일수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;gt; &lt;/span&gt;certbot certonly --nginx&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;root@mail:/# &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;certbot certonly --nginx&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;/p&gt;
&lt;p&gt;Plugins selected: Authenticator nginx, Installer nginx&lt;/p&gt;
&lt;p&gt;Enter email address (used for urgent renewal and security notices) (Enter 'c' to&lt;/p&gt;
&lt;p&gt;cancel): &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;hello@yalsooni.name&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/p&gt;
&lt;p&gt;Please read the Terms of Service at&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf.&quot;&gt;https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf.&lt;/a&gt; You must&lt;/p&gt;
&lt;p&gt;agree in order to register with the ACME server at&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://acme-v02.api.letsencrypt.org/directory&quot;&gt;https://acme-v02.api.letsencrypt.org/directory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/p&gt;
&lt;p&gt;(A)gree/(C)ancel: &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/p&gt;
&lt;p&gt;Would you be willing to share your email address with the Electronic Frontier&lt;/p&gt;
&lt;p&gt;Foundation, a founding partner of the Let's Encrypt project and the non-profit&lt;/p&gt;
&lt;p&gt;organization that develops Certbot? We'd like to send you email about our work&lt;/p&gt;
&lt;p&gt;encrypting the web, EFF news, campaigns, and ways to support digital freedom.&lt;/p&gt;
&lt;p&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/p&gt;
&lt;p&gt;(Y)es/(N)o: &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;N&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;No names were found in your configuration files. Please enter in your domain&lt;/p&gt;
&lt;p&gt;name(s) (comma and/or space separated)&lt;span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;(Enter&amp;nbsp;'c'&amp;nbsp;to&amp;nbsp;cancel):&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;yalsooni.name,mail.yalsooni.name,www.yalsooni.name&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Obtaining a new certificate&lt;/p&gt;
&lt;p&gt;Performing the following challenges:&lt;/p&gt;
&lt;p&gt;http-01 challenge for mail.yalsooni.name&lt;/p&gt;
&lt;p&gt;http-01 challenge for www.yalsooni.name&lt;/p&gt;
&lt;p&gt;http-01 challenge for yalsooni.name&lt;/p&gt;
&lt;p&gt;nginx: [error] invalid PID number &quot;&quot; in &quot;/run/nginx.pid&quot;&lt;/p&gt;
&lt;p&gt;Waiting for verification...&lt;/p&gt;
&lt;p&gt;Cleaning up challenges&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IMPORTANT NOTES:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- Congratulations! Your certificate and chain have been saved at:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/etc/letsencrypt/live/yalsooni.name/fullchain.pem&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Your key file has been saved at:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;/etc/letsencrypt/live/yalsooni.name/privkey.pem&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Your cert will expire on 2020-11-09. To obtain a new or tweaked&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;version of this certificate in the future, simply run certbot&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;again. To non-interactively renew *all* of your certificates, run&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&quot;certbot renew&quot;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- Your account credentials have been saved in your Certbot&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;configuration directory at /etc/letsencrypt. You should make a&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;secure backup of this folder now. This configuration directory will&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;also contain certificates and private keys obtained by Certbot so&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;making regular backups of this folder is ideal.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- If you like Certbot, please consider supporting our work by:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Donating to ISRG / Let's Encrypt: &lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;https://letsencrypt.org/donate&quot;&gt;https://letsencrypt.org/donate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Donating to EFF:&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;a href=&quot;https://eff.org/donate-le&quot;&gt;https://eff.org/donate-le&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;root@mail:/#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 사용자 이메일 주소와 서비스 약관, 메일링 서비스 선택 여부 후 자신의 도메인명을 지정하면 간편하게 인증서를 발급받을 수 있다.&amp;nbsp; 중요사항을 읽어보면 인증서의 발급 위치 만료 기간 등을 명시해준다.&amp;nbsp; 유효기간은 90일이며 &lt;span style=&quot;color: #333333;&quot;&gt;certbot renew라는 명령어를 통해 만료 30일 전부터 갱신할 수 있다.&amp;nbsp; 또한 &lt;span&gt;/etc/letsencrypt 디렉터리를 복사하면 해당 인증서를 타 서버에서도 사용할 수 있다.&amp;nbsp; 같은 망, 다수의 서버를 운영할 경우 유용하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp; certbot certificates 명령어를 통해 설치된 인증서를 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;gt;&amp;gt; certbot&amp;nbsp;certificates&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;&lt;span&gt;root@sun:~# &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;certbot certificates&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Attempting to parse the version 0.40.0 renewal configuration file found at /etc/letsencrypt/renewal/yalsooni.name.conf with version 0.31.0 of Certbot. This might not work.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Found the following certs:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;Certificate Name: yalsooni.name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;Domains: yalsooni.name mail.yalsooni.name www.yalsooni.name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;Expiry Date: 2020-11-09 13:45:47+00:00 (VALID: 82 days)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;Certificate Path: /etc/letsencrypt/live/yalsooni.name/fullchain.pem&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;Private Key Path: /etc/letsencrypt/live/yalsooni.name/privkey.pem&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;root@sun:~#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 인증서의 만료일과 남은 일수, 경로를 확인할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1598416635574&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] postfix smtp 메일 서버 구축&quot; data-og-description=&quot;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBQigC/hyHif7V1oY/sSN0k548BDc6PqHUuaAq1K/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/cTtbMT/hyHgFf7sQb/1fA3q7V40neXmAybmKAbzK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693,https://scrap.kakaocdn.net/dn/bJ9b1i/hyHindPP5I/TkIDUYLWNpF2sUtlvX8Hy1/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] postfix smtp 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1598416661857&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[홈서버] dovecot pop3 imap 메일 서버 구축&quot; data-og-description=&quot;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-dovecot-pop3-imap-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/73MJa/hyHgNFeNfE/IAW4sLkwPsKtmHaPBtc511/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/bYLJWT/hyHgBY6eMY/ackmm0lNihukjYXKwzAOZ0/img.png?width=546&amp;amp;height=104&amp;amp;face=0_0_546_104,https://scrap.kakaocdn.net/dn/cgg9FM/hyHigTjpRS/SLHuOIHhO4SgP7eCCV3tkK/img.png?width=590&amp;amp;height=494&amp;amp;face=0_0_590_494');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[홈서버] dovecot pop3 imap 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>홈서버</category>
      <category>Certbot</category>
      <category>certificate</category>
      <category>https</category>
      <category>LetsEncrypt</category>
      <category>SSL</category>
      <category>TLS</category>
      <category>발급</category>
      <category>보안</category>
      <category>인증서</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/24</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0#entry24comment</comments>
      <pubDate>Wed, 19 Aug 2020 10:40:38 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 윈도우10 OpenSSH Server, authorized_keys 사용하기</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%9C%88%EB%8F%84%EC%9A%B010-OpenSSH-Server-authorizedkeys-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 증권사 api를 구현할 경우 그 api가 win32에 종속적인 경우가 많다. 그래서 윈도우기반의 서버가 필요하였고 젠킨스에서 자동배포를 위해 ssh, sftp를 키 기반으로 접근하고 싶었다. 물론 젠킨스에 'Publish Over SSH' 플러그인을 사용하면 계정/패스워드로 접근이 가능하다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그러나 목적은 공개키를 authorized_keys 파일에 등록하여 사용하기다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 진행 순서는 다음과 같다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1. 윈도우 10 OpenSSH Server 설치&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;2. sshd 서비스 시작&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;3. key 생성&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;sshd config 수정&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;5. sshd 서비스 재시작&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;1. 윈도우 10 OpenSSH Server 설치&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIImNu/btqDblfeqZ8/hrdIgJqU3Qv3onqQUjjJT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIImNu/btqDblfeqZ8/hrdIgJqU3Qv3onqQUjjJT0/img.png&quot; style=&quot;width:49.6181%&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;638&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIImNu/btqDblfeqZ8/hrdIgJqU3Qv3onqQUjjJT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIImNu%2FbtqDblfeqZ8%2FhrdIgJqU3Qv3onqQUjjJT0%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;806&quot; height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sT868/btqDcx0ljUm/xLN2qotDgmjaPUtNok1ApK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sT868/btqDcx0ljUm/xLN2qotDgmjaPUtNok1ApK/img.png&quot; style=&quot;width:49.2191%&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;632&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sT868/btqDcx0ljUm/xLN2qotDgmjaPUtNok1ApK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsT868%2FbtqDcx0ljUm%2FxLN2qotDgmjaPUtNok1ApK%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;792&quot; height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;윈도우 키 - 설정 - 앱 - 선택적기능 - 기능 추가 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/2ejD2/btqC9Oh9xrm/2uKtyAnJL8I0W60dGyDHh0/img.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ejD2/btqC9Oh9xrm/2uKtyAnJL8I0W60dGyDHh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ejD2/btqC9Oh9xrm/2uKtyAnJL8I0W60dGyDHh0/img.png&quot; data-alt=&quot;OpenSSH 서버를 선택 후 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ejD2/btqC9Oh9xrm/2uKtyAnJL8I0W60dGyDHh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ejD2%2FbtqC9Oh9xrm%2F2uKtyAnJL8I0W60dGyDHh0%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/2ejD2/btqC9Oh9xrm/2uKtyAnJL8I0W60dGyDHh0/img.png&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;630&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;OpenSSH 서버를 선택 후 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 설치를 간단히 끝낸 후 데몬을 실행 하여야 한다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;2. sshd 서비스 시작&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AOy8V/btqDblGjiOn/mw0kbenl2PEnpQQv5YkmC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AOy8V/btqDblGjiOn/mw0kbenl2PEnpQQv5YkmC1/img.png&quot; style=&quot;width:38.2891%&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;640&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AOy8V/btqDblGjiOn/mw0kbenl2PEnpQQv5YkmC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAOy8V%2FbtqDblGjiOn%2Fmw0kbenl2PEnpQQv5YkmC1%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;903&quot; height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VqAI5/btqDbmkT0mS/KYUimyGEwNDOcUBLqsr7F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VqAI5/btqDbmkT0mS/KYUimyGEwNDOcUBLqsr7F1/img.png&quot; style=&quot;width:60.5481%&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;385&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VqAI5/btqDbmkT0mS/KYUimyGEwNDOcUBLqsr7F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVqAI5%2FbtqDbmkT0mS%2FKYUimyGEwNDOcUBLqsr7F1%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;859&quot; height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;검색 - powershell 우클릭 관리자 권한으로 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; PowerShell을 관라자 권한으로 실행 후에 다음 명령어를 이용하여 sshd를 실행한다.&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 100%;&quot;&gt;c:\&amp;gt; Start-Service sshd&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; netstat 명령어로 22번 포트가 정상적으로 리슨 상태 인지 확인 한다.&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 100%;&quot;&gt;c:\&amp;gt; netstat -an | findstr &quot;22&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;3. key 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 클라이언트 특정 계정의 공개키를 이용해 해당 서버에 접근하기 위해서 키생성 작업과 config 파일 수정이 필요하다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 클라이언트 OS는 우분투이다.&amp;nbsp; &lt;/span&gt;먼저 키 생성 작업을 한다.&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;$&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;ssh-keygen&amp;nbsp;-t&amp;nbsp;rsa&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;계정의 홈디렉토리에서 .ssh 디렉토리로 이동 후 키젠을 이용하여 키를 생성한다.&amp;nbsp; .ssh 디렉토리가 없으면 mkdir로 생성한다.&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/w3AVd/btqC9yNifHE/LqMwEu9PHUuU0BCKXz0Te1/img.png&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w3AVd/btqC9yNifHE/LqMwEu9PHUuU0BCKXz0Te1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w3AVd/btqC9yNifHE/LqMwEu9PHUuU0BCKXz0Te1/img.png&quot; data-alt=&quot;키젠을 이용한 키생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w3AVd/btqC9yNifHE/LqMwEu9PHUuU0BCKXz0Te1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw3AVd%2FbtqC9yNifHE%2FLqMwEu9PHUuU0BCKXz0Te1%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/w3AVd/btqC9yNifHE/LqMwEu9PHUuU0BCKXz0Te1/img.png&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;634&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키젠을 이용한 키생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 클라이언트 계정에서 키젠을 사용하면 공개키(id_rsa.pub)와 개인키(id_rsa)가 발급되는데 공개키의 내용을 대상 서버 계정의 .ssh/&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;authorized_keys 파일에 넣어두어야 한다.&amp;nbsp; 여기선 공개키 내용을 cat 명령어로 확인 후 복붙으로 대상 서버에 넣겠다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ssh를 이용하여 대상 서버에 접근한다.&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 19px;&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;$ ssh test@172.30.1.85&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/1QhV9/btqDaWms5rv/hDk2ayx7dQHJYnT3ahnWFK/img.png&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1QhV9/btqDaWms5rv/hDk2ayx7dQHJYnT3ahnWFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1QhV9/btqDaWms5rv/hDk2ayx7dQHJYnT3ahnWFK/img.png&quot; data-alt=&quot;ssh 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1QhV9/btqDaWms5rv/hDk2ayx7dQHJYnT3ahnWFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1QhV9%2FbtqDaWms5rv%2FhDk2ayx7dQHJYnT3ahnWFK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/1QhV9/btqDaWms5rv/hDk2ayx7dQHJYnT3ahnWFK/img.png&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;71&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ssh 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 접속 후 .ssh 디렉토리와 &lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;authorized_keys 파일을 생성해준다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 19px;&quot;&gt;&lt;tbody&gt;&lt;tr style=&quot;height: 19px;&quot;&gt;&lt;td style=&quot;width: 100%; height: 19px;&quot;&gt;c:\Users\test&amp;gt; mkdir .ssh&amp;amp;&amp;amp;cd .ssh&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;c:\Users\test&amp;gt; copy con &lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령 입력 후 id_rsa.pub 의 내용을 붙여 넣은 후 컨트롤 + z 을 눌러 파일을 저장한다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;4.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;sshd config 수정&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; sshd의 기본 참조 파일은 administrators_authorized_keys 이다.&amp;nbsp; 이 설정을 각 계정의 .ssh/authorized_keys&amp;nbsp; 파일을 사용하기 위해선 해당 설정을 주석처리 하여야 한다.&amp;nbsp; 그러나 이 방법은 기본설정에 비해 보안적인 이슈가 있지만, 편리성을 위해 사용하려고 한다.&lt;/span&gt;&lt;/p&gt;&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 100%;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 각 계정의 authorized_keys 사용시 이슈&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://github.com/PowerShell/Win32-OpenSSH/issues/1324&quot;&gt;https://github.com/PowerShell/Win32-OpenSSH/issues/1324&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xi7j9/btqDahdlOhZ/P6ivTvCKflFaHHrTSgapo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xi7j9/btqDahdlOhZ/P6ivTvCKflFaHHrTSgapo0/img.png&quot; style=&quot;width:44.3987%&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;638&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xi7j9/btqDahdlOhZ/P6ivTvCKflFaHHrTSgapo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxi7j9%2FbtqDahdlOhZ%2FP6ivTvCKflFaHHrTSgapo0%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;898&quot; height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b005cy/btqC8H43Yqs/tD6mZAuFigQkfFFIrkkHRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b005cy/btqC8H43Yqs/tD6mZAuFigQkfFFIrkkHRk/img.png&quot; style=&quot;width:54.4385%&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;558&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b005cy/btqC8H43Yqs/tD6mZAuFigQkfFFIrkkHRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb005cy%2FbtqC8H43Yqs%2FtD6mZAuFigQkfFFIrkkHRk%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;963&quot; height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;메모장을 관리자 권한으로 실행 후 c:\ProgramData\ssh 디렉토리로 열기 * 모든파일로 보기 *&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cO1ZM6/btqDahxC85B/L3FYsp1N0CyV3vP7bTKisK/img.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO1ZM6/btqDahxC85B/L3FYsp1N0CyV3vP7bTKisK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO1ZM6/btqDahxC85B/L3FYsp1N0CyV3vP7bTKisK/img.png&quot; data-alt=&quot;해당 부분을 주석 처리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO1ZM6/btqDahxC85B/L3FYsp1N0CyV3vP7bTKisK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO1ZM6%2FbtqDahxC85B%2FL3FYsp1N0CyV3vP7bTKisK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/cO1ZM6/btqDahxC85B/L3FYsp1N0CyV3vP7bTKisK/img.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;753&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 부분을 주석 처리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Match Group administrators&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 두 줄 주석처리 후 저장한다.&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;5. sshd 서비스 재시작&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; config 파일 적용을 위해 ssh 데몬을 정지 후 다시 시작한다.&lt;/span&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bu2IdQ/btqC9yNkhRU/CGoYN3tEIpC7ooGwkknjcK/img.png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu2IdQ/btqC9yNkhRU/CGoYN3tEIpC7ooGwkknjcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu2IdQ/btqC9yNkhRU/CGoYN3tEIpC7ooGwkknjcK/img.png&quot; data-alt=&quot;netstat 명령어로 포트 리슨 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu2IdQ/btqC9yNkhRU/CGoYN3tEIpC7ooGwkknjcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu2IdQ%2FbtqC9yNkhRU%2FCGoYN3tEIpC7ooGwkknjcK%2Fimg.png&quot; data-image-src=&quot;https://k.kakaocdn.net/dn/bu2IdQ/btqC9yNkhRU/CGoYN3tEIpC7ooGwkknjcK/img.png&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;418&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;netstat 명령어로 포트 리슨 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 후 클라이언트 계정에서 ssh로 해당 서버의 계정으로 접근시 더 이상 패스워드를 묻지 않는다.&lt;/p&gt;</description>
      <category>홈서버</category>
      <category>authorized_keys</category>
      <category>openssh</category>
      <category>SSH</category>
      <category>sshd_config</category>
      <category>비밀번호 없이 로그인</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/23</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EC%9C%88%EB%8F%84%EC%9A%B010-OpenSSH-Server-authorizedkeys-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry23comment</comments>
      <pubDate>Fri, 3 Apr 2020 18:05:56 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, 유틸 클래스</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%9C%A0%ED%8B%B8-%ED%81%B4%EB%9E%98%EC%8A%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204270181&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; Log 유틸은 콘솔에 현재시각과 스레드이름을 함께 출력하는 클래스이다. EventUtil 클래스 get_event 메소드는 xing 에서 제공하는 res파일을 기반으로 이벤트 객체를 생성해주는 메소드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582354377888&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import datetime
import threading
import win32com
 
 
class Log:
 
    @staticmethod
    def write(msg):
        print(&quot;[&quot;+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+&quot;][&quot;+threading.currentThread().getName()+&quot;] &quot;+msg)
 
 
class EventUtil:
 
    @staticmethod
    def get_event(service_id, event_handler_class):
        event = win32com.client.DispatchWithEvents(&quot;XA_DataSet.XAReal&quot;, event_handler_class)
        event.ResFileName = &quot;C:/eBEST/xingAPI/Res/&quot; + service_id + &quot;.res&quot;
        event_handler_class.event = event
        return event&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347672406&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>EBEST-XING</category>
      <category>python</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/20</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%9C%A0%ED%8B%B8-%ED%81%B4%EB%9E%98%EC%8A%A4#entry20comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:53:14 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204329490&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 지금까지 구현된 모듈을 테스트해보겠다. ConnectionManager, NWS, S3_ 스레드들을 초기화하고 명령어를 넣는 작업을 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582354091297&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
 
from name_yalsooni.crawler_py.ebest.manager.connection import ConnectionManagerFactory
from name_yalsooni.crawler_py.ebest.realtime.query.nws import NWS
from name_yalsooni.crawler_py.ebest.realtime.query.s3 import S3
from name_yalsooni.crawler_py.ebest.util import Log
 
 
class RunnerRealTime:
 
    cm = None
 
    def execute(self):
        Log.write(&quot;Process Start Up..&quot;)
        Log.write(&quot;-- ConnectionManager Start --&quot;)
        self.cm = ConnectionManagerFactory.get_instance()
        self.cm.start()
 
        Log.write(&quot;-- [NWS] NEWS Start --&quot;)
        nws_event = NWS()
        nws_event.start()
 
        Log.write(&quot;-- [S3_] KOSPI Start --&quot;)
        s3_event = S3()
        s3_event.start()
 
        Log.write(&quot;-- Push Command --&quot;)
        # 뉴스 요청
        nws_command = dict()
        nws_command[nws_event.CM_NWCODE] = &quot;NWS001&quot;
        nws_event.call(nws_command)
 
        # GS건설 체결정보 요청
        s3_command = dict()
        s3_command[s3_event.CM_SHCODE] = &quot;006360&quot;
        s3_event.call(s3_command)
 
        # 10초 지연 후 APPEND 명령어
        time.sleep(10)
 
        # 현대건설 체결정보 요청
        s3_command[s3_event.CM_SHCODE] = &quot;000720&quot;
        s3_event.append_call(s3_command)
 
        while True:
            time.sleep(5)
 
 
def main():
    RunnerRealTime().execute()
 
 
if __name__ == &quot;__main__&quot;:
    main()&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;&amp;nbsp; - 실행 동영상&lt;/b&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=ShMS518Lfj4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/F2lrs/hyE2uzw5FR/kwKWQkGBTzktGniF6aGSh1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;undefined&quot; data-video-origin-height=&quot;undefined&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ShMS518Lfj4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure id=&quot;og_1616347648374&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>API</category>
      <category>EBEST</category>
      <category>NWS</category>
      <category>S3_</category>
      <category>xing</category>
      <category>실행화면</category>
      <category>테스트</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/19</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8#entry19comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:48:25 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204351271&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;S3_ 쿼리는 요청하는 종목코드에 대해 체결 내역 정보를 실시간으로 수신받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582353936312&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from name_yalsooni.crawler_py.ebest.realtime.queryjob import EventHandler
from name_yalsooni.crawler_py.ebest.realtime.queryjob import QueryThreadJob
from name_yalsooni.crawler_py.ebest.util import Log, EventUtil
 
 
class S3EventHandler(EventHandler):
    def OnReceiveRealData(self, code):
        shcode = self.event.GetFieldData(&quot;OutBlock&quot;, &quot;shcode&quot;)
        price = self.event.GetFieldData(&quot;OutBlock&quot;, &quot;price&quot;)
        Log.write(code + &quot; : &quot; + shcode + &quot; - &quot; + price)
 
 
class S3(QueryThreadJob):
    _OP_APPEND = &quot;APPEND&quot;
    CM_SHCODE = &quot;SHCODE&quot;
 
    def __init__(self):
        QueryThreadJob.__init__(self, &quot;RT_S3_KOSPI&quot;, 0.1)
 
    def _operation_init(self):
        self._operation_dict[self._OP_APPEND] = self._operation_append
 
    def _operation_call(self, command):
        self._event = EventUtil.get_event(&quot;S3_&quot;, S3EventHandler)
        self._event.SetFieldData(&quot;InBlock&quot;, &quot;shcode&quot;, command[self.CM_SHCODE])
        self._event.AdviseRealData()
        Log.write(&quot;Request done : &quot; + command[self.CM_SHCODE])
 
    def _operation_append(self, command):
        self._event.SetFieldData(&quot;InBlock&quot;, &quot;shcode&quot;, command[self.CM_SHCODE])
        self._event.AdviseRealData()
        Log.write(&quot;Request done : &quot; + command[self.CM_SHCODE])
 
    # push append command
    def append_call(self, command):
        command[self.CM_COMMAND] = self._OP_APPEND
        self._push_command(command)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;7&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;OnReceiveRealData&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;이베스트&amp;nbsp;서버로부터&amp;nbsp;응답이&amp;nbsp;수신되면&amp;nbsp;해당&amp;nbsp;메소드가&amp;nbsp;호출된다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;등록된&amp;nbsp;종목의&amp;nbsp;코드와&amp;nbsp;가격을&amp;nbsp;출력한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;18&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;생성자에서&amp;nbsp;스레드이름과&amp;nbsp;큐&amp;nbsp;타임아웃을&amp;nbsp;파라미터로&amp;nbsp;넘긴다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;20&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;_operation_init &lt;br /&gt;&amp;nbsp;&amp;nbsp;뉴스&amp;nbsp;요청과&amp;nbsp;달리&amp;nbsp;코스피체결&amp;nbsp;요청은&amp;nbsp;기본&amp;nbsp;오퍼레이션에&amp;nbsp;종목을&amp;nbsp;추가할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;'APPEND'&amp;nbsp;오퍼레이션이&amp;nbsp;하나&amp;nbsp;더있다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;기본&amp;nbsp;오퍼레이션인&amp;nbsp;'CALL'은&amp;nbsp;상위클래스인&amp;nbsp;QueryThreadJob에서&amp;nbsp;등록해주기&amp;nbsp;때문에&amp;nbsp;등록&amp;nbsp;과정은&amp;nbsp;필요없다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;하지만&amp;nbsp;'APPEND'오퍼레이션은&amp;nbsp;_operation_init&amp;nbsp;메소드에서&amp;nbsp;_operation_dict&amp;nbsp;딕셔너리에&amp;nbsp;등록&amp;nbsp;해준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;23&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;_operation_call &lt;br /&gt;&amp;nbsp;&amp;nbsp;코스피체결&amp;nbsp;요청에&amp;nbsp;필요한&amp;nbsp;파라미터를&amp;nbsp;설정하고&amp;nbsp;AdviseRealData&amp;nbsp;메소드를&amp;nbsp;통해&amp;nbsp;해당&amp;nbsp;쿼리를&amp;nbsp;요청한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;이&amp;nbsp;메소드에서&amp;nbsp;요청할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;이벤트&amp;nbsp;객체를&amp;nbsp;생성하기&amp;nbsp;때문에&amp;nbsp;최초의&amp;nbsp;호출은&amp;nbsp;이&amp;nbsp;메소드부터&amp;nbsp;호출되어야&amp;nbsp;한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;23&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;_operation_append &lt;br /&gt;&amp;nbsp;&amp;nbsp;코스피체결 요청은 다수의 종목을 등록할 수 있다. 오퍼레이션 'CALL'을 통해 요청된 상태에서 'APPEND'를 통해 다수의 종목을 등록한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347621885&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>API</category>
      <category>EBEST</category>
      <category>S3_</category>
      <category>xing</category>
      <category>코스프체결정보</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/18</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7#entry18comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:46:32 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204381749&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;NWS 쿼리는 요청 시 종료 전까지 최신 뉴스에 대한 정보를 수신받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582353850474&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from name_yalsooni.crawler_py.ebest.realtime.queryjob import EventHandler
from name_yalsooni.crawler_py.ebest.realtime.queryjob import QueryThreadJob
from name_yalsooni.crawler_py.ebest.util import Log, EventUtil
 
 
class NWSEventHandler(EventHandler):
    def OnReceiveRealData(self, code):
        title = self.event.GetFieldData(&quot;OutBlock&quot;, &quot;title&quot;)
        Log.write(code + &quot; : &quot; + title)
 
 
class NWS(QueryThreadJob):
    CM_NWCODE = &quot;NWCODE&quot;
 
    def __init__(self):
        QueryThreadJob.__init__(self, &quot;RT_NWS&quot;, 0.5)
 
    def _operation_init(self):
        pass
 
    def _operation_call(self, command):
        self._event = EventUtil.get_event(&quot;NWS&quot;, NWSEventHandler)
        self._event.SetFieldData(&quot;InBlock&quot;, &quot;nwcode&quot;, command[self.CM_NWCODE])
        self._event.AdviseRealData()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;16&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;생성자에서&amp;nbsp;스레드이름과&amp;nbsp;큐&amp;nbsp;타임아웃을&amp;nbsp;파라미터로&amp;nbsp;넘긴다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;19&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;상위&amp;nbsp;클래스인&amp;nbsp;QueryThreadJob에서&amp;nbsp;operation&amp;nbsp;딕셔너리에&amp;nbsp;기본&amp;nbsp;오퍼레이션인&amp;nbsp;'CALL'은&amp;nbsp;등록해&amp;nbsp;줬다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;뉴스&amp;nbsp;요청의&amp;nbsp;오퍼레이션은&amp;nbsp;'CALL'&amp;nbsp;하나&amp;nbsp;밖에&amp;nbsp;없으므로&amp;nbsp;해당&amp;nbsp;메소드는&amp;nbsp;등록&amp;nbsp;해줄께&amp;nbsp;없다,&amp;nbsp;pass한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;21&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;_operation_call &lt;br /&gt;&amp;nbsp;&amp;nbsp;_operation_call&amp;nbsp;메소드에선&amp;nbsp;뉴스의&amp;nbsp;알맞은&amp;nbsp;요청&amp;nbsp;파라미터를&amp;nbsp;설정하고&amp;nbsp;AdviseRealData()&amp;nbsp;메소드를&amp;nbsp;통해&amp;nbsp;요청한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;이벤트&amp;nbsp;객체&amp;nbsp;생성&amp;nbsp;시&amp;nbsp;등록된&amp;nbsp;NWSEventHandler의&amp;nbsp;OnReceiveRealData메소드의&amp;nbsp;의해&amp;nbsp;응답이&amp;nbsp;수신된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;figure id=&quot;og_1616347598728&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>NWS</category>
      <category>XING API</category>
      <category>실시간조회</category>
      <category>이베스트</category>
      <category>증권사API</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/17</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6#entry17comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:44:58 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204412492&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; QueryThreadJob은 모든 요청 쿼리들의 상위 클래스이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 공통부분을 상위 클래스에서 정의, 구현함으로써 불필요한 중복 코드를 쉽게 제거할 수 있다. 또한 요청 쿼리에 대한 표준을 구축함으로써 생산성이 향상될 것이다. 이 클래스를 상속받는 요청 쿼리들은 각각의 스레드로 별도 동작한다. 뉴스정보와 코스피 체결 클래스를 구현할 것인데 이 클래스를 상속받아 구현하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582353213782&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from abc import *
 
from name_yalsooni.crawler_py.ebest.definition import ThreadJob
from name_yalsooni.crawler_py.ebest.manager.connection import ConnectionManagerFactory
from name_yalsooni.crawler_py.ebest.util import Log
from name_yalsooni.crawler_py.ebest.xasession import XASessionEventHandler
 
 
class EventHandler:
    event = None
 
 
class QueryThreadJob(ThreadJob):
    __metaclass__ = ABCMeta
 
    _OP_CALL = &quot;CALL&quot;
 
    _event = None
    _thread_name = None
 
    _operation_dict = None
    _connection_manager = None
 
    @abstractmethod
    def _operation_init(self):
        pass
 
    @abstractmethod
    def _operation_call(self):
        pass
 
    def __init__(self, thread_name, command_queue_timeout):
        ThreadJob.__init__(self, thread_name, command_queue_timeout)
        self._thread_name = thread_name
        self._operation_dict = dict()
 
    def _init(self):
        Log.write(self._thread_name + &quot; init..&quot;)
        self._connection_manager = ConnectionManagerFactory.get_instance()
 
        #기본 오퍼레이션 등록
        self._operation_dict[self._OP_CALL] = self._operation_call
        self._operation_init()
 
    def _execute(self, command):
        if not XASessionEventHandler.login_flag:
            self._connection_manager.login_call()
 
        try:
            operation = self._operation_dict[command[self.CM_COMMAND]]
            operation(command)
        except KeyError:
            Log.write(&quot;Not found operation key : &quot; + command[self.CM_COMMAND])
 
    def _shutdown(self):
        self._event.UnadviseRealData()
 
    # push call command
    def call(self, command):
        command[self.CM_COMMAND] = self._OP_CALL
        self._push_command(command)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;25,&amp;nbsp;29&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;_operation_init,&amp;nbsp;_operation_call&amp;nbsp;추상화&amp;nbsp;메소드를&amp;nbsp;선언한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;42&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;_operation_dict&amp;nbsp;딕셔너리에&amp;nbsp;오퍼레이션&amp;nbsp;객체를&amp;nbsp;보관한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;50&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;_operation_dict에서&amp;nbsp;명령어로&amp;nbsp;오퍼레이션&amp;nbsp;객체를&amp;nbsp;꺼낸다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;오퍼레이션&amp;nbsp;객체가&amp;nbsp;존재&amp;nbsp;하지&amp;nbsp;않으면&amp;nbsp;예외가&amp;nbsp;발생된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이제 QueryThreadJob클래스를 상속받아 구현하는 뉴스정보와 코스피 체결정보 클래스를 구현해보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347573985&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>EBEST</category>
      <category>QUERYTHREADJOB</category>
      <category>xing</category>
      <category>멀티스레드</category>
      <category>스레드</category>
      <category>태그API</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/16</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5#entry16comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:34:18 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204439244&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; ConnectionManager 구현에 앞서 이베스트와 커넥션을 담당하는 XAConnector부터 구현하도록 하겠다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; XAConnector클래스는 이베스트에서 제공하는 API 중 커넥션과 로그인 관련 요청과 응답을 구현한 것이다. 프로세스가 기동 되면 ConnectionManager 스레드가 시작되며 XAConnector 참조하여 연결을 관리하는 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582353043189&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pythoncom
import win32com.client as win_client
 
from name_yalsooni.crawler_py.ebest.util import Log
 
 
class XASessionEventHandler:
    login_state = 0
    connect_state = 0
    login_flag = False
 
    def OnLogin(self, code, msg):
        if code == &quot;0000&quot;:
            Log.write(&quot;login success&quot;)
            Log.write(str(msg))
            XASessionEventHandler.login_flag = True
            XASessionEventHandler.login_state = 1
            XASessionEventHandler.connect_state = 1
        else:
            Log.write(&quot;login fail&quot;)
            Log.write(str(msg))
            XASessionEventHandler.login_state = 2
 
    def OnDisconnect(self):
        XASessionEventHandler.login_flag = False
        XASessionEventHandler.login_state = 0
        XASessionEventHandler.connect_state = 0
        Log.write(&quot;Disconnect Server&quot;)
 
 
class XAConnector:
    __ebest_address = &quot;hts.ebestsec.co.kr&quot;
    __ebest_port = 20001
    __ebest_id = &quot;이베스트 아이디&quot;
    __ebest_pw = &quot;이베스트 패스워드&quot;
    __ebest_cpwd = &quot;공인인증서 패스워드&quot;
 
    __xa_session = None
 
    def connect_server(self):
        if self.__xa_session is None:
            self.__xa_session = win_client.DispatchWithEvents(&quot;XA_Session.XASession&quot;, XASessionEventHandler)
        return self.__xa_session.ConnectServer(self.__ebest_address, self.__ebest_port)
 
    def is_connected(self):
        if self.__xa_session is None:
            result = False
        else:
            result = self.__xa_session.IsConnected()
        return result
 
    def login(self):
        if not XASessionEventHandler.login_flag:
            self.__xa_session.Login(self.__ebest_id, self.__ebest_pw, self.__ebest_cpwd, 0, 0)
            while XASessionEventHandler.login_state == 0:
                pythoncom.PumpWaitingMessages()
        return XASessionEventHandler.login_flag
 
    def get_account_list(self):
        account_list = []
        account_ctn = self.__xa_session.GetAccountListCount()
 
        for i in range(account_ctn):
            account_num = self.__xa_session.GetAccountList(i)
            account_list.append(account_num)
        return account_list
 
    def disconnect_server(self):
        if XASessionEventHandler.login_flag:
            self.__xa_session.DisconnectServer()
            XASessionEventHandler.login_state = 0
            XASessionEventHandler.connect_state = 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;12&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;OnLogin&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;이벤트&amp;nbsp;핸들러의&amp;nbsp;OnLogin&amp;nbsp;메소드는&amp;nbsp;로그인&amp;nbsp;요청에&amp;nbsp;대한&amp;nbsp;응답&amp;nbsp;이벤트이다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;code에&amp;nbsp;대한&amp;nbsp;값이&amp;nbsp;'0000'이면&amp;nbsp;로그인이&amp;nbsp;정상적으로&amp;nbsp;처리&amp;nbsp;됐다는&amp;nbsp;의미다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;24&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;OnDisconnect&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;이벤트&amp;nbsp;핸들러의&amp;nbsp;OnDisconnect&amp;nbsp;메소드는&amp;nbsp;연결해제에&amp;nbsp;대한&amp;nbsp;응답&amp;nbsp;이벤트이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;40&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;connect_server&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;XA_Session.XASession&amp;nbsp;객체를&amp;nbsp;얻어와&amp;nbsp;이베스트서버에&amp;nbsp;커넥션을&amp;nbsp;연결한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;연결이&amp;nbsp;완료되면&amp;nbsp;True값을&amp;nbsp;반환한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;- 44 Line : is_connected 메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;현재&amp;nbsp;커넥션이&amp;nbsp;유효한&amp;nbsp;상태인지&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;메소드이다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;정상적인&amp;nbsp;커넥션이라면&amp;nbsp;True&amp;nbsp;값을&amp;nbsp;반환한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;각&amp;nbsp;쿼리들이&amp;nbsp;요청&amp;nbsp;전&amp;nbsp;해당커넥션이&amp;nbsp;유효한지&amp;nbsp;물을&amp;nbsp;때&amp;nbsp;사용된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;51&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;login&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;정상적으로&amp;nbsp;연결된&amp;nbsp;후&amp;nbsp;로그인을&amp;nbsp;요청할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;메소드이다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;파라미터&amp;nbsp;값으로&amp;nbsp;아이디,&amp;nbsp;패스워드,&amp;nbsp;공인인증서&amp;nbsp;패스워드가&amp;nbsp;입력되며&amp;nbsp;로그인에&amp;nbsp;대한&amp;nbsp;결과는&amp;nbsp;이벤트&amp;nbsp;핸들러의&amp;nbsp;OnLogin&amp;nbsp;메소드가&amp;nbsp;호출된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;58&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;get_account_list&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;로그인이&amp;nbsp;완료되면&amp;nbsp;자신의&amp;nbsp;계좌목록을&amp;nbsp;얻어&amp;nbsp;올&amp;nbsp;수&amp;nbsp;있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;67&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;disconnect_server&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;이베스트&amp;nbsp;서버와의&amp;nbsp;연결을&amp;nbsp;끊는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; XAConnector클래스를 참조하는 ConnectionManager클래스를 구현해보도록 하겠다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; ConnectionManager의 객체는 하나만 두기 위해 ConnectionManagerFactory클래스에서 싱글톤으로 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582353115021&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import threading
import time
 
from name_yalsooni.crawler_py.ebest.xasession import XAConnector
from name_yalsooni.crawler_py.ebest.xasession import XASessionEventHandler
from name_yalsooni.crawler_py.ebest.util import Log
from name_yalsooni.crawler_py.ebest.definition import ThreadJob
 
 
# 연결 관리
class ConnectionManager(ThreadJob):
 
    _CM_LOGIN = &quot;LOGIN&quot;
    _CM_LOGOUT = &quot;LOGOUT&quot;
 
    _xa_connector = None
    _login_result = None
 
    def __init__(self):
        ThreadJob.__init__(self, &quot;ConnectionManager&quot;, 10)
        self.lock = threading.Lock()
 
    # 스레드 초기화
    def _init(self):
        Log.write(&quot;ConnectionManager init..&quot;)
        self._xa_connector = XAConnector()
 
    # 스레드 수행
    def _execute(self, command):
        with self.lock:
            if command[self.CM_COMMAND] == self._CM_LOGIN:
                self._xa_connect()
            elif command[self.CM_COMMAND] == self._CM_LOGOUT:
                self._xa_disconnect()
 
    # 스레드 종료
    def _shutdown(self):
        pass
 
    # 연결 하기
    def _xa_connect(self):
        if self._xa_connector.is_connected() is False:
            self._xa_connector.connect_server()
            self._login_result = self._xa_connector.login()
            # if self.__login_result:
                # account_list = self.__xa_connector.get_account_list()
                # for account in account_list:
                #     Log.write(&quot;account number : &quot; + account)
 
        return self._login_result
 
    # 연결 해제
    def _xa_disconnect(self):
        self._xa_connector.disconnect_server()
 
    # 연결 응답 대기
    def _waiting_login(self):
        while XASessionEventHandler.login_state == 0:
            time.sleep(0.2)
 
    # 연결 해제 응답 대기
    def _waiting_logout(self):
        while XASessionEventHandler.login_state != 0:
            time.sleep(0.2)
 
    # 연결 요청
    def login_call(self):
        command = dict()
        command[self.CM_COMMAND] = self._CM_LOGIN
        self._push_command(command)
        self._waiting_login()
 
    # 연결 해제 요청
    def disconnect_call(self):
        command = dict()
        command[self.CM_COMMAND] = self._CM_LOGOUT
        self._push_command(command)
        self._waiting_logout()
 
 
class ConnectionManagerFactory:
 
    _connection_manager = ConnectionManager()
 
    @staticmethod
    def get_instance():
        return ConnectionManagerFactory._connection_manager&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;19&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;__init__ &lt;br /&gt;&amp;nbsp;&amp;nbsp;앞서&amp;nbsp;구현된&amp;nbsp;ThreadJob&amp;nbsp;생성자를&amp;nbsp;확인하면,파라미터&amp;nbsp;값으로&amp;nbsp;스레드&amp;nbsp;이름과&amp;nbsp;&lt;a href=&quot;Queue.get의&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Queue.get의&lt;/a&gt;&amp;nbsp;타임아웃&amp;nbsp;값을&amp;nbsp;넣어줘야&amp;nbsp;한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;threading.Lock()&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;threading.Lock()&lt;/a&gt;&amp;nbsp;객체를&amp;nbsp;생성하는&amp;nbsp;이유는&amp;nbsp;로그인과&amp;nbsp;로그아웃&amp;nbsp;메소드의&amp;nbsp;순차처리를&amp;nbsp;위해서다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;26&amp;nbsp;Line &lt;br /&gt;&amp;nbsp;&amp;nbsp;맨&amp;nbsp;위에서&amp;nbsp;구현된&amp;nbsp;XAConnector의&amp;nbsp;객체를&amp;nbsp;스레드&amp;nbsp;초기화&amp;nbsp;구문에서&amp;nbsp;생성한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;67&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;login_call&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;로그인&amp;nbsp;명령어를&amp;nbsp;큐에&amp;nbsp;삽입&amp;nbsp;후&amp;nbsp;_waiting_login&amp;nbsp;메소드를&amp;nbsp;통해&amp;nbsp;이벤트리스너가&amp;nbsp;수신받기&amp;nbsp;전까지&amp;nbsp;기다린다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;74&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;disconnect_call&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;로그아웃&amp;nbsp;명령어를&amp;nbsp;큐에&amp;nbsp;삽입&amp;nbsp;후&amp;nbsp;_waiting_logout&amp;nbsp;메소드를&amp;nbsp;통해&amp;nbsp;이벤트리스너가&amp;nbsp;수신받기&amp;nbsp;전까지&amp;nbsp;기다린다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;86&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;get_instance&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;ConnectionManager&amp;nbsp;객체를&amp;nbsp;싱글톤으로&amp;nbsp;사용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 구현된 ConnectionManager는 모든 정보조회 요청의 상위 클래스인 QueryThreadJob에서 참조한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이제 QueryThreadJob과 이것을 상속받아 구현하는 요청 클래스들을 구현해보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347549645&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>Connection</category>
      <category>EBSETAPI</category>
      <category>login</category>
      <category>Thread</category>
      <category>xing</category>
      <category>멀티스레드</category>
      <category>이베스트서버연결</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/15</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4#entry15comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:32:59 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204463477&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347512929&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 2번째 글에서 언급했던 클래스 다이어그램을 기반으로 중추적 역할인 ThreadJob을 구현한 소스는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582352885335&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import threading
import queue
import pythoncom
 
from name_yalsooni.crawler_py.ebest.util import Log
from abc import *
 
 
# 병행처리기 - 추상화
class ThreadJob(threading.Thread):
    __metaclass__ = ABCMeta
 
    CM_COMMAND = &quot;COMMAND&quot;
    CM_SHUTDOWN = &quot;SHUTDOWN&quot;
 
    # 초기화
    @abstractmethod
    def _init(self):
        pass
 
    # 실행
    @abstractmethod
    def _execute(self, command):
        pass
 
    # 셧다운
    @abstractmethod
    def _shutdown(self):
        pass
 
    # 생성자
    def __init__(self, thread_name, command_queue_timeout):
        threading.Thread.__init__(self, name=thread_name)
        self.running = True
        self.commandQueue = queue.Queue()
        self.command_queue_timeout = command_queue_timeout
 
    # Thread start..
    def run(self):
        pythoncom.CoInitialize()
        self._init()
        self._waiting_queue()
 
    # 셧다운 명령어 요청
    def shutdown_call(self):
        self._push_command(self.CM_SHUTDOWN)
 
    # 명령어 대기
    def _waiting_queue(self):
        while self.running:
            try:
                command = self.commandQueue.get(True, self.command_queue_timeout)
            except queue.Empty as em:
                pythoncom.PumpWaitingMessages()
                continue
 
            Log.write(&quot;Request Command : &quot; + command[self.CM_COMMAND])
            if command[self.CM_COMMAND] == self.CM_SHUTDOWN:
                self._shutdown()
                pythoncom.CoUninitialize()
            else:
                try:
                    self._execute(command)
                except Exception as ex:
                    Log.write(&quot;*EXCEPTION* EXECUTE COMMAND : &quot; + str(ex))
 
    # 명령어를 큐에 삽입
    def _push_command(self, command):
        self.commandQueue.put(command)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 위의 소스코드 중 주요 부분만 살펴보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;32&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;객체생성시&amp;nbsp;큐객체를&amp;nbsp;생성한다.&amp;nbsp;이&amp;nbsp;큐는&amp;nbsp;명령어를&amp;nbsp;보관하는데&amp;nbsp;사용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;39&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;http://Thread.run&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Thread.run&lt;/a&gt;&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;새로운&amp;nbsp;스레드&amp;nbsp;생성시&amp;nbsp;pythoncom.CoInitialize()&amp;nbsp;메소드를&amp;nbsp;필수로&amp;nbsp;호출해야한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;_init&amp;nbsp;메소드는&amp;nbsp;상속받는&amp;nbsp;자식&amp;nbsp;클래스에게&amp;nbsp;구현을&amp;nbsp;위임한다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;해당&amp;nbsp;메소드를&amp;nbsp;호출&amp;nbsp;후&amp;nbsp;_waiting_queue&amp;nbsp;메소드를&amp;nbsp;호출함으로&amp;nbsp;명령어&amp;nbsp;대기에&amp;nbsp;들어간다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;52&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;queue객체에서&amp;nbsp;get메소드를&amp;nbsp;사용하여&amp;nbsp;명령어를&amp;nbsp;획득한다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;이&amp;nbsp;메소드는&amp;nbsp;블록이&amp;nbsp;가능하며,&amp;nbsp;지정된&amp;nbsp;타임아웃만큼&amp;nbsp;명령어를&amp;nbsp;대기한다.&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;이&amp;nbsp;메소드에&amp;nbsp;타임아웃을&amp;nbsp;걸지&amp;nbsp;않을&amp;nbsp;경우&amp;nbsp;응답&amp;nbsp;이벤트의&amp;nbsp;수행시간이&amp;nbsp;없어&amp;nbsp;행에&amp;nbsp;걸리게&amp;nbsp;된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;58&amp;nbsp;Line&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;command는&amp;nbsp;딕셔너리&amp;nbsp;객체이다.&amp;nbsp;상수로&amp;nbsp;선언된&amp;nbsp;CM_COMMAND에&amp;nbsp;의해&amp;nbsp;해당&amp;nbsp;명령어를&amp;nbsp;수행한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;SHUTDOWN은&amp;nbsp;공통&amp;nbsp;명령어임으로&amp;nbsp;_shutdown&amp;nbsp;메소드가&amp;nbsp;호출되게&amp;nbsp;미리&amp;nbsp;정의하였다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;그외의&amp;nbsp;명령어는&amp;nbsp;상속받아&amp;nbsp;_execute&amp;nbsp;메소드를&amp;nbsp;구현하게&amp;nbsp;될&amp;nbsp;하위클래스에게&amp;nbsp;전달한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;클래스다이어그램을&amp;nbsp;보면&amp;nbsp;ThreadJob을&amp;nbsp;상속받는&amp;nbsp;클래스는&amp;nbsp;QueryThreadJob,&amp;nbsp;ConnectionManager가&amp;nbsp;있다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;두&amp;nbsp;클래스의&amp;nbsp;_execute&amp;nbsp;구현로직은&amp;nbsp;다르다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;-&amp;nbsp;68&amp;nbsp;Line&amp;nbsp;:&amp;nbsp;_push_command&amp;nbsp;메소드 &lt;br /&gt;&amp;nbsp;&amp;nbsp;해당&amp;nbsp;메소드는&amp;nbsp;queue에&amp;nbsp;해당&amp;nbsp;명령어(딕셔너리)을&amp;nbsp;put&amp;nbsp;해주는&amp;nbsp;역할을&amp;nbsp;한다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;이&amp;nbsp;메소드를&amp;nbsp;사용하는&amp;nbsp;메소드는&amp;nbsp;45줄&amp;nbsp;처럼&amp;nbsp;정의된&amp;nbsp;명령어를&amp;nbsp;넣어준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 다음으로 ThreadJob을 상속받아 구현하는 ConnectionManager, QueryThreadJob을 구현해보도록 하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347521777&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>ABCMETA</category>
      <category>THREADJOB</category>
      <category>멀티스레드</category>
      <category>스레드잡</category>
      <category>클래스다이어그램</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/14</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3#entry14comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:29:24 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204491178&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/yalsooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/yalsooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H00gd/hyRJTUXAER/nIOImSzuXO4rHxckjRDu3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 앞서 설계한 큰 그림을 기반으로 병행 실행의 기반이 될 추상화 클래스를 설계, 구현해보겠다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 스레드의 라이프사이클을 설계하고 구현하는 단계이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;span&gt;스레드 간의 연결고리로 많이 사용하는 방법이 &amp;lsquo;생산자-소비자 패턴&amp;rsquo;이라고 이전 포스트에서 언급했었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;명령어를 제공하는 스레드를 생산자라 하면 이를 받아 수행하고 처리하는 스레드가 소비자이다. 이 소비자(스레드)의 시작은 초기화 메서드로 시작된다. 스레드가 생성되고 본격적으로 Queue에서 명령어를 꺼내기 전, 처리에 필요한 객체 생성, 리소스 생성 등 필요한 작업을 우선 실행한다. 이후 Queue를 지속적으로 열람하여 생산자로부터 들어온 명령어가 있는지 확인한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 이를 액티비티 다이어그램으로 표현하면 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;eBestPy_realtime_activity.png&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3gek/btqB9YNj6ri/enLf73HH7aSIGK6YSYh1dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3gek/btqB9YNj6ri/enLf73HH7aSIGK6YSYh1dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3gek/btqB9YNj6ri/enLf73HH7aSIGK6YSYh1dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3gek%2FbtqB9YNj6ri%2FenLf73HH7aSIGK6YSYh1dK%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;569&quot; height=&quot;650&quot; data-filename=&quot;eBestPy_realtime_activity.png&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; 1. Job 초기화&lt;/b&gt; &lt;br /&gt;&amp;nbsp; Queue에 들어온 명령어를 수행하기 앞서 필요한 명령어 수행에 필요한 객체를 생성하는 등을 할 수 있는 초기화 구문이다. 이 구문에서 &lt;a href=&quot;http://win32com.client.DispatchWithEvents&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;win32com.client.DispatchWithEvents&lt;/a&gt;&amp;nbsp;함수를&amp;nbsp;이용하여&amp;nbsp;Xing&amp;nbsp;API의&amp;nbsp;특정&amp;nbsp;객체를&amp;nbsp;얻어올&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;이&amp;nbsp;작업은&amp;nbsp;꼭&amp;nbsp;스레드의&amp;nbsp;시작&amp;nbsp;지점에서&amp;nbsp;이루어져야&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;2. 지속적인 Queue 확인&lt;/b&gt; &lt;br /&gt;&amp;nbsp; 소비자 스레드가 명령어를 처리하기 위해 Queue에 들어온 명령어가 있는지 지속적으로 확인한다. 이때 &lt;a href=&quot;queue.Queue().get()&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;queue.Queue().get()&lt;/a&gt;&amp;nbsp;함수를&amp;nbsp;통해&amp;nbsp;블록을&amp;nbsp;걸어야&amp;nbsp;하고&amp;nbsp;또한&amp;nbsp;타임아웃을&amp;nbsp;걸어야&amp;nbsp;한다.&amp;nbsp;그&amp;nbsp;이유는&amp;nbsp;Xing&amp;nbsp;API&amp;nbsp;객체를&amp;nbsp;생성할 때&amp;nbsp;이벤트 리스너&amp;nbsp;클래스를&amp;nbsp;같이&amp;nbsp;등록하는데,&amp;nbsp;이&amp;nbsp;이벤트 리스너가&amp;nbsp;수행할&amp;nbsp;시간을&amp;nbsp;주기&amp;nbsp;위해서&amp;nbsp;&lt;a href=&quot;queue.Queue().get()&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;queue.Queue().get()&lt;/a&gt;&amp;nbsp;함수에&amp;nbsp;블록만&amp;nbsp;걸지&amp;nbsp;말고&amp;nbsp;특정 시간&amp;nbsp;타임아웃도&amp;nbsp;같이&amp;nbsp;걸어줘야 한다.&amp;nbsp;만약&amp;nbsp;타임아웃을&amp;nbsp;걸지&amp;nbsp;않았을&amp;nbsp;경우&amp;nbsp;이벤트 리스너 클래스가&amp;nbsp;이벤트&amp;nbsp;수신 시&amp;nbsp;수행할&amp;nbsp;시간이&amp;nbsp;없긴&amp;nbsp;때문에&amp;nbsp;해당&amp;nbsp;이벤트에&amp;nbsp;행이&amp;nbsp;걸려버린다,&amp;nbsp;혹은&amp;nbsp;다음&amp;nbsp;명령어가&amp;nbsp;들어오기&amp;nbsp;전까지&amp;nbsp;수행되지&amp;nbsp;못할&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;3. 명령어 수행&lt;/b&gt; &lt;br /&gt;&amp;nbsp; Queue에 들어온 명령어가 있을 경우 해당 명령어를 분기해서 알맞은 오퍼레이션을 수행한다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;4. SHUTDOWN 명령어 수행&lt;/b&gt; &lt;br /&gt;&amp;nbsp; 라이프사이클에 중요한 부분 중 하나이다, 해당 스레드의 작업을 마감할 때 올바른 마감을 위해 해당 함수에 정의한다. 예를 들면 DBConnection close 등, 리소스의 올바른 해제 작업이 필요할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 명령어 소비자의 라이프사이클을 설계하고 이를 기반으로 클래스 다이어그램을 그려보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;eBestPy_realtime_class.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmJR7f/btqCd1HVWhy/YR0qpQqOsFvpgWkaPkbGik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmJR7f/btqCd1HVWhy/YR0qpQqOsFvpgWkaPkbGik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmJR7f/btqCd1HVWhy/YR0qpQqOsFvpgWkaPkbGik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmJR7f%2FbtqCd1HVWhy%2FYR0qpQqOsFvpgWkaPkbGik%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;768&quot; height=&quot;631&quot; data-filename=&quot;eBestPy_realtime_class.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;631&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: #333333;&quot;&gt;&amp;nbsp; ThreadJob 추상화 클래스를 기준으로 성격이 다른 ConnectionManager와 QueryJob을 분류하였다. 이베스트에게 요청 및 응답받을 QueryJob은 공통기능만 묶어뒀고 각각의 Query(NWS, S3_)는 QueryJob 추상화 클래스를 상속받아 세부 구현이 가능하게 설계하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp; 1) ThreadJob 주요 메서드&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _init() : 스레드 수행 시 최초 호출&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _execute() : 스레드 수행 메서드&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _shutdown() : 스레드 종료 시 호출&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _waiting_queue() : Queue에 명령어가 꺼내질 때까지 기다리는 메서드&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _push_command() : 명령어를 Queue 넣을 수 있는 메서드&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; shutdown_call() : 스레드 종료 명령어를 큐에 담는 메서드&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp; 2) QueryThreadJob 주요 메서드&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _operation_init() : 명령어를 수행할 오퍼레이션 초기화&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _operation_call() : 오퍼레이션 호출 시 수행될 로직&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp; 3) ConnectionManager 주요 메서드&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _xa_connect() : 서버 연결&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; _xa_disconnect() : 서버 연결 끊기&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; waiting_login() : 로그인 대기 메서드 (블록)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; waiting_logout() : 로그아웃 대기 메서드 (블록)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; login_call() : 로그인 요청&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ndash; disconnect_call() : 서버 연결 끊기 요청&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 설계된 다이어그램을 기반으로 ThreadJob부터 구현을 시작해 보겠다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347455924&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name&quot; data-og-url=&quot;https://buycycle.name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>API</category>
      <category>EBEST</category>
      <category>xing</category>
      <category>멀티스레드</category>
      <category>설계</category>
      <category>실시간조회</category>
      <category>액티비티다이어그램</category>
      <category>이베스트</category>
      <category>클래스다이어그램</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/13</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2#entry13comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:25:58 +0900</pubDate>
    </item>
    <item>
      <title>[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)</title>
      <link>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677204521519&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&quot; data-og-description=&quot;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236&quot;&gt;&lt;a href=&quot;https://github.com/malchooni/EBestAPI_Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/malchooni/EBestAPI_Python&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/khJC9/hyRJQRtrtM/AXkCMm7tp8FW39hzzoZhO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=907_131_1002_236');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - malchooni/EBestAPI_Python: 파이썬 학습목적의 이베스트 API 구현&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파이썬 학습목적의 이베스트 API 구현. Contribute to malchooni/EBestAPI_Python development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1&quot;&gt;[파이썬] eBest Xing api 실시간조회, 멀티스레드 설계 (1)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-%EA%B5%AC%ED%98%84-2&quot;&gt;[파이썬] eBest Xing api 실시간조회, 스레드 설계 구현 (2)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ThreadJob-%EA%B5%AC%ED%98%84-3&quot;&gt;[파이썬] eBest Xing api 실시간조회, ThreadJob 구현 (3)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-ConnectionManager-%EA%B5%AC%ED%98%84-4&quot;&gt;[파이썬] eBest Xing api 실시간조회, ConnectionManager 구현 (4)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-QueryThreadJob-%EA%B5%AC%ED%98%84-5&quot;&gt;[파이썬] eBest Xing api 실시간조회, QueryThreadJob 구현 (5)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-NWS-%EB%89%B4%EC%8A%A4-%EC%9A%94%EC%B2%AD-%EA%B5%AC%ED%98%84-6&quot;&gt;[파이썬] eBest Xing api 실시간조회, NWS 뉴스 요청 구현 (6)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-S3-%EC%BD%94%EC%8A%A4%ED%94%BC%EC%B2%B4%EA%B2%B0-%EA%B5%AC%ED%98%84-7&quot;&gt;[파이썬] eBest Xing api 실시간조회, S3_ 코스피체결 구현 (7)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B0%8F-%EC%8B%A4%ED%96%89-%ED%99%94%EB%A9%B4-8&quot;&gt;[파이썬] eBest Xing api 실시간조회, 테스트 및 실행 화면 (8)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 증권사에서 주식 관련 정보를 조회할 수 있도록 API를 제공해주고 있다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; 이베스트투자증권에서 제공해 주는 API를 통해 실시간 정보를 조회할 수 있는 프로그램을 멀티스레드로 설계, 구현해 보려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 멀티스레드로 설계하는 이유는 효율성 때문이다. 요청하는 쿼리가 하나이면 별다른 문제가 없지만 2개 이상일 경우 한 스레드에서 처리하기엔 병목현상이 발생할 것이다. 리퀘스트 A 때문에 리퀘스트 B가 기다려야 하는 현상이 발생할 수 있어서 설계부터 멀티스레드를 고려하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;설계에 앞서 이베스트에서 제공하는 API에 대해 알아볼 필요가 있다. 이베스트에서 제공하는 개발자용 프로그램인 &amp;lsquo;DevCenter&amp;rsquo;를 이용하면 사용하게 될 API의 명세도 확인할 수 있고 그 프로그램을 통해 쿼리를 테스트해 볼 수 있는 환경을 제공해준다. 아주 기똥찬 프로그램이다. Xing API는 이벤트 방식으로 응답을 준다. 비동기 방식이다. API의 성향(?)에 따라 내가 구현할 프로그램의 설계가 달라진다. 비동기 이벤트 방식은 응답이 언제 올지 예측할 수 없다. 멀티스레드를 적극적으로 이용하려는 이유 중 하나이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;이제 만들 프로그램을 설계해 보겠다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 스레드 기준으로 각각의 역할을 정의하였다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MainThread는 말 그대로 구현할 프로그램의 메인이며, 연결을 관리하는 ConnectionManager, 실시간 뉴스 정보를 관리하는 RT_NWS, 실시간 코스피 종목 가격을 관리할 수 있는 RT_S3_KOSPI, 4가지로 정의하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;-&amp;nbsp;MainThread&lt;/b&gt; &lt;br /&gt;&amp;nbsp; 프로그램의 라이프사이클을 관리하는 스레드이다. 프로그램의 초기화, 셧다운 등을 관리한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;-&amp;nbsp;ConnectionManager&lt;/b&gt; &lt;br /&gt;&amp;nbsp; 이베스트투자증권으로 쿼리를 날리기 전에 로그인은 필수 작업이다. 이 스레드를 통해 이베스트투자증권으로 부터 인증을 받고 커넥션과 관련된 일을 담당한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;-&amp;nbsp;RT_NWS&lt;/b&gt; &lt;br /&gt;&amp;nbsp; NWS 쿼리는 이베스트투장증권에서 실시간으로 뉴스 제목 패킷을 보내준다. 이에 이벤트 리스너가 대기하고 있다가 보내준 데이터를 화면콘솔로 뿌려준다.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;b&gt;-&amp;nbsp;RT_S3_KOSPI&lt;/b&gt; &lt;br /&gt;&amp;nbsp; S3_ 쿼리는 이베스트투자증권에 코스피 종목 단축코드를 알려주면 해당 종목의 매수 및 매도 이벤트가 발생할 때 마다 응답을 보내준다. 종목코드를 여러개 입력 할 수 있다.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 여러가지 쿼리들이 있지만 이 글에선 두 가지 쿼리만 다룰 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 위에 정의한 역할에 대해 시퀀스 다이어그램으로 표현해 보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;eBestPy_realtime_sequence.png&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1tfdC/btqCaSFYaOY/ZcdepskZ4EMA4rkJWojvwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1tfdC/btqCaSFYaOY/ZcdepskZ4EMA4rkJWojvwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1tfdC/btqCaSFYaOY/ZcdepskZ4EMA4rkJWojvwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1tfdC%2FbtqCaSFYaOY%2FZcdepskZ4EMA4rkJWojvwK%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;636&quot; height=&quot;685&quot; data-filename=&quot;eBestPy_realtime_sequence.png&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1. MainThread에서는 ConnectionManager, RT_NWS, RT_S3_KOSPI 객체를 생성하고 각각의 start() 메서드를 통해 해당 스레드들을 시작한다. 각각의 스레드들은 정의된 초기화 과정을 거친다. 이 초기화 과정에서 API객체를 생성할 때 정의된 이벤트 클래스를 등록해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2. 스레드들이 초기화 과정을 마치면 Queue에 명령어가 들어오기를 기다린다. 멀티스레드에서 Queue를 사용하는 이유는 스레드간 연결고리를 만들어 줄 수 있는 가장 보편적인 방법이 &amp;lsquo;생산자-소비자 패턴&amp;rsquo;이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 3. MainThread에서 쿼리 명령어를 Queue에 등록하면 대기하고 있던 각각의 해당 스레드가 명령어 수신시 해당 명령어를 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 4. 각각의 스레드들은 초기화 시 생성된 Xing API객체를 통해 이베스트투자증권 서버에 요청하며, 응답은 등록된 이벤트 리스너에 의해 수신받는다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 여기서 눈여겨 봐야 할 부분은 &amp;lsquo;스레드들의 초기화 과정&amp;rsquo;이라고 표현한 부분이다. 진짜 스레드를 초기화한다는 의미가 아니고 정의된 ConnectionManager, RT_NWS, RT_S3_KOSPI 스레드가 시작할 때, 동작 수행에 꼭 필요한 과정이 필요하다는 뜻이다. (큐 객체를 생성하고, Xing API 객체를 생성하고..) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; Xing API는 COM버전을 제공, 사용하였다. 파이썬이 Xing API의 객체를 얻기 위해 &amp;lsquo;win32com&amp;rsquo; 라이브러리의 DispatchWithEvents 함수를 이용한다. 이 객체를 얻어올 때 MainThread가 아닌 각각의 스레드에서 얻어와야지 올바른 동작이 가능하다. 이 과정을 스레드 초기화 과정이라고 표현하였다. 이 부분은 당연할 수도 있지만 상당히 중요한 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 큰 그림을 그렸고, 다음으로 클래스를 설계하고 구현해보도록 하겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1616347161772&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;buycycle.name&quot; data-og-description=&quot;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&quot; data-og-host=&quot;buycycle.name&quot; data-og-source-url=&quot;https://buycycle.name/&quot; data-og-url=&quot;https://buycycle.name/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://buycycle.name/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://buycycle.name/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;buycycle.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/파이썬</category>
      <category>python</category>
      <category>XING API</category>
      <category>시퀀스다이어그램</category>
      <category>실시간조회</category>
      <category>이베스트</category>
      <category>증권사API</category>
      <category>파이썬</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/12</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-eBest-Xing-api-%EC%8B%A4%EC%8B%9C%EA%B0%84%EC%A1%B0%ED%9A%8C-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EC%84%A4%EA%B3%84-1#entry12comment</comments>
      <pubDate>Sat, 22 Feb 2020 15:22:39 +0900</pubDate>
    </item>
    <item>
      <title>apache cxf 클라이언트 생성하기</title>
      <link>https://malchooni.tistory.com/entry/apache-cxf-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1599824406556&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;jax-ws 웹서비스 서버 구축하기&quot; data-og-description=&quot;웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다. 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기�&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4bvC6/hyHtfgqoZo/lOdrvUmCZzE5MvD9TkQuG0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hUdos/hyHs7vWzeq/WQD9AG2Sce3EqVEs4ShZQ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4bvC6/hyHtfgqoZo/lOdrvUmCZzE5MvD9TkQuG0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hUdos/hyHs7vWzeq/WQD9AG2Sce3EqVEs4ShZQ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;jax-ws 웹서비스 서버 구축하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다. 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스를 제공하는 서버(정보 제공자)는 WSDL을 함께 발행해준다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; WSDL이란 Web Services Description Language의 약자로 &amp;lsquo;웹서비스에 대한 정의서&amp;rsquo;이다. 이 WSDL에는 웹서비스에 대한 구체적인 내용이 들어있다. 서비스를 제공해주는 URI, 요청과 응답에 대한 메시지 포맷, 오퍼레이션 등이 기재되어있다. 클라이언트(정보 이용자)는 WSDL을 통해 서버(정보 제공자)와 통신을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; Apache CXF에서 제공해주는 라이브러리를 이용하여 웹서비스 클라이언트를 생성해보겠다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp; 1. wsdl 확인하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; http://localhost:8080/WS_Server_Persional_Info_by_cxf/PersonalInfo?wsdl&lt;br /&gt;&amp;nbsp; 웹서비스 URL+?wsdl을 브라우저에서 호출해보면 다음과 같이 웹서비스에 대한 정의서를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.17.11-e1456402670422.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWjM8I/btqCbf8GaI8/KAsLkmgoJBoVCeq6fxUVik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWjM8I/btqCbf8GaI8/KAsLkmgoJBoVCeq6fxUVik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWjM8I/btqCbf8GaI8/KAsLkmgoJBoVCeq6fxUVik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWjM8I%2FbtqCbf8GaI8%2FKAsLkmgoJBoVCeq6fxUVik%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.17.11-e1456402670422.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;318&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스의 wsdl을 확인할 수 없으면, 클라이언트 생성이 불가하니 브라우저로 확인하고 다음으로 진행한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스를 찾을 수 없다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://webservicex.net&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://webservicex.net&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사이트에서 제공해주는 웹서비스들이 많으니 참고해 본다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;b&gt;2. Apache CXF&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; 라이브러리를 사용하기 위해 &lt;a href=&quot;http://cxf.apache.org/download.html&quot;&gt;http://cxf.apache.org/download.html에서&lt;/a&gt; cxf 라이브러리를 다운로드한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;b&gt;3. WSDL 제너레이터&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp; CXF의 wsdl2java라는 제너레이터를 이용하면 웹서비스 제공자가 발행해주는 WSDL을 해석하여 자바 파일로 만들어준다.&lt;br /&gt;&lt;a href=&quot;http://cxf.apache.org/docs/wsdl-to-java.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;nbsp; http://cxf.apache.org/docs/wsdl-to-java.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 콘솔로 변환할 수도 있지만, 이 글에선 이클립스의 간단한 설정으로 CXF에서 제공하는 제너레이터를 이용하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp; a) 이클립스 환경설정 &amp;ndash; cxf&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.30.30-e1456403560543.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;394&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GbHWH/btqCaSzezLJ/OK15QlA7WxlVmB8ZZnvl7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GbHWH/btqCaSzezLJ/OK15QlA7WxlVmB8ZZnvl7k/img.png&quot; data-alt=&quot;이클립스 &amp;amp;amp;ndash; 환경설정 &amp;amp;amp;ndash; Web Services &amp;amp;amp;ndash; CXF Preferences 화면에서 &amp;amp;amp;lsquo;Add&amp;amp;amp;rsquo;버튼을 눌러 cxf의 홈디렉토리를 설정 후 &amp;amp;amp;lsquo;Finish&amp;amp;amp;rsquo;버튼을 눌러 설정을 완료한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GbHWH/btqCaSzezLJ/OK15QlA7WxlVmB8ZZnvl7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGbHWH%2FbtqCaSzezLJ%2FOK15QlA7WxlVmB8ZZnvl7k%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.30.30-e1456403560543.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;394&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이클립스 &amp;ndash; 환경설정 &amp;ndash; Web Services &amp;ndash; CXF Preferences 화면에서 &amp;lsquo;Add&amp;rsquo;버튼을 눌러 cxf의 홈디렉토리를 설정 후 &amp;lsquo;Finish&amp;rsquo;버튼을 눌러 설정을 완료한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp; b) wsdl2java&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스 제공자의 WSDL을 자바 파일로 변환해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.38.02-e1456404435869.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vtUeB/btqCd0bawn9/GSTQkAMT3bT8r1oGNQjWik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vtUeB/btqCd0bawn9/GSTQkAMT3bT8r1oGNQjWik/img.png&quot; data-alt=&quot;프로젝트 우클릭 &amp;amp;amp;gt; New &amp;amp;amp;gt; Other &amp;amp;amp;gt; Web Services &amp;amp;amp;gt; Web Service Client 선택 후 Next.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vtUeB/btqCd0bawn9/GSTQkAMT3bT8r1oGNQjWik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvtUeB%2FbtqCd0bawn9%2FGSTQkAMT3bT8r1oGNQjWik%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.38.02-e1456404435869.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트 우클릭 &amp;gt; New &amp;gt; Other &amp;gt; Web Services &amp;gt; Web Service Client 선택 후 Next.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.43.12-e1456404499884.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BssoK/btqCbTRU2MV/HxvW9By6K4N8Pot76kH84k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BssoK/btqCbTRU2MV/HxvW9By6K4N8Pot76kH84k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BssoK/btqCbTRU2MV/HxvW9By6K4N8Pot76kH84k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBssoK%2FbtqCbTRU2MV%2FHxvW9By6K4N8Pot76kH84k%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.43.12-e1456404499884.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;ndash; Service definition : wsdl url 혹은 로컬 PC에 저장된 wsdl파일을 선택한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;ndash; level : Deploy client까지 설정해주면 바로 테스트해볼 수 있는 자바 파일까지 생성하여 준다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;ndash; Web service runtime : 해당 글자를 클릭하여 처음 설정해주었던 CXF로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.55.12-e1456405042255.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZotK6/btqCcjv11Zy/0c1D7c1g4F1JKmriCNZCvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZotK6/btqCcjv11Zy/0c1D7c1g4F1JKmriCNZCvk/img.png&quot; data-alt=&quot;&amp;amp;amp;lsquo;output directory&amp;amp;amp;rsquo;와 &amp;amp;amp;lsquo;package name&amp;amp;amp;rsquo;을 확인 후 Finish 버튼을 누른다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZotK6/btqCcjv11Zy/0c1D7c1g4F1JKmriCNZCvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZotK6%2FbtqCcjv11Zy%2F0c1D7c1g4F1JKmriCNZCvk%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.55.12-e1456405042255.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;lsquo;output directory&amp;rsquo;와 &amp;lsquo;package name&amp;rsquo;을 확인 후 Finish 버튼을 누른다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-21.59.46-e1456405362341.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFVHsf/btqCdhqGBHm/GB56yN8K8yPs4L996rAcFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFVHsf/btqCdhqGBHm/GB56yN8K8yPs4L996rAcFk/img.png&quot; data-alt=&quot;위와 같이 생성된 자바 파일을 확인할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFVHsf/btqCdhqGBHm/GB56yN8K8yPs4L996rAcFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFVHsf%2FbtqCdhqGBHm%2FGB56yN8K8yPs4L996rAcFk%2Fimg.png&quot; data-filename=&quot;-2016-02-25-21.59.46-e1456405362341.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위와 같이 생성된 자바 파일을 확인할 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-02-25-22.11.19-e1456405914888.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LwuIu/btqCcU3Cjz7/6ERSJgf2vly3EoqAxXotp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LwuIu/btqCcU3Cjz7/6ERSJgf2vly3EoqAxXotp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LwuIu/btqCcU3Cjz7/6ERSJgf2vly3EoqAxXotp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLwuIu%2FbtqCcU3Cjz7%2F6ERSJgf2vly3EoqAxXotp0%2Fimg.png&quot; data-filename=&quot;-2016-02-25-22.11.19-e1456405914888.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; wsdl 제너레이터 설정에서 level을 Deploy client까지 주었다면 서비스이름+_Client.java 파일이 같이 생성될 것이다. 이 자바 파일을 확인해보면 main 메서드가 존재한다. value object의 값만 원하는 걸로 변경 후 자바 애플리케이션으로 실행해 보면 웹서비스 제공자에게 호출하는 걸 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1599824301864&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;wsdl2java 간편한 웹서비스 클라이언트 생성&quot; data-og-description=&quot;웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다. Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다. �&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; data-og-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btv7v3/hyHtfOhAvk/qQdHFYK6KDfQDj3VUUpevk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/cRlRUg/hyHs9UOsRw/y105YM1Mzm7SwC9i6kIrhk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/extUM/hyHoWIe8xM/asH2Oac0hvm7Uk9zVL1Sbk/img.png?width=1225&amp;amp;height=818&amp;amp;face=0_0_1225_818&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btv7v3/hyHtfOhAvk/qQdHFYK6KDfQDj3VUUpevk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/cRlRUg/hyHs9UOsRw/y105YM1Mzm7SwC9i6kIrhk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/extUM/hyHoWIe8xM/asH2Oac0hvm7Uk9zVL1Sbk/img.png?width=1225&amp;amp;height=818&amp;amp;face=0_0_1225_818');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;wsdl2java 간편한 웹서비스 클라이언트 생성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다. Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다. �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Web Service</category>
      <category>apache cxf</category>
      <category>Client</category>
      <category>cxf</category>
      <category>WSDL</category>
      <category>웹서비스</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/11</guid>
      <comments>https://malchooni.tistory.com/entry/apache-cxf-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0#entry11comment</comments>
      <pubDate>Sat, 22 Feb 2020 14:55:12 +0900</pubDate>
    </item>
    <item>
      <title>jax-ws 웹서비스 서버 구축하기</title>
      <link>https://malchooni.tistory.com/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기재되어있다. JSR&lt;/span&gt;&lt;a href=&quot;https://www.jcp.org/en/jsr/detail?id=224&quot;&gt; 224&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;에 보면 자바 1.5 이상에서 사용할 수 있다고 한다. 어노테이션도 1.5 이상부터 지원.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 20px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;It&amp;nbsp;will&amp;nbsp;run&amp;nbsp;on&amp;nbsp;JavaTM&amp;nbsp;2&amp;nbsp;Platform,&amp;nbsp;Standard&amp;nbsp;Edition&amp;nbsp;(J2SE)&amp;nbsp;1.5.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 자바 웹서비스를 제공하는 심플 모듈 예제는 다음과 같은 순서로 구현하겠다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;요청 value object 구현.&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1582349646699&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package test.server.webservice.vo;
 
/**
 * 요청 메세지 value object.
 * @author ijyoon
 */
public class ReqInfo {
 
    // 이름.
    private String name;
    // 주소.
    private String address;
    // 나이.
    private int age;
     
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스 이용자가 제공자에게 어떤 요청 값을 보낼지 정의한 클래스이다. 이름, 주소, 나이 세 가지 정보를 제공자에게 보내도록 하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;응답 value object 구현.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1582349707757&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package test.server.webservice.vo;
 
/**
 * 응답 메시지 value object.
 * @author ijyoon
 */
public class ResInfo {
 
    // 응답 메세지.
    private String resultMessage;
 
    public String getResultMessage() {
        return resultMessage;
    }
 
    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 웹서비스는 제공자는 이용자에게 resultMessage란 값만 응답값으로 보내기로 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: square;&quot; data-ke-list-type=&quot;square&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;웹서비스 서버 구현.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1582349744910&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package test.server.webservice; 
 
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
 
import test.server.webservice.vo.ReqInfo;
import test.server.webservice.vo.ResInfo;
 
/**
 * 개인정보 서비스
 * @author ijyoon
 */
@WebService
public class PersonalInfoService {
 
    /**
     * 개인정보를 등록한다.
     * Attach file 포함.
     * @param req
     * @return res 
     */
    @WebMethod
    public @WebResult(name=&quot;resInfo&quot;)ResInfo 
        register(@WebParam(name=&quot;reqInfo&quot;)ReqInfo req){
 
        // 요청값 출력.
        System.out.println(&quot;request message.&quot;);
        System.out.println(req.getName());
        System.out.println(req.getAge());
        System.out.println(req.getAddress());
         
        // 응답 메세지 생성.
        String resMessage = req.getName() +&quot; : &quot;+ req.getAge() +&quot; : &quot; + req.getAddress();
        // 응답 객체 생성
        ResInfo res = new ResInfo();
        res.setResultMessage(resMessage);
         
        return res;
    }
     
    /**
     * simple webservice test.
     * @param args
     */
    public static void main(String[] args){
        System.out.println(&quot;start web service.&quot;);
        Endpoint.publish(&quot;http://192.168.0.210:8080/personalInfoService&quot;, new PersonalInfoService());
    }
     
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 눈여겨 봐야 할 곳이 어노테이션으로 정의된 부분이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 16line에 @WebService라는 어노테이션이 정의되었다. @WebService 어노테이션 API를 참조하면 6가지 엘리먼트가 존재한다. 지정하지 않을 경우 클래스명을 따라간다. 다음은 @WebService에 대한 6가지 엘리먼트를 설명한 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/javax/jws/WebService.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;nbsp; @WebService&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; name&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 웹서비스의 이름을 정의하는 엘리먼트이다. WSDL 발행 시 portType 엘리먼트에 정의되는 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; targetNamespace&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 타켓네임스페이스를 정의하는 엘리먼트이다. WSDL 발행 시 definitions 엘리먼트의 targetNamespace 속성과 연관이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; serviceName&lt;/b&gt;&lt;br /&gt;&amp;nbsp; WSDL 발행시 service 엘리먼트에 정의되는 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; portName&lt;/b&gt;&lt;br /&gt;&amp;nbsp; WSDL 발행시 port 엘리먼트에 정의되는 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; wsdlLocation&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 기존에 발행된 WSDL 파일이나 URL을 참조한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; endpointInterface&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 구현클래스와 인터페이스를 분리할 수 있으며 분리된 인터페이스에 풀 패키지를 값으로 설정한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; @WebMethod 어노테이션은 target value가 메소드이기 때문에 메서드에만 선언할 수 있다. 앞서 본 예제의 25 line에 해당한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/javax/jws/WebMethod.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;nbsp; @WebMethod&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; operationName&lt;/b&gt;&lt;br /&gt;&amp;nbsp; WSDL 발행시 operation 엘리먼트에 정의되는 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt; &amp;ndash; action&lt;/b&gt;&lt;br /&gt;&amp;nbsp; soap:operation엘리먼트의 soapAction 속성 값을 정의한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; exclude&lt;/b&gt;&lt;br /&gt;&amp;nbsp; 웹메소드에 포함하지 않는다. exclude=true 설정을 하면 WSDL발행 시 해당 메서드(오퍼레이션)는 제외된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 위의 내용을 참조하여 구현했던 클래스의 @WebService, @WebMethod(16,25 line)의 엘리먼트를 수정하여 WSDL을 확인해 보자.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582350050769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * 개인정보 서비스
 * @author ijyoon
 */
@WebService(name=&quot;PInfo_by_ijyoon&quot;, portName=&quot;PInfoPort&quot;, serviceName=&quot;PInfoService&quot;, targetNamespace=&quot;http://malchooni.name/PInfo&quot;)
public class PersonalInfoService {
 
    /**
     * 개인정보를 등록한다.
     * Attach file 포함.
     * @param req
     * @return res 
     */
    @WebMethod(operationName=&quot;PInfoOpr&quot;,action=&quot;PInfoAction&quot;)
    public @WebResult(name=&quot;resInfo&quot;)ResInfo 
        register(@WebParam(name=&quot;reqInfo&quot;)ReqInfo req){
 
        // 요청값 출력.
        System.out.println(&quot;request message.&quot;);
    }
}
       &lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; 수정 전 WSDL&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582350118178&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;definitions xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot; xmlns:wsp=&quot;http://www.w3.org/ns/ws-policy&quot; xmlns:wsp1_2=&quot;http://schemas.xmlsoap.org/ws/2004/09/policy&quot; xmlns:wsam=&quot;http://www.w3.org/2007/05/addressing/metadata&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot; xmlns:tns=&quot;http://webservice.server.test/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://schemas.xmlsoap.org/wsdl/&quot; targetNamespace=&quot;http://webservice.server.test/&quot; name=&quot;PersonalInfoServiceService&quot;&amp;gt;
    &amp;lt;types&amp;gt;
        &amp;lt;xsd:schema&amp;gt;
            &amp;lt;xsd:import namespace=&quot;http://webservice.server.test/&quot; schemaLocation=&quot;http://192.168.0.210:8080/personalInfoService?xsd=1&quot; /&amp;gt;
        &amp;lt;/xsd:schema&amp;gt;
    &amp;lt;/types&amp;gt;
    &amp;lt;message name=&quot;register&quot;&amp;gt;
        &amp;lt;part name=&quot;parameters&quot; element=&quot;tns:register&quot; /&amp;gt;
    &amp;lt;/message&amp;gt;
    &amp;lt;message name=&quot;registerResponse&quot;&amp;gt;
        &amp;lt;part name=&quot;parameters&quot; element=&quot;tns:registerResponse&quot; /&amp;gt;
    &amp;lt;/message&amp;gt;
    &amp;lt;portType name=&quot;PersonalInfoService&quot;&amp;gt;
        &amp;lt;operation name=&quot;register&quot;&amp;gt;
            &amp;lt;input wsam:Action=&quot;http://webservice.server.test/PersonalInfoService/registerRequest&quot; message=&quot;tns:register&quot; /&amp;gt;
            &amp;lt;output wsam:Action=&quot;http://webservice.server.test/PersonalInfoService/registerResponse&quot; message=&quot;tns:registerResponse&quot; /&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/portType&amp;gt;
    &amp;lt;binding name=&quot;PersonalInfoServicePortBinding&quot; type=&quot;tns:PersonalInfoService&quot;&amp;gt;
        &amp;lt;soap:binding transport=&quot;http://schemas.xmlsoap.org/soap/http&quot; style=&quot;document&quot; /&amp;gt;
        &amp;lt;operation name=&quot;register&quot;&amp;gt;
            &amp;lt;soap:operation soapAction=&quot;&quot; /&amp;gt;
            &amp;lt;input&amp;gt;
                &amp;lt;soap:body use=&quot;literal&quot; /&amp;gt;
            &amp;lt;/input&amp;gt;
            &amp;lt;output&amp;gt;
                &amp;lt;soap:body use=&quot;literal&quot; /&amp;gt;
            &amp;lt;/output&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/binding&amp;gt;
    &amp;lt;service name=&quot;PersonalInfoServiceService&quot;&amp;gt;
        &amp;lt;port name=&quot;PersonalInfoServicePort&quot; binding=&quot;tns:PersonalInfoServicePortBinding&quot;&amp;gt;
            &amp;lt;soap:address location=&quot;http://192.168.0.210:8080/personalInfoService&quot; /&amp;gt;
        &amp;lt;/port&amp;gt;
    &amp;lt;/service&amp;gt;
&amp;lt;/definitions&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;ndash; 수정 후 WSDL&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582350150308&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;definitions xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot; xmlns:wsp=&quot;http://www.w3.org/ns/ws-policy&quot; xmlns:wsp1_2=&quot;http://schemas.xmlsoap.org/ws/2004/09/policy&quot; xmlns:wsam=&quot;http://www.w3.org/2007/05/addressing/metadata&quot; xmlns:soap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot; xmlns:tns=&quot;http://malchooni.name/PInfo&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://schemas.xmlsoap.org/wsdl/&quot; targetNamespace=&quot;http://malchooni.name/PInfo&quot; name=&quot;PInfoService&quot;&amp;gt;
    &amp;lt;types&amp;gt;
        &amp;lt;xsd:schema&amp;gt;
            &amp;lt;xsd:import namespace=&quot;http://malchooni.name/PInfo&quot; schemaLocation=&quot;http://192.168.0.210:8080/personalInfoService?xsd=1&quot; /&amp;gt;
        &amp;lt;/xsd:schema&amp;gt;
    &amp;lt;/types&amp;gt;
    &amp;lt;message name=&quot;PInfoOpr&quot;&amp;gt;
        &amp;lt;part name=&quot;parameters&quot; element=&quot;tns:PInfoOpr&quot; /&amp;gt;
    &amp;lt;/message&amp;gt;
    &amp;lt;message name=&quot;PInfoOprResponse&quot;&amp;gt;
        &amp;lt;part name=&quot;parameters&quot; element=&quot;tns:PInfoOprResponse&quot; /&amp;gt;
    &amp;lt;/message&amp;gt;
    &amp;lt;portType name=&quot;PInfo_by_ijyoon&quot;&amp;gt;
        &amp;lt;operation name=&quot;PInfoOpr&quot;&amp;gt;
            &amp;lt;input wsam:Action=&quot;PInfoAction&quot; message=&quot;tns:PInfoOpr&quot; /&amp;gt;
            &amp;lt;output wsam:Action=&quot;http://malchooni.name/PInfo/PInfo_by_ijyoon/PInfoOprResponse&quot; message=&quot;tns:PInfoOprResponse&quot; /&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/portType&amp;gt;
    &amp;lt;binding name=&quot;PInfoPortBinding&quot; type=&quot;tns:PInfo_by_ijyoon&quot;&amp;gt;
        &amp;lt;soap:binding transport=&quot;http://schemas.xmlsoap.org/soap/http&quot; style=&quot;document&quot; /&amp;gt;
        &amp;lt;operation name=&quot;PInfoOpr&quot;&amp;gt;
            &amp;lt;soap:operation soapAction=&quot;PInfoAction&quot; /&amp;gt;
            &amp;lt;input&amp;gt;
                &amp;lt;soap:body use=&quot;literal&quot; /&amp;gt;
            &amp;lt;/input&amp;gt;
            &amp;lt;output&amp;gt;
                &amp;lt;soap:body use=&quot;literal&quot; /&amp;gt;
            &amp;lt;/output&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/binding&amp;gt;
    &amp;lt;service name=&quot;PInfoService&quot;&amp;gt;
        &amp;lt;port name=&quot;PInfoPort&quot; binding=&quot;tns:PInfoPortBinding&quot;&amp;gt;
            &amp;lt;soap:address location=&quot;http://192.168.0.210:8080/personalInfoService&quot; /&amp;gt;
        &amp;lt;/port&amp;gt;
    &amp;lt;/service&amp;gt;
&amp;lt;/definitions&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/javax/jws/WebParam.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;nbsp; @WebParam&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/javax/jws/WebResult.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;@WebResult&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;는 요청,응답 xml 스키마 발행 시 엘리먼트의 이름과 연관이 깊다. 두 어노테이션은 따로 언급하지 않겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #333333;&quot;&gt;마지막으로 만든 모듈을 서비스 해 보겠다. was 기반이 아닌 간단하게 서비스 발행하려면 javax.xml.ws.Endpoint 클래스의 publish 메서드를 사용하면 프로바이더를 생성하여 준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582350197882&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/**
 * simple binding test.
 * @param args
 */
public static void main(String[] args){
    System.out.println(&quot;start web service.&quot;);
    Endpoint.publish(&quot;http://192.168.0.198:8080/personalInfoService&quot;, new PersonalInfoService());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 파라미터로 URL과 해당 웹서비스의 객체를 넘겨주었다. 서비스 주소 끝에 ?wsdl 파라미터를 넘겨주면 서비스의 WSDL을 열람할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;http://192.168.0.198:8080/personalInfoService?wsdl&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; was기반에 올려야 할 경우 구현된 서블릿클래스가 있는 라이브러리를 참조한다. 대표적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://cxf.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;apache cxf&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://metro.java.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;metro&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://axis.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;apache axis&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;여러가지가 있다. 라이브러리 별로 web.xml(servlet class설정)과 그 종속적인 설정 파일이 존재한다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1599824460041&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;wsdl2java 간편한 웹서비스 클라이언트 생성&quot; data-og-description=&quot;웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다. Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다. �&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; data-og-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btv7v3/hyHtfOhAvk/qQdHFYK6KDfQDj3VUUpevk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/cRlRUg/hyHs9UOsRw/y105YM1Mzm7SwC9i6kIrhk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/extUM/hyHoWIe8xM/asH2Oac0hvm7Uk9zVL1Sbk/img.png?width=1225&amp;amp;height=818&amp;amp;face=0_0_1225_818&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/wsdl2java-%EA%B0%84%ED%8E%B8%ED%95%9C-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%83%9D%EC%84%B1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btv7v3/hyHtfOhAvk/qQdHFYK6KDfQDj3VUUpevk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/cRlRUg/hyHs9UOsRw/y105YM1Mzm7SwC9i6kIrhk/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/extUM/hyHoWIe8xM/asH2Oac0hvm7Uk9zVL1Sbk/img.png?width=1225&amp;amp;height=818&amp;amp;face=0_0_1225_818');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;wsdl2java 간편한 웹서비스 클라이언트 생성&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다. Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다. �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Web Service</category>
      <category>Client</category>
      <category>cxf</category>
      <category>WSDL</category>
      <category>서버</category>
      <category>웹서비스</category>
      <category>웹서비스 서버</category>
      <category>제공</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/10</guid>
      <comments>https://malchooni.tistory.com/entry/jax-ws-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0#entry10comment</comments>
      <pubDate>Sat, 22 Feb 2020 14:44:30 +0900</pubDate>
    </item>
    <item>
      <title>HttpURLConnection을 이용한 Http 클라이언트</title>
      <link>https://malchooni.tistory.com/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 사용자는 웹브라우저(익스플로러, 크롬, 사파리 등등)를 통해 웹서버에게 필요 URI를 요청하고 응답 값을 받는다. 웹브라우저는 그 응답 값(보통 HTML)을 해석하여 화면을 만들어준다. 이 처럼 웹서버에게 웹서비스를 제공받으려면 웹 클라이언트가 필요하다. 이 웹 클라이언트 부분을 자바에서 구현하려면 어떻게 해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 자바에서는 URLConnection이라는 추상화 클래스를 제공해준다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; HttpURLConnection의 계층구조를 보면 아래와 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-03-30-14.33.01-e1459316124112.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VGvQp/btqCckItaIf/52cDj7bk7YXjTuSkryKtjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VGvQp/btqCckItaIf/52cDj7bk7YXjTuSkryKtjk/img.png&quot; data-alt=&quot;URLConnection 계층구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VGvQp/btqCckItaIf/52cDj7bk7YXjTuSkryKtjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVGvQp%2FbtqCckItaIf%2F52cDj7bk7YXjTuSkryKtjk%2Fimg.png&quot; data-filename=&quot;-2016-03-30-14.33.01-e1459316124112.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;397&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;URLConnection 계층구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 이 중에서 HttpURLConnection을 이용하여 웹 클라이언트를 설명해보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;ndash; 예제 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582349123579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
public class TestCode {
     
    public void naverInvoker(){
        try {
 
            URL url = new URL(&quot;http://naver.com&quot;);
 
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.setRequestMethod(&quot;GET&quot;);
            connection.setDoInput(true);
 
            InputStream is = connection.getInputStream();
 
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String readLine = null;
 
            while ((readLine = br.readLine()) != null) {
                System.out.println(readLine);
            }
 
            br.close();
 
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
     
    public static void main(String[] args) {
         
        TestCode t = new TestCode();
        t.naverInvoker();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;16 line : url 객체의 openConnection() 메서드를 통해 URLConnection을 얻어온다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;18 line : 얻은 connection 객체에 request method를 &amp;lsquo;GET&amp;rsquo;으로 설정한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;19 line : 응답 값을 읽어오기 위해 inputstream 사용 여부에 대해 true로 설정한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;26-28 line : 응답값을 콘솔로 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &lt;b&gt;&amp;ndash; wireshark로 캡처한 패킷&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-03-30-15.53.22-e1459320884261.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yjhve/btqCd1OFLq2/AyizeLaNhtF9oK2YledJDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yjhve/btqCd1OFLq2/AyizeLaNhtF9oK2YledJDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yjhve/btqCd1OFLq2/AyizeLaNhtF9oK2YledJDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyjhve%2FbtqCd1OFLq2%2FAyizeLaNhtF9oK2YledJDK%2Fimg.png&quot; data-filename=&quot;-2016-03-30-15.53.22-e1459320884261.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;116&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 네이버 서버에 연결 후 위의 패킷을 전송하면 아래와 같은 응답 값을 준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;ndash; 콘솔로 출력된 응답 값&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;-2016-03-30-15.50.10-e1459320686838.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjqm1M/btqCcB4caOK/Gl94N4Nms5v4GRm9t4VfzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjqm1M/btqCcB4caOK/Gl94N4Nms5v4GRm9t4VfzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjqm1M/btqCcB4caOK/Gl94N4Nms5v4GRm9t4VfzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjqm1M%2FbtqCcB4caOK%2FGl94N4Nms5v4GRm9t4VfzK%2Fimg.png&quot; data-filename=&quot;-2016-03-30-15.50.10-e1459320686838.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;202&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 웹브라우저가 해당 응답 값을 받았다면 html을 해석하여 화면에 출력했을 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 위의 예제는 GET 메서드를 사용하였다. POST 메서드를 사용한다면 클라이언트도 서버에게 보내줄 body 부분이 필요할 것이다. connection.setDoOutput(true)로 설정하고 connection객체의 outputstream을 반환하여 write를 해준다면 올바른 요청이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 위와 같은 예제를 응용하면 주기적으로 특정 웹페이지를 수집할 수 있는 수집기 로봇을 구현할 수도 있을 것이다.&lt;/p&gt;</description>
      <category>프로그래밍/자바</category>
      <category>Client</category>
      <category>HTTP</category>
      <category>HttpURLConnection</category>
      <category>웹크롤러</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/9</guid>
      <comments>https://malchooni.tistory.com/entry/HttpURLConnection%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Http-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8#entry9comment</comments>
      <pubDate>Sat, 22 Feb 2020 14:29:10 +0900</pubDate>
    </item>
    <item>
      <title>자바 네트워크 프로그램, 블록과 논블록</title>
      <link>https://malchooni.tistory.com/entry/%EC%9E%90%EB%B0%94-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%B8%94%EB%A1%9D%EA%B3%BC-%EB%85%BC%EB%B8%94%EB%A1%9D</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 멀티스레드 프로그래밍에서 메서드나 객체에 대해 동기화를 할 경우 다른 누군가 그 메서드를 참조하고 있다면 &amp;ldquo;해당 메서드는 블록 된다&amp;rdquo;, 라는 표현을 사용한다. &amp;lsquo;가로막다&amp;rsquo;의 의미로 사용되는 것인데, 동시성 제어(변수의 무결성, 기타 등등)를 위하여 필요한 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 네트워크 프로그래밍으로 넘어와 이야기를 해 보겠다. 네트워크 프로그래밍에선 입출력 작업이 필요하다. 입출력 작업엔 블록 방식과 논블록 방식이 존재한다. IO와 NIO이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 자바에서 사용하는 블록방식의 입력(INPUT) 부분은 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1582298328650&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while( (read = is.read(packet)) != -1){
    System.out.println(&quot;receive message, from server : &quot; + new String(packet, 0, read));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java api를 참조&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하면 다음과 같은 설명이 있다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;A subclass must provide an implementation of this method.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; InputStream.read 메소드는 읽을 데이터가 있던가, 스트림의 끝을 발견하던가, 예외가 전파되기까지 블록 된다고 한다. 여기서 블록이 된다는 건 해당 스레드가 다음으로 진행되지 않고 InputStream.read 메서드의 반환 값을 기다리고 있다는 뜻이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 네트워크프로그래밍에서 A노드와 B노드 사이에 동기 작업이 이루어져야 할 경우 쉽게 구현할 수 있는 방법이 바로 블록 IO를 이용하는 것이다. A노드는 B노드에게 요청을 보내고 결괏값을 기다린다. B노드가 응답을 하지 않았을 경우 A노드는 InputStream.read 메서드에서 블록이 걸려있을 것이다. 응답이 오면 블록이 해제되니 이후 처리할 로직을 넣으면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 여기서 오해할 수 있는 부분이 &amp;lsquo;블록IO로 비동기 처리를 하지 못하느냐&amp;rsquo; 일 것이다. 결론부터 말하자면 블록 IO로도 비동기 처리를 할 수 있다. 그러나 설계가 조금 더 복잡해질 것이다. 송수신 부분과 처리 로직을 분리해야 할 것이고, 이 둘의 연결고리(인터페이스)를 어떻게 해야 할지 고민해봐야 할 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 블록IO는 단점이 있다. 자원의 낭비이다. 블록 IO의 해당 스레드는 언제나 블록 상태이다. A노드(클라이언트)와 B노드(서버) 1:1 상황에서 필요 스레드 수는 하나일 것이다. 하나 C노드(클라이언트)가 생기고 B노드(서버)에 요청하는 순간 B노드 수신 부분을 멀티스레드로 구현하지 않았다면 C노드(클라이언트)는 자신과 연관도 없는 A노드(클라이언트)의 영향을 받을 것이다. 그럼 여러 노드의 요청을 받아야 하는 B노드는 요청 개수 혹은 그 이상으로 스레드를 생성해야 한다. 스레드 생성 및 콘텍스트 스위칭 비용을 생각한다면 배보다 배꼽이 커질 수 있다. 블록 IO로 구현된 노드는 결국 연결 요청 수의 제한을 받게 될 것이다. 송수신 부분과 처리 로직에 대한 설계를 하지 않았다면 블록 IO로는 대용량 서비스가 힘들다.&lt;/p&gt;
&lt;p&gt;블록 IO의 자원 문제를 해결하고자 하는 것이 논 블록 IO이다. 어떤 점이 다른지 다음 소스코드를 먼저 보겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1582298802224&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while(true){
    selector.select();
    iter = selector.selectedKeys().iterator();
 
    while(iter.hasNext()){
        key = iter.next();
        iter.remove();
        if(!key.isValid()){
            continue;
        }
                 
        if(key.isAcceptable()){
            operation.accept(key, selector, block);
        }else if(key.isReadable()){
            operation.read(key);
        }else if(key.isWritable()){
            operation.write(key);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Selector에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html#select()&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java api를 참조&lt;/a&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하면 다음과 같은 설명이 있다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;Selects&amp;nbsp;a&amp;nbsp;set&amp;nbsp;of&amp;nbsp;keys&amp;nbsp;whose&amp;nbsp;corresponding&amp;nbsp;channels&amp;nbsp;are&amp;nbsp;ready&amp;nbsp;for&amp;nbsp;I/O&amp;nbsp;operations. &lt;br /&gt;This&amp;nbsp;method&amp;nbsp;performs&amp;nbsp;a&amp;nbsp;blocking&amp;nbsp;selection&amp;nbsp;operation.&amp;nbsp;It&amp;nbsp;returns&amp;nbsp;only&amp;nbsp;after&amp;nbsp;at&amp;nbsp;least&amp;nbsp;one&amp;nbsp;channel&amp;nbsp;is&amp;nbsp;selected,&amp;nbsp;this&amp;nbsp;selector's&amp;nbsp;wakeup&amp;nbsp;method&amp;nbsp;is&amp;nbsp;invoked,&amp;nbsp;or&amp;nbsp;the&amp;nbsp;current&amp;nbsp;thread&amp;nbsp;is&amp;nbsp;interrupted,&amp;nbsp;whichever&amp;nbsp;comes&amp;nbsp;first.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;br /&gt;&amp;nbsp; 논블록IO라고 했는데 Selector.select() 메서드에서 블록이 된다고 한다. Selector.select(long timeout) 메서드를 사용하면 지정된 시간까지만 블록이 될 수 있다. 하지만 이 내용은 중요하지 않다. java api의 내용을 보면 Selector.select() 메서드는 준비된 IO가 존재할 경우 블록이 해제된다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 예제 소스 50번째 줄에서 블록이 걸려있다가 준비된 IO가 발생할 경우 블록이 풀리고 selectedKeys() 메소드를 통해 선택된 키값들(Set)을 반환해 온다. 52번 줄에선 이 키값들을 돌려 가면서 해당 키값이 acceptable, readable, writable 중 어떤 것인지 판단하여 해당 채널을 불러와 그에 맞는 읽기나 쓰기 작업을 한다.&lt;br /&gt;이는 셀렉터를 담당하는 스레드가 하나만 있다면 io기반(채널별로 스레드를 증가)으로 구현했던 것과는 달리 자원 소모가 크게 늘어나지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 네트워크 프로그래밍에서의 io와 nio에 대해 설명을 간략하게 하였다. nio가 io보다 장점이 많아 보이긴 하지만 더 좋다고는 말할 수 없을 것 같다. 각각의 특징을 인지하고 요구사항을 만족시킬 수 있는 좋은 설계가 필요할 것이다.&lt;/p&gt;</description>
      <category>프로그래밍/자바</category>
      <category>io</category>
      <category>NIO</category>
      <category>논블록</category>
      <category>블록</category>
      <category>자바 네트워크</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/8</guid>
      <comments>https://malchooni.tistory.com/entry/%EC%9E%90%EB%B0%94-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%B8%94%EB%A1%9D%EA%B3%BC-%EB%85%BC%EB%B8%94%EB%A1%9D#entry8comment</comments>
      <pubDate>Sat, 22 Feb 2020 00:22:09 +0900</pubDate>
    </item>
    <item>
      <title>Spring Web ApplicationContext 갖고 오기</title>
      <link>https://malchooni.tistory.com/entry/Spring-Web-ApplicationContext-%EA%B0%96%EA%B3%A0-%EC%98%A4%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;span&gt;&amp;nbsp; Spring Framework 기반의 애플리케이션에선 bean 객체를 갖고 오기 위해 GenericApplicationContext 설정, 참조한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그렇게 생성된 context 객체의 getBean 메소드를 통해 원하는 bean 객체를 참조할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; 스프링 기반의 웹 어플리케이션에선 bean 객체를 갖고 오기 위해 어떻게 context 객체를 참조해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 스프링 기반의 웹 어플리케이션을 만들기 위해 web.xml에 리스너를 생성해준다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; org.springframework.web.context.ContextLoaderListener 클래스이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; ContextLoaderListener 이 클래스는 org.springframework.web.context.ContextLoader 클래스를 상속받아 구현된 것이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; ContextLoader 클래스의 configureAndRefreshWebApplicationContext 메서드에서 다음과 같은 부분이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582298029214&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;configLocationParam = sc.getInitParameter(&quot;contextConfigLocation&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; web.xml을 통해 ServletContext initParameter로 등록해주는 이유이기도 하다. 바로 bean 설정을 참조하기 위해서이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582298083179&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;context-param&amp;gt;
 &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;
 &amp;lt;param-value&amp;gt;
     /WEB-INF/application-context.xml
 &amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;

&amp;lt;listener&amp;gt;
 &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 그럼 ContextLoaderListener 통해 만들어진 콘텍스트를 어떻게 참조해야 할까?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 정답은 ContextLoaderListener 클래스가 상속받고 있는 ContextLoader 클래스에 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; org.springframework.web.context.ContextLoader 312줄에 정의된 메서드의 내용을 보면,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582298127734&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static WebApplicationContext getCurrentWebApplicationContext() {
    ClassLoader ccl = Thread.currentThread().getContextClassLoader();
    if (ccl != null) {
        WebApplicationContext ccpt = (WebApplicationContext)currentContextPerThread.get(ccl);
        if (ccpt != null) {
            return ccpt;
        }
    }
 
    return currentContext;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; currentContextPerThread 전역 변수(Map&amp;lt;ClassLoader, WebApplicationContext&amp;gt;)에 보관하고 있던 클래스 로더를 key값으로 WebApplicationContext를 반환하여 준다. 이 WebApplicationContext 통해 원하는 Bean 객체를 getBean 메서드를 이용하여 참조할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 예제&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1582298162334&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WebApplicationContext context = ContextLoaderListener.getCurrentWebApplicationContext();
this.indexDataDAO = context.getBean(&quot;indexDataDAO&quot;, IndexData.class);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Spring Framework</category>
      <category>ContextLoader</category>
      <category>WebApplicationContext</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/7</guid>
      <comments>https://malchooni.tistory.com/entry/Spring-Web-ApplicationContext-%EA%B0%96%EA%B3%A0-%EC%98%A4%EA%B8%B0#entry7comment</comments>
      <pubDate>Sat, 22 Feb 2020 00:16:23 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버구축] 홈네트워크 구성하기 (1)</title>
      <link>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1</link>
      <description>&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105&quot; data-og-description=&quot;[홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자의 인터넷 제공 업체는 2개의 공인 IP를 제공해 준��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzon1W/hyHoPCISX5/1sucFFnZc1kGwg93tLzaUK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4-%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8-%EB%B8%8C%EB%A6%AD%EC%8A%A4-GB-BLCE-4105&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzon1W/hyHoPCISX5/1sucFFnZc1kGwg93tLzaUK/img.jpg?width=720&amp;amp;height=960&amp;amp;face=0_0_720_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] 디바이스, 기가바이트 브릭스 GB-BLCE-4105&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버구축] 홈네트워크 구성하기 (1) 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자의 인터넷 제공 업체는 2개의 공인 IP를 제공해 준��&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 보통 가정용 인터넷을 신청하면 설치기사님이 모뎀과 공유기를 갖고 오신다. 통신사마다 다르지만 필자의 인터넷 제공 업체는 2개의 공인 IP를 제공해 준다. 모뎀 포트 4개 중 2개를 고무로 막아놓았는데, 실제 브리지 모드로 테스트해봐도 2개만 허용해 주고 있다. 제공받는 공인 IP(인터넷망)가 중요하다, 외부에서 접근할 수 있는 주소이기 때문이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 공인IP가 있으면 외부에서 접근할 수 있는 연결고리가 생긴 것이다. 우리 집 컴퓨터가 이 공인 IP에 할당되어있으면 외부에서 공인 IP로 접근이 가능하기 때문이다. 그러나 여기서 문제점이 몇 가지 있다. 첫 번째는 공인 IP가 고정이 아닌 바뀌는 유동적인 IP이다. IP주소가 바뀌지 않는 고정 IP 상품이 있지만 금액을 좀 더 지불해야 얻을 수 있다. 개인이 개인을 위한 홈네트워크 구성시 추가적인 비용 지불은 반가운 일이 아니다. 대안은 있다 DDNS.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 홈네트워크 구성을 진행해 보자.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 디바이스는 인터넷망 혹은 특정망에 합류할 땐 자기를 알리는 IP주소가 필요하다. 인터넷업체에서 제공받는 IP는 2개라고 했는데 그럼 디바이스를 두 개밖에 사용할 수 없는 것일까? 가정에서 사용하는 컴퓨터가 있을 것이고 휴대폰이 있을 것이고 기타 등등.. 2개로는 부족하다. 이를 해결해주는 것이 공유기이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 인터넷망에서 제공받은 공인IP를 공유기가 할당받는다. 이 공유기는 할당받은 공인 IP를 기반으로 자신이 사설망을 구성하고 그 사설망에 합류하는 디바이스에게 인터넷망 접근이 가능하게 해 준다. 이 사설망에 합류하게 되면 사설 IP를 공유기로부터 할당받는다. 할당받는 사설 IP대역은 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;- 사설 IP 대역&lt;/span&gt;&lt;br /&gt;&lt;span&gt;10.0.0.0 ~ 10.255.255.255&lt;/span&gt;&lt;br /&gt;&lt;span&gt;172.16.0.0 ~ 172.31.255.255&lt;/span&gt;&lt;br /&gt;&lt;span&gt;192.168.0.0 ~ 192.168.255.255&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 공유기의 사설망에서 할당받은 IP는 공유기를 통해 인터넷망으로 접근할 순 있어도 반대로 인터넷망에서 사설망의 특정 IP로는 접근이 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 공유기가 사용중인 공인 IP 확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 내 컴퓨터가 특정 공유기의 사설망을 이용한다면 cmd 창에서 &amp;lsquo;ipconfig&amp;rsquo; 명령어를 통해 공유기의 주소를 확인할 수 있다. 사설망을 구성하고 다른 망과의 연결을 통하는 관문을 게이트웨이라고 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvgSaQ/btqB9yA8lZg/bw4IEcY9E3OBEHpwnGIFa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvgSaQ/btqB9yA8lZg/bw4IEcY9E3OBEHpwnGIFa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvgSaQ/btqB9yA8lZg/bw4IEcY9E3OBEHpwnGIFa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvgSaQ%2FbtqB9yA8lZg%2Fbw4IEcY9E3OBEHpwnGIFa0%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;558&quot; height=&quot;286&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 기본게이트웨이(공유기) 주소를 확인하면 인터넷 브라우저로 172.30.1.1 접근한다. 단, 공유기가 웹 환경의 설정을 제공하지 않는다면 인터넷 브라우저로 접근이 불가능하다. 대부분의 공유기는 웹 환경의 설정 페이지를 제공해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwDR7W/btqCcVOLDMi/VQ8pNz0QcNetBLHuLxUQC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwDR7W/btqCcVOLDMi/VQ8pNz0QcNetBLHuLxUQC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwDR7W/btqCcVOLDMi/VQ8pNz0QcNetBLHuLxUQC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwDR7W%2FbtqCcVOLDMi%2FVQ8pNz0QcNetBLHuLxUQC1%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;768&quot; height=&quot;311&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 여기서 눈여겨 봐야할 곳은 외부 IP주소이다. 공유기가 알려주는 이 외부 IP주소가 인터넷망에서 홈네트워크(사설망)로 접근하는 연결고리가 된다. 그런데 문제는 인터넷 연결방식이 동적 IP방식이라는 것이다. 이 말은 즉 인터넷망에서 홈네트워크(사설망)로 접근하는 연결고리, 외부 IP주소가 언제 변할지 모른다는 것이다. 이를 대응하려면 DDNS가 필요하다. 해당 내용은 밑부분에 적어놨다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) DHCP&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; DHCP는 망에 합류하는 디바이스에게 IP주소를 동적으로 할당해 주는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LRTMK/btqB9xCcKUS/tsKe9Za2lbkJQWjEIMTayk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LRTMK/btqB9xCcKUS/tsKe9Za2lbkJQWjEIMTayk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LRTMK/btqB9xCcKUS/tsKe9Za2lbkJQWjEIMTayk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLRTMK%2FbtqB9xCcKUS%2FtsKe9Za2lbkJQWjEIMTayk%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;768&quot; height=&quot;316&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; DHCP 서버 설정에선 IP 공급 대역을 설정할 수 있다. 필자의 경우, 172.30.1.50 ~ 172.30.1.254까지의 대역을 자동 할당 대역으로 설정해놨다. 그 이유는 172.30.1.2 ~ 172.30.1.49까지의 대역은 서버용 아이피로써 수동 설정하기 위해서이다. 와이파이로 접근하는 휴대폰이나 게임용 데스크톱은 DHCP로 50~254 중 하나의 IP를 동적으로 할당받게 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 포트포워딩&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 포트 포워딩을 하는 이유는 위에서 언급했듯이 사설망에서 인터넷망으로의 접근은 가능하나 인터넷망에서 사설망의 특정 IP로는 접근이 불가능하다. 그걸 가능하게 해주는 것이 포트 포워딩이다.&lt;br /&gt;&amp;nbsp; 포트 포워딩을 알기 위해선 포트가 무엇인지 알아야 한다. 포트는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이며 TCP와 UDP가 있다. 대부분의 프로세스는 TCP를 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;- 포트번호 대역 설명&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;0번 ~ 1023번: 잘 알려진 포트 (well-known port)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;1024번 ~ 49151번: 등록된 포트 (registered port)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;49152번 ~ 65535번: 동적 포트 (dynamic port)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 각각의 IP는 0~65535번의 포트번호를 할당할 수 있으며, 각각의 네트워크 서비스나 프로세스는 특정 포트번호를 부여받을 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 예를 들어 인터넷망에서 자신의 홈네트워크(사설망)에 구성된 특정 서버의 ssh 접근을 하고 싶을 땐 다음과 같이 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ItQUk/btqB9xPQnNx/kfD0yXclkWnFeazWk4EJi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ItQUk/btqB9xPQnNx/kfD0yXclkWnFeazWk4EJi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ItQUk/btqB9xPQnNx/kfD0yXclkWnFeazWk4EJi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FItQUk%2FbtqB9xPQnNx%2FkfD0yXclkWnFeazWk4EJi1%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;768&quot; height=&quot;508&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 필자의 공유기 제품은 IPTIME이며, 설정은 어느 공유기나 거의 비슷하다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;** 내부 IP주소 : 사설망에 등록된 디바이스의 IP주소&lt;br /&gt;** 프로토콜 : 특정 프로세스가 리슨 하고 있는 프로토콜 종류, TCP or UDP&lt;br /&gt;** 외부 포트 : 공인 IP(공유기가 사용 중인 공인 IP, 외부에서 접근 가능한 IP)에 맵핑시킬 포트번호&lt;br /&gt;** 내부 포트 : 내부 IP에서 리슨 중인 포트번호&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 설정 완료 후 공유기의 공인 IP 22번 포트로 접속을 시도하면, 공유기가 자신의 사설망 172.30.1.30의 22번 포트로 서비스를 전달해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 위의 설명을 토대로 사설망을 도식화하였다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Lzbl/btqCcARzDfE/2eQhi6JvQLQICs370kEO71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Lzbl/btqCcARzDfE/2eQhi6JvQLQICs370kEO71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Lzbl/btqCcARzDfE/2eQhi6JvQLQICs370kEO71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Lzbl%2FbtqCcARzDfE%2F2eQhi6JvQLQICs370kEO71%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;768&quot; height=&quot;576&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;공유기는 공인 IP와 사설 IP(gateway) 주소를 두 개 갖고 있어 다른 망과의 연결고리 역할을 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 인터넷망에서 홈네트워크에 접근할 경우 공유기가 할당받은 공인 IP를 항상 알고 있어야 한다. 그러나 xxx.xxx.xxx.xxx 숫자로 이루어진 IP주소를 외우기란 쉽지 않을 것이다. 또 하나, 고정 IP라면 한번 외우면 되지만 언제 바뀔지 모르는 유동 IP라면 접근하는 일은 불가능에 가까울 것이다. 이를 해결하는 방법이 도메인이다. 도메인은 IP주소를 특정 이름으로 맵핑시켜주는 역할을 한다. 가령 우리가 자주 사용하는 naver.com 도메인은 알아도 실제 IP주소를 알고 있는 사람은 별로 없을 것이다. 이런 도메인이 있다면 쉽게 기억할 수 있고, 유동 IP에 대한 대응도 가능하다. DDNS 설정을 위해서 도메인이 IP주소로 바뀌는 순서를 이해하고 넘어가자.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (1) 클라이언트가 도메인으로 접속을 시도할 경우, DNS 서버에 그 도메인이 등록된 네임서버 주소를 요청한다. ( 도메인 구입 시 네임서버를 등록해야 함 )&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (2) 네임서버 주소를 획득하면 그 네임서버로 해당 도메인의 IP주소를 요청한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; (3) 해당 도메인의 IP주소를 알아냈으니 그 IP주소로 요청이 이루어진다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DDNS&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; DDNS는 위 단계 중 (2)에 관한 것이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; DDNS 설정은 크게 두 가지로 할 수 있다. 자신이 직접 도메인을 구입하여 네임서버 관리업체의 서비스를 받는 방법과&amp;nbsp; DDNS를 지원해주는 공유기를 구입하는 방법이 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 첫 번째 방법의 장점은 자신이 원하는 도메인 이름을 구성할 수 있으며 단점은 비용이 들 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 두 번째 방법의 장점은 공유기 업체의 서비스를 받는 것이므로 별도의 비용이 들지 않는다, 다만 원하는 도메인 이름으로 구성할 수 없다는 단점이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) DDNS 직접 구현&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 도메인 구입 후 네임서버 관리업체의 주소를 등록한다. 사설망에 구성된 디바이스 중 하나가 유동적인 공인 IP를 주기적으로 네임서버 관리업체에 전송, 갱신 함으로써 바뀐 IP에 대한 정보를 업데이트한다. 그렇게 되면 공인 IP주소가 바뀌더라도 네임서버에 업데이트되기 때문에 접근할 수 있는 유효한 IP주소를 클라이언트에게 전달할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) DDNS 지원 공유기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; IPTIME을 예로 들면, 웹 설정 화면에서 DDNS에 대한 페이지가 존재한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEille/btqB9x3iaoE/NqPAACfsGrqwt5saYHcFjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEille/btqB9x3iaoE/NqPAACfsGrqwt5saYHcFjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEille/btqB9x3iaoE/NqPAACfsGrqwt5saYHcFjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEille%2FbtqB9x3iaoE%2FNqPAACfsGrqwt5saYHcFjk%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;768&quot; height=&quot;362&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 설정 페이지의 간단한 등록만으로도 외부에서 접근할 수 있는 도메인이 생겼다. 정상적으로 등록이 이루어졌는지 확인하는 방법은 ping 명령어를 하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&amp;gt; ping xxxx.iptime.org&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;PING xxxx.iptime.org (49.xxx.xxx.xxx): 56 data bytes 64 bytes from 49.xxx.xxx.xxx: icmp_seq=0 ttl=49 time=62.949 ms&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&amp;nbsp; 자신의 공인 IP가 나오면 성공적으로 설정이 완료된 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 이렇게 구성된 홈네트워크를 기반으로 서버 디바이스를 선정하고 용도에 맞는 OS를 선택해 보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[홈서버] letsencrypt 인증서 발급 받기&quot; data-og-description=&quot;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는 &quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uiHdX/hyHoTkQbRJ/3e6ETTPQP8miWqg9h74PB1/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-letsencrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%9B%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uiHdX/hyHoTkQbRJ/3e6ETTPQP8miWqg9h74PB1/img.png?width=483&amp;amp;height=276&amp;amp;face=0_0_483_276');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] letsencrypt 인증서 발급 받기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;메일 서버, 웹서버 운영을 보안 프로토콜로 사용하기 위해서는 허가받은 인증기관의 인증서를 사용하는 것이 좋다. 이런 인증기관의 인증서는 대부분 유료고 개인이 홈서버를 위해 발급받기는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[홈서버] postfix smtp 메일 서버 구축&quot; data-og-description=&quot;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&quot; data-og-host=&quot;malchooni.name&quot; data-og-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xculf/hyHwuDTj25/7aV2pr8CSx6WDddk7M6UfK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693&quot; data-og-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;&lt;a href=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://malchooni.name/entry/%ED%99%88%EC%84%9C%EB%B2%84-postfix-smtp-%EB%A9%94%EC%9D%BC-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xculf/hyHwuDTj25/7aV2pr8CSx6WDddk7M6UfK/img.png?width=594&amp;amp;height=693&amp;amp;face=0_0_594_693');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[홈서버] postfix smtp 메일 서버 구축&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;POSTFIX 구축 시 letsencrypt 인증기관에서 발급받은 인증서를 사용할 것이다. 앞서 아래 콘텐츠를 먼저 열람하길 바란다. [홈서버] letsencrypt 인증서 발급 받기 메일 서버, 웹서버 운영을 보안 프로토��&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;malchooni.name&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>홈서버</category>
      <category>DDNS</category>
      <category>개인서버</category>
      <category>공유기</category>
      <category>공인ip</category>
      <category>구성</category>
      <category>사설ip</category>
      <category>사설망</category>
      <category>유동IP</category>
      <category>인터넷망</category>
      <category>포트포워딩</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/6</guid>
      <comments>https://malchooni.tistory.com/entry/%ED%99%88%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95-%ED%99%88%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0-1#entry6comment</comments>
      <pubDate>Sat, 22 Feb 2020 00:08:26 +0900</pubDate>
    </item>
    <item>
      <title>[leesa] 리사 매트리스 개봉기, 총 구매비용</title>
      <link>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-%EA%B0%9C%EB%B4%89%EA%B8%B0-%EC%B4%9D-%EA%B5%AC%EB%A7%A4%EB%B9%84%EC%9A%A9</link>
      <description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;작성일 2016.05.09&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4월 20일 주문한 매트리스가 5월 4일 도착하였다. 주문한 지 14일 만이다. 항공배송이라 2주 만에 도착하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4136.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boyhZX/btqB9YTQyiw/qfMvWp7imNivMalX4eSVH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boyhZX/btqB9YTQyiw/qfMvWp7imNivMalX4eSVH0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boyhZX/btqB9YTQyiw/qfMvWp7imNivMalX4eSVH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboyhZX%2FbtqB9YTQyiw%2FqfMvWp7imNivMalX4eSVH0%2Fimg.jpg&quot; data-filename=&quot;IMG_4136.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;배대지에서 측정한 무게가 76파운드, 34kg 정도이다. 현관문까지 배송해주었지만 안방까지 이동하는데 힘이 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4145.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rFC6v/btqCafgUF7I/OjBpYWRyRRdH6skPTrOhvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rFC6v/btqCafgUF7I/OjBpYWRyRRdH6skPTrOhvk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rFC6v/btqCafgUF7I/OjBpYWRyRRdH6skPTrOhvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrFC6v%2FbtqCafgUF7I%2FOjBpYWRyRRdH6skPTrOhvk%2Fimg.jpg&quot; data-filename=&quot;IMG_4145.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;박스를 개봉하면 위 사진처럼 매트리스가 압축되어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4141.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G26xq/btqB9XndZ9Q/WHNedyy5uxxQgdFaKIVNv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G26xq/btqB9XndZ9Q/WHNedyy5uxxQgdFaKIVNv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G26xq/btqB9XndZ9Q/WHNedyy5uxxQgdFaKIVNv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG26xq%2FbtqB9XndZ9Q%2FWHNedyy5uxxQgdFaKIVNv0%2Fimg.jpg&quot; data-filename=&quot;IMG_4141.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;돌돌말린 비닐을 벗겨내면 아래 사진처럼 겉 커버만 남는다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4142.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xnX9M/btqCbTYpPcS/3AoXbsnVgeGdFofyg7zOK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xnX9M/btqCbTYpPcS/3AoXbsnVgeGdFofyg7zOK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xnX9M/btqCbTYpPcS/3AoXbsnVgeGdFofyg7zOK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxnX9M%2FbtqCbTYpPcS%2F3AoXbsnVgeGdFofyg7zOK0%2Fimg.jpg&quot; data-filename=&quot;IMG_4142.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;커터칼 조심히 나머지 비닐을 뜯어내면 끝이 난다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_4140.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDSuid/btqCcCokmfa/6wRd7K2RjwZLKugkj7y7Qk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDSuid/btqCcCokmfa/6wRd7K2RjwZLKugkj7y7Qk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDSuid/btqCcCokmfa/6wRd7K2RjwZLKugkj7y7Qk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDSuid%2FbtqCcCokmfa%2F6wRd7K2RjwZLKugkj7y7Qk%2Fimg.jpg&quot; data-filename=&quot;IMG_4140.jpg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;압축되어있던 시간이 있어 1~2일이 지나야 원래 모습으로 돌아온다. 특유의 고무(?) 냄새가 많이 난다, 냄새가 빠질 때까지 환기를 시켜야 하는데 4~5일이 지난 지금까지도 냄새가 조금 남아있다. 한 달 정도는 지나야 없어질 듯하다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;매트리스 총 구매비용 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 매트리스 : 943,357원 ($815) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 배대지 : 124,718원 ($106.40) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 부가세 : 102,380원 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 국내 배송료 : 15,000원 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 합 : 1,185,455원&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;매트리스 생활을 하지 않고 구입했던 거라 스프링 매트리스와의 자세한 비교는 못하지만 훨씬 푹신했던 것 같다. 정보에 의하면 리사 매트리스의 Firmness : 6이라고 하니 참고하기 바란다. 주관적인 느낌이지만 누웠을 때 편한 느낌을 받았다. 너무 푹 꺼지지도 않고 그렇다고 딱딱하지도 않은 느낌이었다. 다만 냄새가 언제 빠질지 모르겠다.&lt;/p&gt;</description>
      <category>해외구매</category>
      <category>leeSA</category>
      <category>리사</category>
      <category>리사개봉기</category>
      <category>리사매트리스</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/5</guid>
      <comments>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-%EA%B0%9C%EB%B4%89%EA%B8%B0-%EC%B4%9D-%EA%B5%AC%EB%A7%A4%EB%B9%84%EC%9A%A9#entry5comment</comments>
      <pubDate>Fri, 21 Feb 2020 23:45:54 +0900</pubDate>
    </item>
    <item>
      <title>[leesa] 리사 매트리스 tracking number 수신</title>
      <link>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-tracking-number-%EC%88%98%EC%8B%A0</link>
      <description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;작성일 2016.04.27&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;리사 매트리스는 배송 시 트래킹 넘버를 이메일로 보내주는데 그 메일이 6일 만에 도착하였다. 참고로 배송은 주문을 기준으로 영업일 3~5에 해준다고 한다. 그 트래킹 넘버를 가지고 배송대행지(배대지)에 신청서를 작성해 보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;배대지 업체는 많다. 뽐뿌의 해외 포럼에서 이것저것 살펴보고 본인은 잇츠 뉴욕이란 곳에서 진행하였다. 예전엔 몰테일을 이용해 봤는데 신청서에 기입하는 항목은 거의 비슷했다. 어느 배대지나 비슷한 것 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;screencapture-itsny-co-kr-page-deliveryorder_write_can-asp-1461628073607-e1461735842711 (1).png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;803&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sowr5/btqCaf2dIIG/VQXMZ6bQiKbMjmjVcop3R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sowr5/btqCaf2dIIG/VQXMZ6bQiKbMjmjVcop3R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sowr5/btqCaf2dIIG/VQXMZ6bQiKbMjmjVcop3R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsowr5%2FbtqCaf2dIIG%2FVQXMZ6bQiKbMjmjVcop3R0%2Fimg.png&quot; data-filename=&quot;screencapture-itsny-co-kr-page-deliveryorder_write_can-asp-1461628073607-e1461735842711 (1).png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;803&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;수취인 정보는 개인정보 입력하는 부분이라 생략하고 상품정보에 리사매트리스에 대한 구매정보를 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 트래킹 : 이메일로 받은 자신의 트래킹 넘버를 입력하면 된다.&lt;br /&gt;2. 상품명 : 본인은 리사매트리스 주문화면의 제목을 입력하였다.&lt;br /&gt;The Leesa Mattress&lt;br /&gt;3. 쇼핑몰URL : 매트리스 주문화면의 주소를 복사해서 붙여 넣기 한다.&lt;br /&gt;&lt;a href=&quot;https://www.leesa.com/products/leesa-mattress&quot;&gt;Leesa Mattress&lt;/a&gt;&lt;br /&gt;4. 가격 : 실제 구입가격 815&lt;br /&gt;5. 분류 : 침구/커튼 매트리스&lt;br /&gt;6. Tax : 델라웨어는 세금이 없으므로 0.&lt;br /&gt;7. Shipping : 배대지까지의 배송비가 무료이므로 0.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 입력 후 주문신청서를 완료한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배대지 업체마다 기입항목은 다를 수 있으나 크게 다른 부분은 없을 것 같다. 이후 매트리스가 배대지에 도착하고 배대지에서 배송비를 측정하면 그 금액을 결제하기만 하면 된다.&lt;/p&gt;</description>
      <category>해외구매</category>
      <category>LEESA MATTRESS</category>
      <category>TRACKING NUMBER</category>
      <category>리사 매트리스</category>
      <category>트래킹넘버</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/4</guid>
      <comments>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-tracking-number-%EC%88%98%EC%8B%A0#entry4comment</comments>
      <pubDate>Fri, 21 Feb 2020 23:39:20 +0900</pubDate>
    </item>
    <item>
      <title>[leesa] 리사 매트리스 해외 직구하기</title>
      <link>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-%ED%95%B4%EC%99%B8-%EC%A7%81%EA%B5%AC%ED%95%98%EA%B8%B0</link>
      <description>&lt;p style=&quot;text-align: right;&quot;&gt;&lt;b&gt;작성일 2016.04.20&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;침대 프레임은 예쁜이랑 같이 가서 이케아 제품을&amp;nbsp;구입하였고 침대 위에 깔 매트리스를 보기 위해 백화점을 방문했다. 유명 침대업체 매트리스가 마음에 들어 방문을 하였는데 등급? 이름? 여러 가지가 있다고 하더라 스프링의 장점을 막 설명해주는데 깜빡하단 그냥 구매할 것 같았다. 매트리스에 대해 전혀 아는 게 없던지라 그냥 사면 덤터기 맞을 것 같아 구입을 보류하고 다른 대리점을 방문하였다. 그런데 백화점에서 듣던 이름은 없고 대리점에서는 또 다른 이름으로 설명해 주는 것이다. 백화점과 대리점 모델명이 다르다고 한다.&amp;nbsp;매트리스 구입이 생각만큼 쉽지 않다는 걸 느끼고 집에 돌아와서 인터넷으로 폭풍 검색을 시작하였다. 이런저런 검색 끝에 내린 결론은 말장난하고 있는 브랜드도 짜증 나고 스프링에 대한 만족도가 메모리폼, 라텍스에 비해 낮다는 리포트를 보곤 방향을 바꾸기로 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;미국은 메모리폼,라텍스 제품이 많다는 글을 보고 또다시 폭풍 검색하여 캐스퍼, 리사 중 고민에 잠기게 된다. 캐스퍼 매트리스는 뽐뿌에 구입 후기가 있어 많은 도움이 되었으나 리사에 대한 국내 후기는 찾아볼 수가 없었다. 그래서 유튜브로 검색하여 안 들리는 영어도 억지로 들어보고 평점도 확인하며 정보를 모았다. 오프라인 매장도 없으니 누워 볼 수도 없고 결정하기 힘들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;가격은 두개가 거의 비슷하다 퀸사이즈 기준 캐스퍼 $850, 리사 $890, 리사는 디스카운트를 하니 $815. (캐스퍼도 디스카운트가 가능한 걸로 알고 있음)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;캐스퍼 말고 리사를 구입하게 된 계기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;디자인은 개인적인 취향이지만 딱 보고 예쁜 건 캐스퍼였다. 캐스퍼는 침대 커버도 같이 파는데 그것도 예뻐 보였다. 그러나 유튜브에서 캐스퍼와 리사의 비교 동영상을 시청하였는데 마음을 끄는 부분이 하나 있었다, 흔들림이다. 싱글 사이즈로 실험한 것 같긴 하나 캐스퍼에 비해 리사가 옆에 사람이 움직였을 경우 흔들림이 덜해 보였다. 어찌 보면 의미 없을지 모르겠지만.. 또한 2인치의 메모리폼과 2인치의 cooling avena 폼, 물론 이게 좋은지 누워보지 못해서 모른다. 그래서 선택하는데 많이 힘들었다. 결정적으론 평점이다. sleepopolis의 평점이 캐스퍼는 4.0 리사는 4.8이었다. 또한 국내 후기가 없는 것 같아 내가 써서 후기 써보자는 마음도 있었다. $815 모험을 건 셈이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;리사 주문하기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;해외구매 경험은 몇번 있어 크게 어려운 부분은 없었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) 주문 전 배대지(배송대행지) 선정하기&lt;/b&gt;&lt;br /&gt;리사 매트리스는 직배송이 지원되지 않기 때문에 배대지를 선정해야 한다. 매트리스는 압축 후 박스에 담겨오기 때문에 일반 매트리스에 비해 부피가 작다. 직접 계산해 본건 아니지만 해상운송이나 항공운송이나 크게 차이가 없다는 글을 봤다. 그래서 항공배송으로 결정했다.&lt;br /&gt;주문 시 배대지의 주소가 필요하기 때문에 배대지 선정이 중요하다. 배대지 업체는 많다. 뽐뿌의 해외포럼을 검색해보면 좋을 듯하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.leesa.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;리사 매트리스&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;구매하기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;leesa_order1-e1461128329776.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;395&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Zcl6/btqCbTc1cFZ/zgILR0kto9kDuw06LqmFY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Zcl6/btqCbTc1cFZ/zgILR0kto9kDuw06LqmFY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Zcl6/btqCbTc1cFZ/zgILR0kto9kDuw06LqmFY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Zcl6%2FbtqCbTc1cFZ%2FzgILR0kto9kDuw06LqmFY1%2Fimg.png&quot; data-filename=&quot;leesa_order1-e1461128329776.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;395&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사이즈 체크 후 &amp;lsquo;add to cart&amp;rsquo;하면 바로 &amp;lsquo;check out&amp;rsquo; 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461128755442-e1461129562536.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7ne5/btqCaTke0Wd/s3lULnmuTBkWmZav6OjS61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7ne5/btqCaTke0Wd/s3lULnmuTBkWmZav6OjS61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7ne5/btqCaTke0Wd/s3lULnmuTBkWmZav6OjS61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7ne5%2FbtqCaTke0Wd%2Fs3lULnmuTBkWmZav6OjS61%2Fimg.png&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461128755442-e1461129562536.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;413&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;customer information e-mail 기입란이 있는데 꼭 유효한 이메일로 적어야 한다. 배송 관련 정보도 이메일로 보내 주기 때문이다. shipping address의 이름은 신용카드에 적힌 자기 이름으로 하는 게 좋고 주소는 배대지에서 알려준 주소를 기입한다. 배대지에서도 받을 수 있는 주소를 여러 개 제공하는데 그중에서 델라웨어(DE) 주소를 적으면 세금이 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461129267480-e1461131261924.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zXDBG/btqCcBbTl27/rtwLLmKbnmdR25wgGAkh31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zXDBG/btqCcBbTl27/rtwLLmKbnmdR25wgGAkh31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zXDBG/btqCcBbTl27/rtwLLmKbnmdR25wgGAkh31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzXDBG%2FbtqCcBbTl27%2FrtwLLmKbnmdR25wgGAkh31%2Fimg.png&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461129267480-e1461131261924.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;312&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;배송 방법을 설정하는 페이지인데 UPS를 이용하고 배송비가 무료이기 때문에 설정할 것 없이 다음으로 넘어간다. 배송비가 무료라는 뜻은 조금 전 shipping address란에 적었던 배대지까지 무료라는 뜻이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461130210856-e1461130293944.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd5Mdw/btqB9XU0VGS/GDRiIvjZAAv7lKZPdpWqVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd5Mdw/btqB9XU0VGS/GDRiIvjZAAv7lKZPdpWqVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd5Mdw/btqB9XU0VGS/GDRiIvjZAAv7lKZPdpWqVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd5Mdw%2FbtqB9XU0VGS%2FGDRiIvjZAAv7lKZPdpWqVK%2Fimg.png&quot; data-filename=&quot;screencapture-www-leesa-com-6661979-checkouts-dba9313417ebb9512790319b158d6ee3-1461130210856-e1461130293944.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;마지막으로 제일 중요한 결제 화면이다. creditcard란에 자신의 신용카드 정보를 적으면 된다. 물론 해외 승인이 가능한 카드여야 한다. 본인은 국민 체크카드(VISA)로 진행하였다.&lt;br /&gt;billing address란엔 &amp;lsquo;use a different billing address&amp;rsquo; 선택 후 신용카드사에 등록된 자신의 주소를 영어로 변환 후 적으면 된다. 이 부분을 배대지 주소로 했을 경우 승인이 안되거나 취소가 될 수 있다.&lt;/p&gt;
&lt;p&gt;구매하기 편리했던 것은 별도의 회원가입이 필요 없고 국내 사이트처럼 액티브엑스에 종속적이지 않기 때문에 맥북에서 크롬으로도 쉽게 결제를 할 수 있다.&lt;/p&gt;
&lt;p&gt;$815(943,357원) 결제되었다. $1 = 약 1158원.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 앞으로 할 일&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;https://malchooni.name/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-tracking-number-%EC%88%98%EC%8B%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;1) 이메일로 트래킹 넘버가 오면 배대지에 등록하기.&lt;/a&gt;&lt;br /&gt;2) 배대지 도착 후 배송료 결제하기.&lt;br /&gt;3) 국내로 들어오면 관세 처리 하기. (원산지 증명을 하면 무관세)&lt;br /&gt;4) 부가세 10% 준비하기.&lt;br /&gt;&lt;a href=&quot;https://malchooni.name/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-%EA%B0%9C%EB%B4%89%EA%B8%B0-%EC%B4%9D-%EA%B5%AC%EB%A7%A4%EB%B9%84%EC%9A%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5) 리사 매트리스 수령.&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;밑의 사이트를 참조하면 많은 정보를 얻을 수 있다.&lt;br /&gt;&amp;ndash;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.ppomppu.co.kr/zboard/view.php?id=oversea&amp;amp;page=1&amp;amp;divpage=106&amp;amp;search_type=sub_memo&amp;amp;keyword=%B9%CC%B1%B9+%B8%DE%B8%F0%B8%AE%C6%FB+%B8%C5%C6%AE%B8%AE%BD%BA&amp;amp;no=545075&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;뽐뿌 추천 글&lt;/a&gt;&lt;br /&gt;&amp;ndash;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://sleepopolis-mattress-reviews.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sleepopolis&lt;/a&gt;&lt;/p&gt;</description>
      <category>해외구매</category>
      <category>leeSA</category>
      <category>LEESA MATTRESS</category>
      <category>MATTRESS</category>
      <category>구매</category>
      <category>리사 매트리스</category>
      <category>매트리스</category>
      <category>해외</category>
      <category>해외직구</category>
      <author>말춘이</author>
      <guid isPermaLink="true">https://malchooni.tistory.com/3</guid>
      <comments>https://malchooni.tistory.com/entry/leesa-%EB%A6%AC%EC%82%AC-%EB%A7%A4%ED%8A%B8%EB%A6%AC%EC%8A%A4-%ED%95%B4%EC%99%B8-%EC%A7%81%EA%B5%AC%ED%95%98%EA%B8%B0#entry3comment</comments>
      <pubDate>Fri, 21 Feb 2020 23:36:14 +0900</pubDate>
    </item>
  </channel>
</rss>