<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>blog.snoworca.com</title>
    <link>https://yagnu.tistory.com/</link>
    <description>연락처 : ice3x2@gmail.com</description>
    <language>ko</language>
    <pubDate>Sun, 14 Jun 2026 13:27:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>snoworca</managingEditor>
    <image>
      <title>blog.snoworca.com</title>
      <url>https://tistory1.daumcdn.net/tistory/1542211/attach/bf914f8f8911435aba8d14f3f772d754</url>
      <link>https://yagnu.tistory.com</link>
    </image>
    <item>
      <title>IntelliJ Community Edition (무료버전) 에서 tomcat 연동하기</title>
      <link>https://yagnu.tistory.com/103</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;교육용으로 만든 자료를 정리한 것이다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IntelliJ Community Edition 은 무료지만, JAVA EE 지원이 되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, Smart Tomcat 이라는 플러그인을 설치하면 간단한 서블릿 웹 앱 프로젝트에 한해서 실행 및 디버깅을 진행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(1) Gradle 프로젝트 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradle 프로젝트로 새 프로젝트를 생성합니다&lt;b&gt;.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bexIjp/btr8Xy8Coc9/dFmz8KFrsIkxaHlrcploO1/img.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;920&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(2) Smart Tomcat 플러그인 설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상단 메뉴&lt;span style=&quot;color: #ef5369;&quot;&gt; &lt;b&gt;File =&amp;gt; Settings&lt;/b&gt;&lt;/span&gt; 에 들어가서 좌측 탭의 &lt;b&gt;Plugins&lt;/b&gt; 를 선택합니다. 그 뒤에 &lt;b&gt;Smart Tomcat&lt;/b&gt; 을 검색하여 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u46V7/btr8NDpgkwQ/NKvdynl9rS7bsJrPoC4IzK/img.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;1068&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(3)&amp;nbsp; build.gradle 편집&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;build.gradle&lt;/b&gt;&lt;/span&gt; 파일 상단에 (repositories 블럭 밑) 아래와 같이 입력해줍니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;sourceSets &lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp; &amp;nbsp; def &lt;/span&gt;webappDir = file(&lt;span style=&quot;color: #6a8759;&quot;&gt;'src/main/webapp'&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;&amp;nbsp; &amp;nbsp; main &lt;/span&gt;&lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; java &lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; srcDirs &lt;span style=&quot;color: #6a8759;&quot;&gt;'src/main/java'&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; resources &lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; srcDirs webappDir&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;&amp;nbsp; &amp;nbsp;doLast &lt;/span&gt;&lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; main.&lt;span style=&quot;color: #9876aa;&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color: #9876aa;&quot;&gt;srcDirs&lt;/span&gt;*.mkdirs()&lt;br /&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new &lt;/span&gt;File(webappDir, &lt;span style=&quot;color: #6a8759;&quot;&gt;'WEB-INF'&lt;/span&gt;).mkdirs()&lt;br /&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new &lt;/span&gt;File(webappDir, &lt;span style=&quot;color: #6a8759;&quot;&gt;'META-INF'&lt;/span&gt;).mkdirs()&lt;br /&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;
&lt;p style=&quot;background-color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ed5c57;&quot;&gt;dependencies&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;블럭에 다음과 같이 Servlet 의존성을 추가해줍니다..&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;dependencies&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; compileOnly&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;group&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;'javax.servlet'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;name&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;'javax.servlet-api'&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;version&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;'3.1.0'&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그 뒤로 &lt;span style=&quot;color: #ee2323;&quot;&gt;gradle task&lt;/span&gt; 중에 &lt;span style=&quot;color: #ee2323;&quot;&gt;clean&lt;/span&gt; 을 더블클릭하여 실행하면 자동으로 웹 앱 경로가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;1245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXfTy/btr8Ls3i4B4/kOXomrGzN5IG2IFCPQlTz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXfTy/btr8Ls3i4B4/kOXomrGzN5IG2IFCPQlTz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXfTy/btr8Ls3i4B4/kOXomrGzN5IG2IFCPQlTz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXfTy%2Fbtr8Ls3i4B4%2FkOXomrGzN5IG2IFCPQlTz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1891&quot; height=&quot;1245&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;1245&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(4)&amp;nbsp; 예제코드 작성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트할 수 있는 예제파일도 두 개 만들어봅니다.&lt;/p&gt;
&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;src/main/webapp&lt;/b&gt; 경로 밑에&lt;b&gt; index.jsp&lt;/b&gt; 를 추가하고, 아무 패키지 경로 밑에 &lt;b&gt;HelloServlet&lt;/b&gt; 클래스를 하나 추가하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 코드는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I4atc/btr8OWvx0YD/HwhT7Wp0z5TxZTayJqZLr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I4atc/btr8OWvx0YD/HwhT7Wp0z5TxZTayJqZLr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I4atc/btr8OWvx0YD/HwhT7Wp0z5TxZTayJqZLr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI4atc%2Fbtr8OWvx0YD%2FHwhT7Wp0z5TxZTayJqZLr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;521&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;index.jsp&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;&amp;lt;%@ page language=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;java&quot; &lt;/span&gt;contentType=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;text/html; charset=UTF-8&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #6a8759;&quot;&gt; &lt;/span&gt;pageEncoding=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;%&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html lang=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;ko&quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;Content-type&quot; &lt;/span&gt;content=&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HelloServlet.java&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;package &lt;/span&gt;org.example&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.servlet.ServletException&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.servlet.annotation.&lt;span style=&quot;color: #bbb529;&quot;&gt;WebServlet&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.servlet.http.HttpServlet&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.servlet.http.HttpServletRequest&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;javax.servlet.http.HttpServletResponse&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;java.io.IOException&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;import &lt;/span&gt;java.io.PrintWriter&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;@WebServlet&lt;/span&gt;(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;/hello&quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;public class &lt;/span&gt;HelloServlet &lt;span style=&quot;color: #cc7832;&quot;&gt;extends &lt;/span&gt;HttpServlet {&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #bbb529;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp; &amp;nbsp; protected void &lt;/span&gt;&lt;span style=&quot;color: #ffc66d;&quot;&gt;doGet&lt;/span&gt;(HttpServletRequest req&lt;span style=&quot;color: #cc7832;&quot;&gt;, &lt;/span&gt;HttpServletResponse resp)&lt;br /&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throws &lt;/span&gt;ServletException&lt;span style=&quot;color: #cc7832;&quot;&gt;, &lt;/span&gt;IOException {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintWriter printWriter = resp.getWriter()&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printWriter.println(&lt;span style=&quot;color: #6a8759;&quot;&gt;&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello, World!&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;&lt;/span&gt;)&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/div&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;br /&gt;(5) Smart Tomcat 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상단 메뉴에서 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Run =&amp;gt; Edit Configurations...&lt;/span&gt;&lt;/b&gt; 를 선택합니다. 창이 뜨면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;+&lt;/b&gt; &lt;/span&gt;버튼을 눌러 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;Smart Tomcat&quot;&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;아래 스크린샷은 이미 tomcat 경로가 설정되어 있는 상태입니다. 하지만, 최초로 이 창을 띄웠다면 Tomcat Server 의 위치를 먼저 지정해야합니다.&amp;nbsp; Tomcat 9 버전의 zip 파일을 다운로드 받아 ( &lt;a href=&quot;https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.zip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&amp;nbsp;https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.zip&lt;/a&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;size16&quot;&gt;이후 다른 설정은 위&lt;b&gt; (3)&lt;/b&gt; 번 과정이 제대로 진행 되었다면 자동으로 입력된 상태로 나타납니다. &lt;br /&gt;Name을 원하는 값으로 변경하세요.&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;1553&quot; data-origin-height=&quot;1048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oPtua/btr8KHe9Ivs/MIYa4HmU8Ti2hPc2WO1klK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oPtua/btr8KHe9Ivs/MIYa4HmU8Ti2hPc2WO1klK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oPtua/btr8KHe9Ivs/MIYa4HmU8Ti2hPc2WO1klK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoPtua%2Fbtr8KHe9Ivs%2FMIYa4HmU8Ti2hPc2WO1klK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1553&quot; height=&quot;1048&quot; data-origin-width=&quot;1553&quot; data-origin-height=&quot;1048&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; text-align: start;&quot;&gt;OK 버튼을 누르면 설정이 저장되고 창이 닫힙니다.&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(6) 디버깅 모드로 실행&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPupTV/btr8NcehN80/wwOJoxtCqhklqxsHUhPB9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPupTV/btr8NcehN80/wwOJoxtCqhklqxsHUhPB9K/img.png&quot; data-alt=&quot;벌레모양 아이콘 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPupTV/btr8NcehN80/wwOJoxtCqhklqxsHUhPB9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPupTV%2Fbtr8NcehN80%2FwwOJoxtCqhklqxsHUhPB9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;52&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;52&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-origin-width=&quot;729&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E7JgN/btr8P0qTMAP/mURJAj0iNnyXWE1wzjR5K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E7JgN/btr8P0qTMAP/mURJAj0iNnyXWE1wzjR5K1/img.png&quot; data-alt=&quot;웹 브라우저에서 서블릿에 접속한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E7JgN/btr8P0qTMAP/mURJAj0iNnyXWE1wzjR5K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE7JgN%2Fbtr8P0qTMAP%2FmURJAj0iNnyXWE1wzjR5K1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;729&quot; height=&quot;280&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;280&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 style=&quot;background-color: #ffffff; color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;디버깅까지 잘 되는 것이 확인되지만, 코드를 저장하면 자동으로 반영되는 핫 디폴로이는 자동으로 되지 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #666666;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 단축키&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ed5c57;&quot;&gt;Ctrl&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ed5c57;&quot;&gt;Shift&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ed5c57;&quot;&gt;F9&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 눌러 현재 작성중인 코드에 대한 핫 디폴로이를 진행할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <category>IntelliJ</category>
      <category>Tomcat</category>
      <category>인텔리j</category>
      <category>인텔리제이</category>
      <category>톰켓</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/103</guid>
      <comments>https://yagnu.tistory.com/103#entry103comment</comments>
      <pubDate>Mon, 10 Apr 2023 09:48:44 +0900</pubDate>
    </item>
    <item>
      <title>구형 공기 청정기 IOT 기기로 개조</title>
      <link>https://yagnu.tistory.com/102</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4aiSO/btryzo1DX8s/cPQ8CwsvMe3IJxGLfkv1s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4aiSO/btryzo1DX8s/cPQ8CwsvMe3IJxGLfkv1s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4aiSO/btryzo1DX8s/cPQ8CwsvMe3IJxGLfkv1s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4aiSO%2Fbtryzo1DX8s%2FcPQ8CwsvMe3IJxGLfkv1s0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;600&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(사진 출처: &lt;a href=&quot;https://www.blueair.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.blueair.com/&lt;/a&gt; 블루에어 공식 페이지)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&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;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 내가 일하는 사무실에서 약 5년간 공기 청정을 담당하다가 얼마 전 집으로 오게 된 구형 공기청정기 블루에어 Pure211. 이 녀석을 구글 홈에 붙여서 음성으로 컨트롤하거나 원하는 시간에 꺼지거나 켜지게 할 수 있도록 인터넷을 연결해 보았다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 기기 분석 - 개조 가능한지 살펴보기&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; &amp;nbsp;첫 번째 할 일은 공기청정기를 분해해서 개조가 가능한지 살펴보는 것이다. 내가 생각했던 제일 좋은 개조 방법은 스위치 케이블을 ESP8266(아두이노를 탑재한) 에 연결하고, 다시 아두이노에서 공기청정기로 스위치 신호를 보내는 방법이다. 그렇게 되려면 구조가 간단해야 하는데...&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220308_231457.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B1Nz8/btryyFiweVQ/sd1h8RtZNwu4vJNmuHJuJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B1Nz8/btryyFiweVQ/sd1h8RtZNwu4vJNmuHJuJ0/img.jpg&quot; data-alt=&quot;스위치와 연결된 케이블&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B1Nz8/btryyFiweVQ/sd1h8RtZNwu4vJNmuHJuJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB1Nz8%2FbtryyFiweVQ%2Fsd1h8RtZNwu4vJNmuHJuJ0%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;633&quot; height=&quot;633&quot; data-filename=&quot;20220308_231457.jpg&quot; data-origin-width=&quot;3024&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 기판을 분해해서 스위치 쪽 케이블 커넥터를 살펴보니 친절하게 설명까지 되어있다 ㅠ_ㅠd&amp;nbsp; 5V 와 GND, 그리고 아마도 스위치 신호를 받아오는 KEY 를 따서 쓰면 될 것 같다.&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;813&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bULvE7/btryy0Ga1fe/8XEKDrZ8DIU5XJjYvKYK80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bULvE7/btryy0Ga1fe/8XEKDrZ8DIU5XJjYvKYK80/img.png&quot; data-alt=&quot;KEY 와 GND 의 저항값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bULvE7/btryy0Ga1fe/8XEKDrZ8DIU5XJjYvKYK80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbULvE7%2Fbtryy0Ga1fe%2F8XEKDrZ8DIU5XJjYvKYK80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;279&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;KEY 와 GND 의 저항값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;KEY가 버튼에서 나온 신호가 맞는지 확실히 확인하기 위해서 기기에 전원이 들어온 상태에서 KEY 와 GND를 쇼트시켜봤다. 이어서 공기청정기 팬이 동작하는 것을 확인하였다. 케이블이 연결된 상태에서 KEY 와 전원(5V)의 저항 값도 찍어보았다. 연결된 상태에서 찍었기 때문에 6.71K옴이 나왔지만, 실제로는 10K 옴이다. 어쨌든 이것으로 풀업(pull up) 스위치를 사용한다는 것을 확인하였다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 개조 시작 - 하드웨어&amp;nbsp;&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; &amp;nbsp;우선 기기에 ESP8266을 연결하고(ESP32 를 사용하고 싶지만, 집에 여분의 ESP8266 부품들이 많다...) 릴레이를 붙여서 스위치 신호를 보내고, 외부에 달린 스위치는 ESP8266에 붙이는 것이 계획이다. ESP8266에 아두이노 코드를 올려서 MQTT로 서버에 상태를 전송하거나 명령을 받을 수 있도록한다. 그리고, 기기 상태를 알려줄 수 있는 스피커를 붙여서 소리를 통하여 인터넷, 서버 연결과 설정, 모드 진입 상태를 알려줄 수 있도록 한다.&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoztw/btryxItncvj/i4JaDmni9d7LOKNFLE4dH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoztw/btryxItncvj/i4JaDmni9d7LOKNFLE4dH0/img.jpg&quot; data-alt=&quot;필요한 라인 가져오기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoztw/btryxItncvj/i4JaDmni9d7LOKNFLE4dH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqoztw%2FbtryxItncvj%2Fi4JaDmni9d7LOKNFLE4dH0%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;813&quot; height=&quot;813&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;813&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; 이제 5V, GND, KEY 케이블을 따서 연장선을 붙였다. 겨우 이 세 가닥의 라인을 이용해서 인터넷으로 공기청정기를 제어할 수 있다니....&amp;nbsp; ㅠ_ㅠ 잠시 기쁨의 눈물을 흘려보았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY8wJe/btryzpM9bua/brbnYcHAGiOMt9Fs2NDpK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY8wJe/btryzpM9bua/brbnYcHAGiOMt9Fs2NDpK0/img.jpg&quot; data-alt=&quot;컨트롤러 모듈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY8wJe/btryzpM9bua/brbnYcHAGiOMt9Fs2NDpK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY8wJe%2FbtryzpM9bua%2FbrbnYcHAGiOMt9Fs2NDpK0%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;813&quot; height=&quot;813&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;813&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; 컨트롤러를 만들 때 사용한 부품은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;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; - NodeMCU v1.0 (ESP8266)&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 3.3v 옵토 커플러 릴레이&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 스피커&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 터미널 블록과 기타 부품류&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회로도를 그려보면 아래와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;회로도.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8Tsr/btry6EomaAE/fFg9ITl8mud6lK3IK3Bm2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8Tsr/btry6EomaAE/fFg9ITl8mud6lK3IK3Bm2k/img.png&quot; data-alt=&quot;회로도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8Tsr/btry6EomaAE/fFg9ITl8mud6lK3IK3Bm2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8Tsr%2Fbtry6EomaAE%2FfFg9ITl8mud6lK3IK3Bm2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;563&quot; data-filename=&quot;회로도.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;563&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;버튼이 5V 를 사용하고 ESP8266 은 3.3v 를 사용하기 때문에 버튼 신호를 받기 위해서 10K, 20K 저항을 이용여 전압을 낮춰줘야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 소프트웨어&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 우선 지난번에 구현한 Web 설정 마법사 라이브러리를 활용한다. 최초 기동하거나, 버튼을 10초 이상 눌렀을 경우 스마트폰으로 연결하여 WiFi 와 Mqtt 서버 주소를 설정할 수 있다. 그뿐만 아니라, WiFi 혹은 Mqtt 서버와의 연결에 장애가 생길 경우 자동으로 재접속을 시도하는 기능도 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.re.kr/101&quot;&gt;ESP8266 에 웹 설정 마법사 붙이기 (dev.re.kr)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649646193178&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;ESP8266 에 웹 설정 마법사 붙이기&quot; data-og-description=&quot;가끔씩 필요에 의해서 만드는 IOT 기기 프로젝트를 진행하면 제일 고민스럽고 귀찮은 것 중에 하나가 WiFi 연결과 서버 연결 설정을 만드는 부분이다. 이 프로젝트를 완성하기 전에는 소스코드 내&quot; data-og-host=&quot;dev.re.kr&quot; data-og-source-url=&quot;https://dev.re.kr/101&quot; data-og-url=&quot;https://dev.re.kr/101&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBuHOq/hyN0dwa9CA/cc6g3sSY2r48Hvfe2tkGa1/img.png?width=800&amp;amp;height=265&amp;amp;face=0_0_800_265,https://scrap.kakaocdn.net/dn/U8VUG/hyN0d31B4y/VKc8coOFKSnYd6HpdgiOJ1/img.png?width=800&amp;amp;height=265&amp;amp;face=0_0_800_265,https://scrap.kakaocdn.net/dn/bQ0JOG/hyN0rgUR3O/91CzQrMpmdXcaojZ0Hon2K/img.png?width=3512&amp;amp;height=1166&amp;amp;face=0_0_3512_1166&quot;&gt;&lt;a href=&quot;https://dev.re.kr/101&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.re.kr/101&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBuHOq/hyN0dwa9CA/cc6g3sSY2r48Hvfe2tkGa1/img.png?width=800&amp;amp;height=265&amp;amp;face=0_0_800_265,https://scrap.kakaocdn.net/dn/U8VUG/hyN0d31B4y/VKc8coOFKSnYd6HpdgiOJ1/img.png?width=800&amp;amp;height=265&amp;amp;face=0_0_800_265,https://scrap.kakaocdn.net/dn/bQ0JOG/hyN0rgUR3O/91CzQrMpmdXcaojZ0Hon2K/img.png?width=3512&amp;amp;height=1166&amp;amp;face=0_0_3512_1166');&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;ESP8266 에 웹 설정 마법사 붙이기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가끔씩 필요에 의해서 만드는 IOT 기기 프로젝트를 진행하면 제일 고민스럽고 귀찮은 것 중에 하나가 WiFi 연결과 서버 연결 설정을 만드는 부분이다. 이 프로젝트를 완성하기 전에는 소스코드 내&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.re.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 공기 청정기의 풍속 조절 방법은 매우 단순한데, 버튼을 한 번 누르면 1단, 그다음 누르면 2단, 그리고 3단 마지막으로 전원이 꺼진다. 버튼 조작 사이사이에 아주 약간의 딜레이가 있으며, 5초 이상 누르고 있으면 필터 교체 알람(LED 붉은색 교체) 기능이 꺼진다. 따라서 온라인 조작 프로토콜도 매우 단순하게 만들 수 있다. 다만, 현재 풍속에서 목표 풍속으로 만들기 위해서 약간의 시간이 필요할 수 있으니 이것을 감안하여 만들어야 할 것이다. &lt;span style=&quot;color: #456771;&quot;&gt;(예를 들어 현재 2단 상태에서&amp;nbsp; &amp;nbsp;1단 상태로 만들기 위해서 릴레이를&amp;nbsp; &lt;b&gt;&quot;3단-&amp;gt;전원 끄기-&amp;gt;1단&quot; &lt;/b&gt;순으로 총 3번 동작 시켜야한다.) &lt;/span&gt;그래서 목표 풍속을 담는 변수를 하나 만들고 현재 풍속을 담는 변수를 만들었다. 현재 풍속이 목표 풍속과 같아질때까지&amp;nbsp; +1 을 반복한다.&amp;nbsp; &amp;nbsp; 상태가 바뀔 때마다 상태 이벤트를 MQTT로 전송한다.&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; &amp;nbsp;다음으로 고민해야 할 사항은 서버와 통신할 때 사용할 데이터 포맷인데, JSON 으로 처리하려고 했다가 단순 Key:Value 만 전달하면 되는데 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;&amp;nbsp; 이렇게 구현된 코드는 이곳에 올려뒀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/ice3x2/IOTForBlueAirPure&quot;&gt;ice3x2/IOTForBlueAirPure: Converted &quot;BlueAir Pure XXX&quot; into an IOT device.... (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649647115564&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 - ice3x2/IOTForBlueAirPure: Converted &amp;quot;BlueAir Pure XXX&amp;quot; into an IOT device....&quot; data-og-description=&quot;Converted &amp;quot;BlueAir Pure XXX&amp;quot; into an IOT device.... - GitHub - ice3x2/IOTForBlueAirPure: Converted &amp;quot;BlueAir Pure XXX&amp;quot; into an IOT device....&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ice3x2/IOTForBlueAirPure&quot; data-og-url=&quot;https://github.com/ice3x2/IOTForBlueAirPure&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hKN5K/hyN0nMnoUK/3hKm23lasyBAegvAIpTuj0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/ice3x2/IOTForBlueAirPure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ice3x2/IOTForBlueAirPure&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hKN5K/hyN0nMnoUK/3hKm23lasyBAegvAIpTuj0/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; data-ke-size=&quot;size16&quot;&gt;GitHub - ice3x2/IOTForBlueAirPure: Converted &quot;BlueAir Pure XXX&quot; into an IOT device....&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Converted &quot;BlueAir Pure XXX&quot; into an IOT device.... - GitHub - ice3x2/IOTForBlueAirPure: Converted &quot;BlueAir Pure XXX&quot; into an IOT device....&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;MQTT 로 전달되는 데이터 프로토콜은 다음과 같다.&lt;/p&gt;
&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;명령 (publish)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;풍속 변경
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Topic: [디바이스 키]/qstate&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Value: cmd=mode&amp;amp;tm=[목표 풍속 0-3]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;차일드 락
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Topic: [디바이스 키]/qstate&lt;/li&gt;
&lt;li&gt;Value: cmd=&lt;span style=&quot;background-color: #ffffff; color: #24292f;&quot;&gt;childLock&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;amp;cl=[끄기,켜기 0,1]&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;산토끼 재생(아들을 위한 이스터에그)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Topic: [디바이스 키]/qstate&lt;/li&gt;
&lt;li&gt;Value: cmd=&lt;span style=&quot;background-color: #ffffff; color: #0a3069;&quot;&gt;tp_stk_bp&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이벤트 (subscribe)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;heartbeat - 5초간격&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Topic: [디바이스 키]/heartbeat&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Value: cmd=hb&amp;amp;t=[디바이스 동작시간(분)]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상태 이벤트
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;상태가 바뀔때 전송&lt;/li&gt;
&lt;li&gt;Topic: [디바이스 키]/state&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Value: cmd=state&amp;amp;tm=[목표 풍속 0-3]&amp;amp;cm=[현재 풍속 0-3]&amp;amp;cl=[차일드락 0,1]&amp;amp;fr=[필터 리셋 모드 0,1] &amp;amp;v=[버전]&amp;amp;ip=[ip 주소]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 실사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MQTT 명령어를 전송하여 테스트 하는 모습.&amp;nbsp;&lt;/p&gt;
&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://youtu.be/XkLjeYqjWbU&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/XkLjeYqjWbU&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=XkLjeYqjWbU&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cT8ZHI/hyN0lA2kvW/mjSEkFYoBJTBKddric6P1K/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/XkLjeYqjWbU&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;&lt;/p&gt;
&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://youtu.be/fEDPs0-THl0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/fEDPs0-THl0&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=fEDPs0-THl0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/n6xmO/hyN0lnvTkE/SCeQCNqKJSyMdqPenDjYkk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/fEDPs0-THl0&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;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>ESP8266</category>
      <category>Iot</category>
      <category>NODEMCU</category>
      <category>아두이노</category>
      <category>아두이노 프로젝트</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/102</guid>
      <comments>https://yagnu.tistory.com/102#entry102comment</comments>
      <pubDate>Mon, 11 Apr 2022 13:03:39 +0900</pubDate>
    </item>
    <item>
      <title>ESP8266, ESP32 에 웹 설정 마법사 붙이기</title>
      <link>https://yagnu.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 가끔씩 필요에 의해서 만드는 IOT 기기 프로젝트를 진행하면 제일 고민스럽고 귀찮은 것 중에 하나가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WiFi 연결과 서버 연결 설정을 만드는 부분이다.&amp;nbsp; 이 프로젝트를 완성하기 전에는 소스코드 내에 하드코딩으로 무선 AP 의 SSID와 패스워드를 삽입해 버리거나 웹 서버를 동작시켜서 GET 파라미터 값으로 SSID 와 패스워드 그리고 mqtt 서버 주소를 입력하는 방법을 사용해왔다. 하지만, 최종 연결 상태를 확인하거나 추가 옵션을 붙이기가 만만치 않고, 중구난방으로 생겨나는 자작 IOT 기기들의 설정 방법들이 일관되지 않아서 유지 보수가 어렵다는 단점이 있었다.&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;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;설정페이지.png&quot; data-origin-width=&quot;3512&quot; data-origin-height=&quot;1166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5jjIX/btrwRxkWND8/pHYbpqV8gADMY7o4r70mz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5jjIX/btrwRxkWND8/pHYbpqV8gADMY7o4r70mz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5jjIX/btrwRxkWND8/pHYbpqV8gADMY7o4r70mz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5jjIX%2FbtrwRxkWND8%2FpHYbpqV8gADMY7o4r70mz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3512&quot; height=&quot;1166&quot; data-filename=&quot;설정페이지.png&quot; data-origin-width=&quot;3512&quot; data-origin-height=&quot;1166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소스코드 및 사용방법: &lt;a href=&quot;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1678076574919&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 - ice3x2/ESP-Web-Configuration-Wizard: This is a wizard tool that allows you to configure the ESP8266, ESP32 WiFi connect&quot; data-og-description=&quot;This is a wizard tool that allows you to configure the ESP8266, ESP32 WiFi connection, NTP, MQTT, and Options via web. - GitHub - ice3x2/ESP-Web-Configuration-Wizard: This is a wizard tool that all...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&quot; data-og-url=&quot;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dNvFH0/hyRQunTP8u/O2FUQPdq3LXzad7Yd41gI0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ice3x2/ESP-Web-Configuration-Wizard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dNvFH0/hyRQunTP8u/O2FUQPdq3LXzad7Yd41gI0/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; data-ke-size=&quot;size16&quot;&gt;GitHub - ice3x2/ESP-Web-Configuration-Wizard: This is a wizard tool that allows you to configure the ESP8266, ESP32 WiFi connect&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This is a wizard tool that allows you to configure the ESP8266, ESP32 WiFi connection, NTP, MQTT, and Options via web. - GitHub - ice3x2/ESP-Web-Configuration-Wizard: This is a wizard tool that all...&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;b&gt;connect()&lt;/b&gt; 함수를 호출하였을 때, 또는 &lt;b&gt;startConfigurationMode()&lt;/b&gt; 함수를 직접 호출하였을 때 동작한다.&amp;nbsp;&lt;br /&gt;&amp;nbsp; 주요 기능으로 WiFi AP 의 SSID 와 패스워드를 설정하고, 시간을 동기화하기 위한 NTP 서버, MQTT 접속 정보를 설정할 수 있다. 또 커스텀 옵션을 추가할 수 있으며, 옵션 값 체크를 할 수 있는 API를 제공한다.&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;size16&quot;&gt;코드도 대충 만들고, 설정하는 과정에서 중요하지 않은 버그도 조금 있지만 그럭저럭 잘 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 연결이 끊어질 경우 다시 동작하도록 하는 로직 덕분에 한 번 연결되면 안정적으로 커넥션을 유지한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>ESP</category>
      <category>ESP32</category>
      <category>ESP8266</category>
      <category>Iot</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/101</guid>
      <comments>https://yagnu.tistory.com/101#entry101comment</comments>
      <pubDate>Tue, 22 Mar 2022 12:54:25 +0900</pubDate>
    </item>
    <item>
      <title>C# 에서 ms office 문서 PDF 로 변환하기</title>
      <link>https://yagnu.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;참조 추가 =&amp;gt; COM 에서 다음 항목들을 추가한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;오피스참조.png&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRF410/btrrDpeiJ2i/yP5KUT6GkdWxcKpfnYJO20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRF410/btrrDpeiJ2i/yP5KUT6GkdWxcKpfnYJO20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRF410/btrrDpeiJ2i/yP5KUT6GkdWxcKpfnYJO20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRF410%2FbtrrDpeiJ2i%2FyP5KUT6GkdWxcKpfnYJO20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;164&quot; data-filename=&quot;오피스참조.png&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 아래의 코드를 사용하면 끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 보안 문제가 있는 형식은 예외를 발생시키는데 이를 강제로 열 수 있는 방법을 찾아야한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1642999274524&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; public static void WordToPDF(string docPath, string exportPath)
        {
            Microsoft.Office.Interop.Word.Document wordDocument;
            Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
            // 경로, 파일 변환 대화상자 표시 안 함, 읽기 전용으로 열기
            wordDocument = appWord.Documents.Open(docPath, true, true);
            wordDocument.ExportAsFixedFormat(exportPath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
            wordDocument.Close(false);
            appWord.Quit();
        }


        public static void ExcelToPDF(string xlsPath, string exportPath)
        {
            Microsoft.Office.Interop.Excel.Application appExcel = new Microsoft.Office.Interop.Excel.Application();
            appExcel.Visible = false;
            Microsoft.Office.Interop.Excel.Workbook workbook;
            workbook = appExcel.Workbooks.Open(xlsPath, Type.Missing, true);
            workbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, exportPath, Microsoft.Office.Interop.Excel.XlFixedFormatQuality.xlQualityStandard, true, true, Type.Missing, Type.Missing, false, Type.Missing);
            workbook.Close(false);
            appExcel.Quit();
        }


        public static void PPTToPDF(string pptPath, string exportPath)
        {
            Microsoft.Office.Interop.PowerPoint.Application appPPT = new Microsoft.Office.Interop.PowerPoint.Application();
            Microsoft.Office.Interop.PowerPoint.Presentation presentation = appPPT.Presentations.Open(pptPath, Microsoft.Office.Core.MsoTriState.msoTrue,
                                                                                          Microsoft.Office.Core.MsoTriState.msoTrue,
                                                                                          Microsoft.Office.Core.MsoTriState.msoFalse);

            presentation.ExportAsFixedFormat(exportPath, Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF,
            Microsoft.Office.Interop.PowerPoint.PpFixedFormatIntent.ppFixedFormatIntentPrint,
            Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder.ppPrintHandoutVerticalFirst,
            Microsoft.Office.Interop.PowerPoint.PpPrintOutputType.ppPrintOutputSlides, Microsoft.Office.Core.MsoTriState.msoFalse, null,
            Microsoft.Office.Interop.PowerPoint.PpPrintRangeType.ppPrintAll, string.Empty, true, true, true, true, false, Type.Missing);

            presentation.Close();
            appPPT.Quit();
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/기타,연구</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/100</guid>
      <comments>https://yagnu.tistory.com/100#entry100comment</comments>
      <pubDate>Mon, 24 Jan 2022 13:42:35 +0900</pubDate>
    </item>
    <item>
      <title>간단한 IOT 무드등 만들기</title>
      <link>https://yagnu.tistory.com/99</link>
      <description>&lt;p&gt;예젠에 회사 블로그에 올렸던 글...&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;준비물&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;1. NodeMCU v2&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; WIFI 기능이 탑재된&amp;nbsp;가성비 좋은 마이크로 컨트롤러 보드입니다.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C18D4A5DCC1A540D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C18D4A5DCC1A540D&quot; width=&quot;320&quot; height=&quot;204&quot; filename=&quot;Nodemcu_amica_bot_02.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;2. USB 와이어 LED&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 오픈마켓 등에서 'USB 와이어 LED' 로 검색하여 구입 가능합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9908CA4B5DCC1A670D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9908CA4B5DCC1A670D&quot; width=&quot;320&quot; height=&quot;226&quot; filename=&quot;USB_W_LED.PNG&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;3. 브레드보드와&amp;nbsp;점퍼 케이블&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 납땜 없이 전자 회로를 구성하고 테스트 할 수 있습니다.&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D53E335DCC1A830C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D53E335DCC1A830C&quot; width=&quot;320&quot; height=&quot;213&quot; filename=&quot;400_points_breadboard.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;4. NPN 트렌지스터 - 2N2222&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998BC6385DCC1A9922&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998BC6385DCC1A9922&quot; width=&quot;320&quot; height=&quot;247&quot; filename=&quot;2n2222.PNG&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;NodeMCU v2 소개&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;NodeMCU v2 에는 중국 에스프레시프 시스템사에서 개발된 wifi 기능이 탑재된&amp;nbsp;MCU, ESP8266-12E 모듈이 탑재되었습니다. 이 기기의 스펙을 간략하게 적어보면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;nbsp; 802.11 b/g/n 프로토콜&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;nbsp; Wi-Fi Direct (P2P), soft-AP&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;-&amp;nbsp; TCP/IP 프로토콜&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 80Mhz 클럭 스피드를 갖는 저전력 32bit CPU&amp;nbsp;통합.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 3.3v 전원으로 동작. (입력전원&amp;nbsp; 5-12v)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 디지털 입출력핀(GPIO)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- UART, SPI, I2C 프로토콜 지원&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 64Kbyte SRAM&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;- 4MB 플래시 메모리&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 아두이노 부트로더를 올리고 C/C++ 를 이용하여 편하게 개발할 수 있으며 가격도 5000원 정도로 참 저렴합니다.&amp;nbsp;ESP8266-12E 는 시리얼 통신 방식 중에 하나인 UART로 프로그램을 올리거나 디버깅 할 수 있지만,&amp;nbsp;UART 와 USB 통신을&amp;nbsp;변환하는 CP2012 드라이버 칩을 탑재하고 있습니다.&amp;nbsp; 전원부는 AMS1117 를 이용하여 5v에서 12v까지의 전압을 갖는 전원을 3.3v으로 변환하여 공급해줍니다. 하지만, 3.3v를 이용하는 탓에&amp;nbsp;5v를&amp;nbsp;사용하는 센서나 기타 개발 보드 등의&amp;nbsp;기기와 맞물려 사용할 때는 스위치 회로를 구성해야 합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 아래 그림은 NodeMCU v2 의 핀과 역할에 대한 맵 입니다. 주로 사용하게 될 디지털 입출력(GPIO) 핀은 출력(OUTPUT)모드에서 HIGH 상태와 LOW 상태를 가질 수 있습니다. HIGH 상태에서는&amp;nbsp;해당 핀에 3.3v의 전압을 갖는 전류가 흐르게 되지만, LOW 상태에서는 전류가 흐르지 않습니다.&amp;nbsp;&amp;nbsp;GPIO 핀에는 각각의 번호가 있습니다. 아두이노 IDE 를 이용하여 코딩할 때, 이 핀 번호를 지정하여 직접 제어할 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 616px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B3EB4C5DCB5A6B30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B3EB4C5DCB5A6B30&quot; width=&quot;616&quot; height=&quot;519&quot; filename=&quot;Nodemcu_pins.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step1. 아두이노 IDE 기본 설정&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;NodeMCU 에서 아두이노를 사용하기 위해서는 다음과 같은 기본 설정 과정을 거쳐야 합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(1)&amp;nbsp;&lt;a href=&quot;https://www.arduino.cc/&quot;&gt;https://www.arduino.cc/&lt;/a&gt;&amp;nbsp; 페이지에 접속후 Software -&amp;gt; Downloads 페이지에 들어가 아두이노 IDE 최신 버전을 다운로드 받습니다. Windows10 운영체제인 경우 스토어에서 아두이노 최신 버전을 받을 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;(2) 아두이노 IDE 를 실행한 뒤 상단 메뉴의 파일 -&amp;gt; 환경설정 에 들어갑니다. 그 뒤 아래 그림처럼 '추가적인 보드 매니저 URLs' 에 주소&amp;nbsp;https://arduino.esp8266.com/stable/package_esp8266com_index.json 를 추가하고 확인 버튼을 누릅니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D24F4C5DCA14F915&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D24F4C5DCA14F915&quot; width=&quot;820&quot; height=&quot;558&quot; filename=&quot;a1.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;(3) 상단메뉴 툴 -&amp;gt; 보드 -&amp;gt; 보 매니저...(가장 상단)&amp;nbsp;에 들어갑니다. 아래 그림처럼 보드 매니저 창이 뜨는 것을 확인할 수 있습니다. 검색창에 'esp8266' 를 입력하고 나온 'esp8266 by ESP8266 Community' 패키지를 설치합니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D75B355DCA11CA41&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D75B355DCA11CA41&quot; width=&quot;820&quot; height=&quot;560&quot; filename=&quot;스크린샷, 2019-11-12 10-53-06.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;(3) 마지막으로 보드 설정을 해줍니다. 여기서는 NodeMCU v2 를 사용할 것이기 때문에 아래와 같이 설정해 줍니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CEA13F5DCA176E1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CEA13F5DCA176E1A&quot; width=&quot;820&quot; height=&quot;559&quot; filename=&quot;a2-1.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;Step2. 웹서버 만들기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;상단 메뉴의 '툴 -&amp;gt; 보드' 에서 NodeMCU 1.0&amp;nbsp; 을 선택하면 '파일 -&amp;gt; 예제' 메뉴에&amp;nbsp;ESP8266WebServer 라는 항목이 생깁니다.&amp;nbsp; 예제를 통하여 간단한 웹서버를 바로 만들어볼수도 있습니다. 여기서는&amp;nbsp;IOT 무드등을 컨트롤하기 위한 웹 서버를 만들어보려고 합니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;우선 간단한 HTTP API 를 호출할 수 있도록 구현해 보았습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;표 : HTTP API 정의&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 113px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;패스&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 141px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;파라미터&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 302px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;반환값&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 227px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp;설명&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 113px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;/state&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 141px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;없음&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 302px; height: 69px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot; colspan=&quot;1&quot; rowspan=&quot;3&quot;&gt;&lt;p&gt;&amp;nbsp; {&quot;isOn&quot; : true | false, &quot;brightness&quot; : 1-100 }&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 227px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;상태 값(전원, 밝기)을 가져온다.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 113px; height: 21px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;/onoff&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 141px; height: 21px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;isOn=[true | false]&amp;nbsp;&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 227px; height: 21px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;전원을 끄거나 켠다.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 113px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;/brightness&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 141px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;value=[1-100]&amp;nbsp;&lt;/p&gt;&lt;/td&gt;

&lt;td style=&quot;width: 227px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;밝기를 조절한다.&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;코드: API 서버&lt;/p&gt;&lt;pre style=&quot;background: #f7f7f7; color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#include &amp;lt;ESP8266WiFi.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#include &amp;lt;WiFiClient.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#include &amp;lt;ESP8266WebServer.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#ifndef STASSID&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#define STASSID &quot;공유기 이름&quot;&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#define STAPSK  &quot;패스워드&quot;&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#endif&lt;/span&gt;

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;char&lt;/span&gt; *_ssid = STASSID;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;char&lt;/span&gt; *_password = STAPSK;

ESP8266WebServer _server(80);

&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// on/off 상태&lt;/span&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;bool&lt;/span&gt; _isOn = false; 
&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 밝기 &lt;/span&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;int&lt;/span&gt; _brightness = 100;


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setup(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt;) {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 시리얼 통신 속도(baud rate) 설정.&lt;/span&gt;
  Serial.begin(115200);

  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// WIFI 동작모드. &lt;/span&gt;
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// WIFI_STA, WIFI_AP, WIFI_AP_STA 모드 중에 하나를 사용할 수 있습니다.&lt;/span&gt;
  WiFi.mode(WIFI_STA);
  
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 연결할 WIFI AP의 ssid 값과 패스워드를 설정합니다.&lt;/span&gt;
  WiFi.begin(_ssid, _password);
  Serial.println(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;&quot;&lt;/span&gt;);

  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// WIFI AP에 연결될 때까지 기다립니다.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;while&lt;/span&gt; (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;.&quot;&lt;/span&gt;);
  }
  

  Serial.println(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;&quot;&lt;/span&gt;);
  Serial.print(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Connected to &quot;&lt;/span&gt;);
  Serial.println(_ssid);
  Serial.print(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;IP address: &quot;&lt;/span&gt;);
  Serial.println(WiFi.localIP());

  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 상태 확인 API path 및 함수 설정&lt;/span&gt;
  _server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/state&quot;&lt;/span&gt;, onRequestState);
  
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// LED램프 on/off API path 및 함수 설정&lt;/span&gt;
  _server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/onoff&quot;&lt;/span&gt;, onRequestOnOff);
  
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 밝기조절 API path 및 함수 설정&lt;/span&gt;
  _server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/brightness&quot;&lt;/span&gt;, onRequestBrightness);

  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 404 에러 페이지&lt;/span&gt;
  _server.onNotFound(onNotFound);
  
  _server.begin();
  Serial.println(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;HTTP _server started&quot;&lt;/span&gt;);
}


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; loop(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt;) {
  _server.handleClient();
}

&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 현재 상태 값을 JSON 형태로 반환합니다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestState() {
   String result = String(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;{\&quot;isOn\&quot;:&quot;&lt;/span&gt;) + (_isOn ? &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;true&quot;&lt;/span&gt;: &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;false&quot;&lt;/span&gt;);
          result += String(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;,\&quot;brightness\&quot;:&quot;&lt;/span&gt;) + _brightness + &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;}&quot;&lt;/span&gt;;

   _server.sendHeader(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Access-Control-Allow-Origin&quot;&lt;/span&gt;, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;*&quot;&lt;/span&gt;);
   _server.send(200, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;application/json&quot;&lt;/span&gt;,result); 
}


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestOnOff() {
   &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 파라미터 'isOn'의 값을 가져옵니다.&lt;/span&gt;
   _isOn = String(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;true&quot;&lt;/span&gt;) == _server.arg(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;isOn&quot;&lt;/span&gt;);
   setOnOff();
   onRequestState();
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestBrightness() {
   &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 파라미터 'value' 의 값을 가져옵니다.&lt;/span&gt;
   &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 이 값을 1 부터 100까지의 값을 가질 수 있도록 합니다.&lt;/span&gt;
   &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;int&lt;/span&gt; value = (String(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;&quot;&lt;/span&gt;) + _server.arg(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;value&quot;&lt;/span&gt;)).toInt();
   &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt;(value &amp;lt; 1) value = 1;
   &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt;(value &amp;gt; 100) value = 100;
   _brightness = value;
   setBright();
   onRequestState();
}



&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setOnOff() {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 추후 구현을 위하여 비워놓습니다.&lt;/span&gt;
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setBright() {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 추후 구현을 위하여 비워놓습니다.&lt;/span&gt;
}


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onNotFound() {
 
  String message = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;404 File Not Found\n\n&quot;&lt;/span&gt;;
  message += &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;URI: &quot;&lt;/span&gt;;
  message += _server.uri();
  message += &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;\nMethod: &quot;&lt;/span&gt;;
  message += (_server.method() == HTTP_GET) ? &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;GET&quot;&lt;/span&gt; : &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;POST&quot;&lt;/span&gt;;
  message += &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;\nArguments: &quot;&lt;/span&gt;;
  message += _server.args();
  message += &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
  
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;uint8_t&lt;/span&gt; i = 0; i &amp;lt; _server.args(); i++) {
    message += &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot; &quot;&lt;/span&gt; + _server.argName(i) + &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;: &quot;&lt;/span&gt; + _server.arg(i) + &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;\n&quot;&lt;/span&gt;;
  }

  _server.send(404, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;text/plain&quot;&lt;/span&gt;, message);
}&lt;/p&gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이 코드를 NodeMCU 에 업로드하기&amp;nbsp;위하여 USB 5 pin 케이블을 아래 사진과&amp;nbsp;같이 연결하고 아두이노 IDE 상단 메뉴의 '툴 -&amp;gt; 포트' 에서 새로 추가된 포트를 선택합니다. 그 다음 '스케치 -&amp;gt; 업로드' 를 선택하여 기기에 코드를 올릴 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9963F93C5DCAB3DD27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9963F93C5DCAB3DD27&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;20191112_221116.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위 코드를 자세히 보면 setup() 함수와 loop() 함수가 있는 것을 발견할 수 있습니다. 이 두개의 함수는 아두이노 생명주기를 담당합니다.&amp;nbsp; setup() 이벤트 함수 내부에서 디지털 입출력 핀 및 라이브러리를 초기화 할 수 있으며, 최초 한 번반 실행됩니다. 그 이후 loop() 이벤트 함수가 무한 연속으로 호출됩니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 745px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9943B83A5DCAB8160E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9943B83A5DCAB8160E&quot; width=&quot;745&quot; height=&quot;521&quot; filename=&quot;아두이노 생명주기 (1).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;아두이노 디버깅은 주로 시리얼 통신(UART)과 아두이노 IDE 에 포함된&amp;nbsp;시리얼 모니터를 통하여 할 수 있습니다. 시리얼 모니터 창은&amp;nbsp;상단 메뉴의 '툴 -&amp;gt; 시리얼 모니터' 를 선택하여 띄울 수 있습니다. 시리얼 통신을 사용하기 위해서는 setup() 함수 내부에서 Serial.begin(int) 를 호출하여 초기화 시켜줘야 합니다. Serial.begin(int) 함수의 인자값으로 시리얼 통신 속도(baud rate)를 줘야하며, 시리얼 모니터 우측 하단에서 동일한 값으로(아래 이미지 빨간 밑줄)&amp;nbsp;맞춰줘야 내용이 제대로 출력됩니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;방금 올렸던 API 서버 코드가 제대로 동작하는지 확인하기 위하여 시리얼 모니터를 띄워보았습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F671485DCABAD72C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F671485DCABAD72C&quot; width=&quot;820&quot; height=&quot;559&quot; filename=&quot;s2-1.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;192.168.10.39 라는 ip 주소를 할당받았음을 알 수 있습니다. 웹 서버를 만들어 기기를 컨트롤 하는 방식은, 조만간 소개할 MQTT 활용법에 비하여 여러가지 불편한점들이 많습니다. 특히 무선 AP 에 접속한 이후 DHCP 를 통하여 동적 ip 주소를 받는 경우 매번 이렇게 시리얼 모니터를 통하여 할당받은 ip 주소를 확인해야 합니다. 가능하다면, 공유기 등의 DHCP 장비 환경 설정에서 접속된 NodeMCU 기기의 맥 어드레스에 특정 ip 를 고정 할당하도록 설정해 놓는 것이 좋습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;아래 코드를 wifi 연결 완료 부분&amp;nbsp;뒤에 추가하면 시리얼 모니터를 통하여 맥 어드레스도 확인할 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;font-size:8pt;background:#fafafa;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;Serial.print(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;MAC: &quot;&lt;/span&gt;);
Serial.println(WiFi.macAddress());&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;시리얼 모니터로 알아낸 ip 주소로&amp;nbsp;각각의 API 를 호출해 보았습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913EC3D5DCA83830F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913EC3D5DCA83830F&quot; width=&quot;820&quot; height=&quot;237&quot; filename=&quot;s3-4.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AFCB4B5DCA83830B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AFCB4B5DCA83830B&quot; width=&quot;820&quot; height=&quot;237&quot; filename=&quot;s2-3.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992F74365DCA838335&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992F74365DCA838335&quot; width=&quot;820&quot; height=&quot;237&quot; filename=&quot;s2-2.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;모두 정상 동작하는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위 API 를 UI 를 통하여 호출할 수 있도록 간단한 웹 페이지를 만들어 보았습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 601px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B2D1465DCACE3522&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B2D1465DCACE3522&quot; width=&quot;601&quot; height=&quot;894&quot; filename=&quot;webui.PNG&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;NodeMCU v2 의 ESP8266-12E 는 플래시 메모리가 4Mbyte 로 다른 아두이노 기기들에 비해 적은 편은 아니지만, 그래도 복잡하고 화려한 웹 페이지를 넣기에는 한계가 있습니다. 따라서 웹 페이지 코드를 아래처럼 간단하게 구성 하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;코드 : index.html&lt;/p&gt;&lt;pre style=&quot;font-size:9pt;background:#fafafa; color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&amp;lt;html lang=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;en&quot;&lt;/span&gt;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&amp;gt;
    &amp;lt;meta name=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;viewport&quot;&lt;/span&gt; content=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;width=device-width, user-scalable=no&quot;&lt;/span&gt;&amp;gt;
    &amp;lt;title&amp;gt;Simple Mood Lamp&amp;lt;/title&amp;gt;
    &amp;lt;link rel=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; type=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;text/css&quot;&lt;/span&gt; href=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;./index.css&quot;&lt;/span&gt; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;out-box&quot;&lt;/span&gt;&amp;gt;
        &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;content&quot;&lt;/span&gt;&amp;gt;

            &amp;lt;div&amp;gt;
           &amp;lt;input type=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;button&quot;&lt;/span&gt; value=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;&quot;&lt;/span&gt; id=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;onoff-button&quot;&lt;/span&gt; onclick=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;onClickOnOffButton()&quot;&lt;/span&gt;&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;brightness-content&quot;&lt;/span&gt;&amp;gt;
                    &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;float-parent&quot;&lt;/span&gt;&amp;gt;
                        &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;float-left&quot;&lt;/span&gt;&amp;gt;
                                &amp;lt;input type=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;range&quot;&lt;/span&gt; min=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;1&quot;&lt;/span&gt; max=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;100&quot;&lt;/span&gt; value=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;0&quot;&lt;/span&gt; 
                                     id=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;brightness-slider&quot;&lt;/span&gt; oninput=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;onInputSlider()&quot;&lt;/span&gt;
                                      onchange=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;onChangeBrightness()&quot;&lt;/span&gt;&amp;gt;
                        &amp;lt;/div&amp;gt;
                        &amp;lt;div class=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;float-left&quot;&lt;/span&gt; id=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;brightness-value&quot;&lt;/span&gt;/&amp;gt;
                    &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script  src=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;https://code.jquery.com/jquery-3.4.1.min.js&quot;&lt;/span&gt; 
         integrity=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=&quot;&lt;/span&gt;  
         crossorigin=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;anonymous&quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;index.js&quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;코드 : index.js&lt;/p&gt;&lt;pre style=&quot;font-size:9pt;background:#fafafa;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;html body {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;padding&lt;/span&gt;: 0;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;margin&lt;/span&gt;: 0;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 100%;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;height&lt;/span&gt;: 100%;

}
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;.out-box&lt;/span&gt; {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;display&lt;/span&gt;: table;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;position&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;fixed&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 100%;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;height&lt;/span&gt;: 100%;

}
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;.content&lt;/span&gt; {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;display&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;table-cell&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;vertical-align&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;middle&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;text-align&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;center&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 100%;
}


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;.brightness-content&lt;/span&gt; {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;display&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;inline&lt;/span&gt;-&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;block&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;margin-top&lt;/span&gt;: 20px;
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;.float-left&lt;/span&gt; {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;float&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;left&lt;/span&gt;
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;.float-parent&lt;/span&gt; {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;height&lt;/span&gt;: 30px;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 100%;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;text-align&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;center&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;float&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;none&lt;/span&gt;;
}

#brightness-slider {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 200px;
}

#onoff-button {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;background-color&lt;/span&gt;: gray; &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;/* Green */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;border&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;none&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;color&lt;/span&gt;: white;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;width&lt;/span&gt;: 150px;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;height&lt;/span&gt;: 45px;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;display&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;inline&lt;/span&gt;-&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;block&lt;/span&gt;;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;font-size&lt;/span&gt;: 20px;
}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;코드 : index.css&lt;/p&gt;&lt;pre style=&quot;background:#fafafa;color: rgb(51, 51, 51);font-size:9pt;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; _brightnessSliderEle = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; _brightnessValueEle = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; _buttonEle = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; _state = &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;null&lt;/span&gt;;


$(document).ready(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt;() {
    init();
    onState();
});

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; init() {
    _brightnessSliderEle = $(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;'#brightness-slider'&lt;/span&gt;);
    _brightnessValueEle = $(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;'#brightness-value'&lt;/span&gt;);
    _buttonEle = $(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;'#onoff-button'&lt;/span&gt;);

}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; onState() {
    $.get(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;http://192.168.10.39/state&quot;&lt;/span&gt;).done(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (data)  {
        setState(data);
    }).fail(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (err) {

    });
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; setState(state) {
    _state = state;
    setBrightness(state.brightness);
    setOnOff(state.isOn);
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; onClickOnOffButton() {
    _state.isOn = !_state.isOn;
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; param = {isOn : _state.isOn };
    $.post(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;http://192.168.10.39/onoff&quot;&lt;/span&gt;,param ).done(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (data)  {
        setState(data);
    }).fail(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (err) {

    });
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; onChangeBrightness() {
    _state.brightness = _brightnessSliderEle.val();
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;var&lt;/span&gt; param = {value : _state.brightness};
    $.post(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;http://192.168.10.39/brightness&quot;&lt;/span&gt;,param ).done(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (data)  {
        setState(data);
    }).fail(&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (err) {

    });
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; onInputSlider() {
    _brightnessValueEle.text(_brightnessSliderEle.val() + &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;%&quot;&lt;/span&gt;);
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; setBrightness(value) {
    _brightnessValueEle.text(value + &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;%&quot;&lt;/span&gt;);
    _brightnessSliderEle.val(value);
}

&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; setOnOff(isOn) {
    &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt;(isOn === &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;true&lt;/span&gt;) {
        _buttonEle.val(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;ON&quot;&lt;/span&gt;);
        _buttonEle.css(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;background-color&quot;&lt;/span&gt;,&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#4CAF50&quot;&lt;/span&gt;)
    } &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;else&lt;/span&gt; {
        _buttonEle.val(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;OFF&quot;&lt;/span&gt;);
        _buttonEle.css(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;background-color&quot;&lt;/span&gt;,&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#f54b42&quot;&lt;/span&gt;)
    }
}&lt;/pre&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위 세개의 웹 소스 코드를 압축하여 API 서버 코드 상단에 다음과 같이 추가합니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#define INDEX_CSS &lt;span style=&quot;color: rgb(102, 37, 0);&quot;&gt;&quot;html body{padding:0;margin:0;width:100%;height:100%}.out-box{display:table;position:fixed;width:&lt;/span&gt;....&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#define INDEX_JS &lt;span style=&quot;color: rgb(102, 37, 0);&quot;&gt;&quot;var _brightnessSliderEle=null,_brightnessValueEle=null,_buttonEle=null,_state=null;function init(....&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;#define INDEX_HTML &lt;span style=&quot;color: rgb(102, 37, 0);&quot;&gt;&quot;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html lang='en'&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta charset='UTF-8'&amp;gt;&amp;lt;meta name='viewport' content='widt ....&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그리고, 아래와 같이 코드를 추가하여 루트 경로로 접속할 때 웹페이지를 출력할 수 있도록 합니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;setup() {

&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// ... 중략 ... &lt;/span&gt;

_server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/&quot;&lt;/span&gt;, onRequestIndexHTML);
_server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/index.css&quot;&lt;/span&gt;, onRequestIndexCSS);
_server.on(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;/index.js&quot;&lt;/span&gt;, onRequestIndexJS);

&lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// ...&lt;/span&gt;
}


&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestIndexHTML() {
  _server.send(200, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;text/html &quot;&lt;/span&gt;,INDEX_HTML); 
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestIndexJS() {
  _server.send(200, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;application/javascript &quot;&lt;/span&gt;,INDEX_JS); 
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; onRequestIndexCSS() {
  _server.send(200, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;text/css&quot;&lt;/span&gt;,INDEX_CSS); 
}&lt;/pre&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아직 LED 조명은&amp;nbsp;붙이지 않았지만, 웹페이지로 제어할 수 있도록 구현 하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예제 다운로드 :&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step3. LED 조명 제어하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;와이어 LED 조명에 전원을 연결한 모습입니다. USB 의 5v 로 동작하지만 상당히 밝은편 입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C1F33A5DCACFCF2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C1F33A5DCACFCF2F&quot; width=&quot;720&quot; height=&quot;521&quot; filename=&quot;20191022_145723.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;니퍼를 이용하여 와이어 LED 조명의 USB 전원 케이블을 끊고, 내부에 있는 구리 케이블을 꺼내서 가늘게 말았습니다. 브레드보드 구멍에 넣기 위해서 끝을 뾰족하게 만들어야 합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 735px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A542345DCAD02812&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A542345DCAD02812&quot; width=&quot;735&quot; height=&quot;458&quot; filename=&quot;20191022_150214.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;브레드 보드에 NodeMCU 를 붙이고 점퍼 케이블을 이용하여 회로를 구성해줍니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992820425DCAD87242&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992820425DCAD87242&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;20191113_005921 (1).jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위 사진에&amp;nbsp;나온 회로를 fritzing 을 이용하여 그려보면 아래와 같습니다. LED 전구는 와이어 조명을 나타냅니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993E61505DCAD7A60A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993E61505DCAD7A60A&quot; width=&quot;820&quot; height=&quot;862&quot; filename=&quot;Untitled Sketch_bb.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 프로젝트에서 사용되는 NPN 트렌지스터는 2N2222 를 사용하였습니다. NPN 트랜지스터를 사용하는 이유는 다음과 같습니다.&amp;nbsp;와이어 조명은 5v 사용시 300mA 전류를 소비하지만 NodeMCU 의 입출력 핀은 3.3v 에 고작 12mA 으로 동작합니다. 따라서 스위치 역할을 해주는 NPN 트렌지스터를 사용하는 것 입니다.&amp;nbsp; 즉, 낮은 전압과 전류로 높은 전압과 전류를 사용하는 기기를 컨트롤 하기 위함입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 디지털 회로에서 NPN 트렌지스터의 역할은 아래 그림과 같이 전류가 흐를 수 있도록 스위칭해주는 것 입니다. collector, emitter, base 핀의 위치는 종류와 제조사마다 다르므로 사용하기 전에 데이터 시트를 확인해야 합니다. 제가 사용한 2N2222 NPN 트렌지스터는 평평한쪽 기준으로 왼쪽부터 collector, base, emitter 입니다.&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;(참고&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;&amp;nbsp;- &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;NPN 트랜&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;지스터의 과열과 파손을 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;방지하기 위하여 Base 에 저항을 연결해야 합니다. 이 예제에서 사용한 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;2N2222 는&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;&amp;nbsp;Base 와 Emitter 간의 전위차가 0.65v 이상을 넘어가면 안됩니다.&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;&amp;nbsp;하지만, Base 단에 저항을 연결하면 LED 조명의 밝기가 어두워지므로 트랜지스터가 과열되는 것을 감안하고 이런 회로를 구성 하였습니다. 현재 회로대로 구성하고 확인해보니&amp;nbsp;0.7v 가 나옵니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 274px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9970EA4E5DCAD97610&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9970EA4E5DCAD97610&quot; width=&quot;274&quot; height=&quot;277&quot; filename=&quot;2227203F543B2ACF0A (1).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위 회도로에서 보이는 것과 같이 트렌지스터의 Base 를 NodeMCU 의 'D1' 핀에 연결 하였습니다. 'D1' 핀은 5 라는 번호를 갖고 있습니다.&amp;nbsp; 아주 간단한 입출력 테스트 위하여 아두이노 IDE 의 기본 예제인 Blink 를 열어봅니다. 상단 메뉴에서&amp;nbsp;&amp;nbsp;'파일 -&amp;gt; 예제 -&amp;gt; Basics -&amp;gt; Blink'&amp;nbsp; 순서대로 들어가서 예제를 불러올 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 616px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B3EB4C5DCB5A6B30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B3EB4C5DCB5A6B30&quot; width=&quot;616&quot; height=&quot;519&quot; filename=&quot;Nodemcu_pins.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기본 예제에서 LED 번호만 우리가 연결한 5번 디지털&amp;nbsp;출력핀으로 변경합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setup() {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 5번 디지털 핀 출력 모드로 초기화.&lt;/span&gt;
  pinMode(5, OUTPUT);
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; loop() {
  digitalWrite(5, HIGH); &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// LED 조명 켜기 &lt;/span&gt;
  delay(1000);           &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 1000ms 딜레이       &lt;/span&gt;
  digitalWrite(5, LOW);  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// LED 조명 끄기&lt;/span&gt;
  delay(1000);           &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 1000ms 딜레이 &lt;/span&gt;
}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 코드를 업로드하여 실행하면 1초 간격으로 LED 조명이 깜빡이는 것을 볼 수 있습니다.&lt;/p&gt;&lt;p&gt;다음으로 밝기 조절과 관련된 테스트입니다. 우선 설명에 앞서 관련 코드를&amp;nbsp;올리고 테스트부터&amp;nbsp;해보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setup() {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 5번 디지털 핀 출력 모드로 초기화&lt;/span&gt;
  pinMode(5, OUTPUT);
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; loop() {
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 밝아졌다 어두워졌다를 반복하게 합니다. &lt;/span&gt;
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 0 : 꺼짐, 1023 : 가장 밝게. &lt;/span&gt;
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;int&lt;/span&gt; i = 1; i &amp;lt; 1024; ++i) {
    analogWrite(5, i);
    delay(1);
  }
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;int&lt;/span&gt; i = 1023; i &amp;gt; 0; --i) {
    analogWrite(5, i);
    delay(1);
  }
}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;아래 영상은 위 코드를 올려서 실행한&amp;nbsp;모습입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이런 밝기 조절은&amp;nbsp;analogWrite() 함수를 이용하여 할 수 있습니다.&lt;/p&gt;&lt;p&gt;digitalWrite() 함수는 단지 끄고 켜는 것 (HIGH, LOW) 밖에 할 수 없습니다. 하지만, analogWirte() 는 0에서 1023 까지의 총 1024 단계를 입력할 수 있습니다. &lt;span style=&quot;color: rgb(140, 140, 140);&quot;&gt;(NodeMCU (ESP8266-12E) 는 1024 단계가 기본 값이지만, 다른 아두이노 기기들은 기본 255단계를 갖고 있습니다.)&amp;nbsp;&lt;/span&gt;이 값의 의미는 PWM 제어에 필요한 주파수를 입력하는 것 입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PWM 제어란,&amp;nbsp;간단히 비유해서 스위치에 연결된 전구가 하나 있다고 가정했을 때, 1초에 스위치를 500 번 정도 아주 빠르게 껐다켰다 반복하면 사람 눈에는 깜빡이는 것처럼 보이지는 않겠지만 스위치를 계속 켜놓고 있는 상태보다는 어둡게 보일 것 입니다. 1초에 500번에서 60번&amp;nbsp;정도로 줄인다면 더 어둡게 보이겠죠.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이런 PWM 제어는 NodeMCU 의 모든 디지털 출력 핀에서 사용 가능한 것은 아닙니다.&lt;/p&gt;&lt;p&gt;(D1) GPIO 5, (D2) GPIO 4, (D3) GPIO 0, (D4)&amp;nbsp;GPIO 2, (D5) GPIO 14, (D6)&amp;nbsp;GPIO 12, (D7) GPIO 13, (D8)&amp;nbsp; GPIO 15, (RX) GPIO 3, (TX) GPIO 1 핀에서만 사용 가능합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step4. 웹으로&amp;nbsp;LED 제어하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;드디어 Step2 에서 만들었던 조명 제어에 필요한 웹 API 서버에 실제로 조명을 제어하는 코드를 붙여보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;우선 Step2 에서 가장 마지막으로 수정한 코드에 비어있는 setBright() 함수와&amp;nbsp;setOnOff() 함수 내부를 아래와 같이 채워줍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setOnOff() {
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt;(!_isOn) {
    digitalWrite(_ledControlPin, LOW);
  } &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;else&lt;/span&gt; {
    setBright();
  }
  
}

&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;void&lt;/span&gt; setBright() {
  &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;if&lt;/span&gt;(!_isOn) &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;return&lt;/span&gt;;
  &lt;span style=&quot;color: rgb(0, 128, 0);&quot;&gt;// 1 에서 100사이의 값을 100에서 1024 사이의 값으로 치환&lt;/span&gt;
  &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;int&lt;/span&gt; value = map(_brightness, 1,100, 100,1024);
  analogWrite(_ledControlPin, value);
}&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 완성된 코드를 올려봅시다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;크리스마스 트리에도 응용해 보았습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;마치며&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;ESP8266 를 사용하는&amp;nbsp;가성비 좋은 마이크로 컨트롤러 보드와 아두이노를 이용하여 아주 간단한&amp;nbsp;IOT 무드등을 만들어 봤습니다. 아주 기본적인&amp;nbsp;예제로 구현한 탓에 아쉬운점이 있습니다. 우선,&amp;nbsp;기기를 서버로 구현하였기 때문에 IP 주소를 알아내어 접속해야 하고, 공유기를 사용한다면 외부망에서도 접근 가능하도록 포트를 개방해줘야할&amp;nbsp;것 입니다. 만약 조명에 스위치를 달아준다면, 웹 페이지와 동기화도 쉽지 않으며&amp;nbsp;보안에도 취약할 수 있습니다. 만약 본격적으로 IOT 기기를 만들어야 한다면 MQTT를 활용하는 것이 더 나은 방법입니다. 그럼에도 이번 포스팅은 이렇게 간단한 방법으로도 IOT 기기를 만들 수 있다는 것을 소개하는데 의의를 두고 작성 하였습니다. 만약 앞으로 기회가 된다면 MQTT를 이용하여 구현하는 방법에 대하여 다루겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;IOT 조명을 구글홈과 연동한 모습입니다.&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>ESP8266</category>
      <category>Iot</category>
      <category>noidemcu</category>
      <category>스마트 무드등</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/99</guid>
      <comments>https://yagnu.tistory.com/99#entry99comment</comments>
      <pubDate>Tue, 12 Nov 2019 01:09:21 +0900</pubDate>
    </item>
    <item>
      <title>[이클립스] 4K 해상도에서 아이콘이 작게 나오는 문제 해결</title>
      <link>https://yagnu.tistory.com/96</link>
      <description>&lt;p&gt;27인치 4K 해상도의 모니터로 이클립스를 열었을 때 조금 당황스러웠었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;눈을 모니터에 가까이 가져가야 보일 정도의 작은 아이콘과 패키지 익스플로어의 깨알 같은 폰트들이 보였기 때문이다.&lt;/p&gt;
&lt;p&gt;이런 경우 eclipse 디렉토리에 있는 eclipse.ini 파일을 열어서 가장 마지막 줄에 아래의 옵션을 추가해주면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;-Dswt.enable.autoScale=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;-Dswt.enable.autoScale=true&lt;/a&gt; &lt;br /&gt;-Dswt.autoScale=200 &lt;br /&gt;&lt;a href=&quot;-Dswt.autoScale.method=nearest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;-Dswt.autoScale.method=nearest&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/96</guid>
      <comments>https://yagnu.tistory.com/96#entry96comment</comments>
      <pubDate>Sun, 30 Jun 2019 23:27:56 +0900</pubDate>
    </item>
    <item>
      <title>카자흐스탄 침블락 스노보드 원정기 (2)</title>
      <link>https://yagnu.tistory.com/95</link>
      <description>&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994F084A5AA895962B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994F084A5AA895962B&quot; width=&quot;820&quot; height=&quot;366&quot; filename=&quot;타이틀.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;둘째날이 밝았습니다.&lt;/p&gt;&lt;p&gt;이 날은 전 날 내린 눈이 많이 쌓여서 눈사태 위험이 있었기 때문에 스키장 측에서 눈 폭파 작업후 2시간 늦게 오픈을 한다는 통지를 해왔다고 합니다.&lt;/p&gt;&lt;p&gt;덕분에 잠을 더&amp;nbsp;자고 천천히&amp;nbsp;출발할 수 있었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B536385AA897FB2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B536385AA897FB2D&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_100116.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;베이스 위에 올라가니 산 위에 걸려있던 구름은 더 아래쪽으로 내려가고 (도시는 흐렸습니다)&amp;nbsp; 쨍한 하늘 아래 장엄한&amp;nbsp;산봉우리와 가슴 설레게 하는 광활한 슬로프가 눈에 들어왔습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 181px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998E8B465AA898E705&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998E8B465AA898E705&quot; width=&quot;181&quot; height=&quot;147&quot; filename=&quot;다운로드.jpeg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;심장터질뻔...&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99520F3F5AA89A6E0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99520F3F5AA89A6E0A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_133246.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;2860m 중간 정상에 올라왔습니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9993B03C5AA89AC72B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9993B03C5AA89AC72B&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_110730.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;중간 정상 슬로프 모습.&amp;nbsp; 토요일 오전이었는데도 불구하고 사람&amp;nbsp;없는 넓은 슬로프가 너무 마음에 들었습니다.&lt;/p&gt;&lt;p&gt;정설은 되었지만 아직 파우더 설질을 유지하고 있어서 라이딩하기에도 좋았었어요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저 멀리 산보다 낮게 깔린 구름이 보이네요. 구름 아래에는 알마티 시내가 감춰져 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C827395AA89AB138&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C827395AA89AB138&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_103859.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;타는중1.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B2EC435AA89AB504&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B2EC435AA89AB504&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_103925.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;타는중2.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9940B9495AA89B4A3D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9940B9495AA89B4A3D&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_104141.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;서로의 자세를 봐주고 설명하고 있는 중입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997F86425AA89BBB33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997F86425AA89BBB33&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_110351.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;정상에서는 이러고 놀았습니다....&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;오전에 2번 라이딩을하고 밥 먹으러 갑니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EC023E5AA89BF02C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EC023E5AA89BF02C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_113719.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;어제 그 식당에 또 갔습니다.&lt;/p&gt;&lt;p&gt;오리엔탈 느낌이 맘에 드네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만, 직물로 되어있는 좌석 소파가 젖은 보드복 바지 때문에 눅눅해지는 문제가 있었습니다.&lt;/p&gt;&lt;p&gt;보드복 자켓을 벗어서 깔고 앉아야만 했습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C20B385AA89BF43B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C20B385AA89BF43B&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_113520.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;자리에 앉을 때 보이는 경관.&lt;/p&gt;&lt;p&gt;너무 아름답습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9995594B5AA89CBC02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9995594B5AA89CBC02&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_120529.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997F573A5AA89CBF06&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997F573A5AA89CBF06&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_120831.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99888B435AA89CC30D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99888B435AA89CC30D&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_121224.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;샤슬릭의 양고기는 걍렬한 향을 풍겨서 콜라를 찾게 만드네요.&lt;/p&gt;&lt;p&gt;우리나라에서 먹는 양꼬치는 좋아하지만, 이 곳의 양고기는 적응하기가 쉽지 않습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;밥을 다 먹으니 3200m 의 최고 정상도 오픈 하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D77A4F5AA89D2237&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D77A4F5AA89D2237&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_133604.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;최정상에 가기 위해서는 중간 정상에서부터&amp;nbsp; 곤돌라나 리프트를 타고 더 올라가야 합니다.&lt;/p&gt;&lt;p&gt;곤돌라 밖으로 보이는 최정상 중앙 슬로프의 경사는 그렇게 심하지 않은 것 같습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;체감상 폭이 넓고 펜스가 없는 용평 리조트의 골드 환타스틱 느낌입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A28C3E5AA89E9D0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A28C3E5AA89E9D0B&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_134511.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999CBE4D5AA89E1301&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999CBE4D5AA89E1301&quot; width=&quot;820&quot; height=&quot;465&quot; filename=&quot;스크린샷, 2018-03-14 12-59-07.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3200m 정상입니다.&lt;/p&gt;&lt;p&gt;정설된 곳은 슬로프고 그렇지 않은 곳은 그냥 눈밭입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F948405AA89D460A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F948405AA89D460A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_133846.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일행 중에 한 분이 저곳에 들어가자고 제안합니다. 하하하..&lt;/p&gt;&lt;p&gt;보기보다 경사가 꽤 됩니다. 저런 파우더에서 한 번 넘어지면 다시 일어나기가 쉽지 않습니다.&lt;/p&gt;&lt;p&gt;무엇보다 이곳은 해발 3200m 고산지대라 조금만 움직여도 숨이 가쁘게 올라옵니다.&lt;/p&gt;&lt;p&gt;게다가 제 데크로 저런 곳에 들어간다면...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 450px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990577445AA89F2A18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990577445AA89F2A18&quot; width=&quot;450&quot; height=&quot;333&quot; filename=&quot;image21.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;무서웠지만 과감하게 도전!!&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A9AC4A5AA89F991B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A9AC4A5AA89F991B&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_135130.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;결국 이렇게 되는군요.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;너무 숨이 차고&amp;nbsp;&amp;nbsp;힘이 빠지고 눈앞이 노래져서 그냥 넘어졌습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이게 바로 말로만 듣던 고산병 아닌가 합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B46E365AA8A01C11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B46E365AA8A01C11&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_135132.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;우리 일행들도 엄청 고생하고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DFA43F5AA8A0641A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DFA43F5AA8A0641A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_140309.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;앞에서도 계속 뒹굴고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저는 숨이 너무 가쁘게 차올라서&amp;nbsp;벌러덩 누워버렸습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;결국&amp;nbsp;안되겠다 싶어서 데크를 들고 걸어서 내려가는 것을 시도하였는데...&lt;/p&gt;&lt;p&gt;한 발을 내디디니&amp;nbsp;발이 쑥~~~ 빠지더군요... ㅡ , ㅡa&amp;nbsp; 허리까지 눈에 묻혔습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;걸국 데크 위에서 누워서 스켈레톤 썰매처럼 내려오다가 결국 다른 일행 한 분이 구조해 줬습니다....&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D744395AA8A16E24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D744395AA8A16E24&quot; width=&quot;820&quot; height=&quot;405&quot; filename=&quot;스크린샷, 2018-03-14 13-12-51.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;모두 지쳐있는중...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만 다들 파우더의 맛(?)을 알아버렸습니다.&lt;/p&gt;&lt;p&gt;이제부터 파우더만 찾으러 다닙니다...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래도 아직 익숙하지 않은 파우더와 범프 구간.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9980EC3C5AA8A2971C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9980EC3C5AA8A2971C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_153934.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;파우더에서 넘어질 때는 이렇게 벌러덩~&amp;nbsp;해야 재미있습니다.&lt;/p&gt;&lt;p&gt;넘어져도 전혀 충격이 없어요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D7794A5AA8A2DD29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D7794A5AA8A2DD29&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_153908.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기절중...&lt;/p&gt;&lt;p&gt;여기 누워있는 이 분은 다음 시즌에는 꼭 파우더 데크를 지르리라 굳게 마음먹었습니다. ㅎㅎㅎ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992D214F5AA8A32D2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992D214F5AA8A32D2D&quot; width=&quot;820&quot; height=&quot;399&quot; filename=&quot;20180303_154342.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;단체샷&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;조금 구석에 있는 슬로프 간다면 사람이 아무도 없고 이렇게 놀기 좋습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참, 오후 보딩은 대략 3시 50분까지 즐겼습니다.&lt;/p&gt;&lt;p&gt;여행사에서 일정을 정할 때, 첫째 날은 4시, 둘째 날부터 4시 30분까지 주차장에 모여서 하산하는&amp;nbsp;것으로 스케줄을 잡았습니다.&lt;/p&gt;&lt;p&gt;곤돌라를 타고 주차장까지 내려오는 시간이 짧지 않기 때문에 대략 30~40분 전까지 라이딩을 마쳐야 합니다.&lt;/p&gt;&lt;p&gt;라이딩을 더 즐기고 싶은 사람은 더 즐기다가 주차장에서 따로 택시를 잡고&amp;nbsp;내려올 수 있도록 배려(?)해줍니다. (버스는 시간되면 그냥 가버립니다)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;알마티에서 택시 잡는 법은 좀 재미있습니다.&lt;/p&gt;&lt;p&gt;길을 가다가 인도 밖으로 손을 흔들면 달리던 차들 중에 한 대가 멈추는데, 운전자에게&amp;nbsp;목적지를 말하고 가격을 흥정하고 탑승하면 된다고 합니다.&lt;/p&gt;&lt;p&gt;실제로 알마티 시내에서 남녀 불문하고 택시 잡는 관경을 많이 봤는데, 이렇게 하여도 위험하지 않은가 봅니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 호텔로 돌아와서 씻고 도시 관광 겸 밥을 먹으러 나갈 준비를 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999C984C5AA8A51D31&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999C984C5AA8A51D31&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_180822.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;우리가 묵고 있는 호텔입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D1F43E5AA8A56E29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D1F43E5AA8A56E29&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_181700.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;뭔가 익숙하네요 ㅎㅎ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9917E84A5AA8A58733&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9917E84A5AA8A58733&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_181936.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;오래된 차들이 많은 편인데, 대우에서 생산된 자동차들도 많이 보였습니다.&lt;/p&gt;&lt;p&gt;알마티의 신호등이 없는 횡단보도를 건널 때는 길을 달리던 모든 차들이 급브레이크를 밟으며 멈추는 모습이&amp;nbsp;인상 깊었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9932C0385AA8A64236&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9932C0385AA8A64236&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_182030.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DDF9345AA8A64426&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DDF9345AA8A64426&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_182038.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A4AB475AA8A64B26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A4AB475AA8A64B26&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_182349.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;우람하고 개성없는 느낌을 주는 동구권 느낌의 건물들.&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만, 길가의 사람들도 동구권 느낌이라... 남녀 할 거 없이 모두 키가 엄청 컸습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994FA8375AA8A6EF05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994FA8375AA8A6EF05&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_183613.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;카자스흐탄의 타임스퀘어(?)인&amp;nbsp; Dostyk 플라자 입니다.&lt;/p&gt;&lt;p&gt;굉장히 깔끔하고 좋습니다.&lt;/p&gt;&lt;p&gt;젊은 사람들이 많이 찾는 공간 같더군요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9907BC355AA8A7600F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9907BC355AA8A7600F&quot; width=&quot;400&quot; height=&quot;300&quot; filename=&quot;dostyk-plaza.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;쇼핑몰 외관을&amp;nbsp;못 찍어서 구글에서 퍼온 사진을 가져왔습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 곳에서 지역에서 유명한 쌀국수집을 갔습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9934AC505AA8A7E20F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9934AC505AA8A7E20F&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_184946.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;용이 천장에 매달려 있는 인테리어와&amp;nbsp;디제이가 열심히 일하고 있던 홀이 인상적이었습니다.&lt;/p&gt;&lt;p&gt;한국에서 매우 흔하게 먹는 배트남 음식이지만.....&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9910A8395AA8A7E205&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9910A8395AA8A7E205&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_190639.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 부드럽고 맛있는 고기가 많이 들어간 나시고랭은 처음 먹어보는 것 같습니다.&lt;/p&gt;&lt;p&gt;정작 밥은 별로...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9932F7475AA8AA241C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9932F7475AA8AA241C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_185741.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;쌀국수는 면발 빼고는 다 괜찮았습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;역시 고기가 많이 들어가있네요.&lt;/p&gt;&lt;p&gt;고기를 엄청 좋아한다면,&amp;nbsp;카자흐스탄 강추입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;메뉴 하나에 한국돈으로&amp;nbsp; 대략 5~6천원 정도 했었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BA5F3C5AA8A9D101&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BA5F3C5AA8A9D101&quot; width=&quot;820&quot; height=&quot;277&quot; filename=&quot;스크린샷, 2018-03-14 13-40-48.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;밥을 다 먹은다음 알마티의&amp;nbsp;이마트(?) 를 구경하기로 합니다.&lt;/p&gt;&lt;p&gt;역시 사진을 못 찍어서... 구글에서 퍼왔습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 461px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D147435AA8AA7617&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D147435AA8AA7617&quot; width=&quot;461&quot; height=&quot;820&quot; filename=&quot;20180303_202622.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;카자흐스탄의 물가1. (한국돈으로 약 840원)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9974233D5AA8AB3401&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9974233D5AA8AB3401&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_201216.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;카자흐의 물가2. (5L 생수 약 680원)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D387415AA8AB921A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D387415AA8AB921A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_201717.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;보드카코너.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A408375AA8ABA32A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A408375AA8ABA32A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_201354.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다양한 치즈들.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99529B435AA8ABD803&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99529B435AA8ABD803&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180303_205635.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;숙소에서&amp;nbsp;다 함께 보드카 한 잔 하며 멋진 하루를 마무리합니다 ㅎㅎ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;다음 편에서 계속...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기타 취미/스노보드</category>
      <category>스노보드</category>
      <category>원정</category>
      <category>침블락</category>
      <category>카자흐스탄</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/95</guid>
      <comments>https://yagnu.tistory.com/95#entry95comment</comments>
      <pubDate>Wed, 14 Mar 2018 13:58:26 +0900</pubDate>
    </item>
    <item>
      <title>카자흐스탄 침블락 스노보드 원정기(1)</title>
      <link>https://yagnu.tistory.com/94</link>
      <description>&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99759D455AA74DBA35&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99759D455AA74DBA35&quot; width=&quot;820&quot; height=&quot;366&quot; filename=&quot;타이틀.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;저는 규모는 크지는 않지만, 나름 복지가 괜찮은 회사에 다니고 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;직원들을 위한 복지중에 하나가 1년에 한 번씩 해외 워크샵을 보내주는 것이며,&lt;/p&gt;&lt;p&gt;&amp;nbsp;사내 직원들과&amp;nbsp;팀을 짜서 원하는 장소로 갈 수 있습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;여행지에서 신나게 먹고 마시며 즐길수도 있고,&lt;/p&gt;&lt;p&gt;함께 3박 4일 이상씩 붙어 다니기 때문에 업무에 관련된 이야기를 심도 있게&amp;nbsp;나눌 수 있는 시간이기도 합니다.&lt;/p&gt;&lt;p&gt;더 좋은 점은 결혼한 분들은 3년에 한 번씩 부부 동반으로 다녀올 수 있도록 비용을 지원해 줍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;사내 동료 직원들 중에 저와 같이 스노보드를 즐기는 분들과 함께 팀을 짜서 카자흐스탄 알마티에 있는 침블락 (Symbulak) 스키장을 을 다녀오게 되었습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;결론부터 이야기 하면 강추입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;끝내주는 경치와 3월 초에도 즐길 수 있는 최고의 설질, 국내에서 즐기기 어려운 건설 파우더를 느낄 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이곳은 스키 관광 전문 여행사를 통하여 갔으며 대체로 만족스러웠습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D628495AA74EAE11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D628495AA74EAE11&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_124528.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3월 1일 한 시에 에어 아스타나 항송 KC910 편을 탑승 하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;인천공항에서 알마티 공항까지 약 7시간 거리입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9914FA4E5AA74EAE01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9914FA4E5AA74EAE01&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_125920.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;갈 때는 핸드크림, 귀마게, 칫솔 세트, 안대, 슬리퍼 세트를 주머니에 담아서 나눠줍니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;안대에 적힌 문구가 인상적이네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99948C475AA74EAE13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99948C475AA74EAE13&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_154239.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 828px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9963E9455AA74FCD20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9963E9455AA74FCD20&quot; width=&quot;828&quot; height=&quot;242&quot; filename=&quot;20180301_154330.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;기내식. 나름 먹을만 하네요.&lt;/p&gt;&lt;p&gt;재미있는 것은 음료수로 보드카를 선택할 수 있다는 것입니다. (무려 벨루가가 나옵니다.)&lt;/p&gt;&lt;p&gt;역시 러시아 인접 국가답네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CE59355AA74EAE1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CE59355AA74EAE1A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_191123.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;거의 도착. 정말 지루한 비행입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;크지 않은 규모의 카자흐스탄 공항에 도착하여 정신없이 환전하고 바로 버스로 호텔까지 이동하였습니다.&lt;/p&gt;&lt;p&gt;공항에는 가이드님이 계셔서&amp;nbsp; 편리하게 안내를 받을 수 있었습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9957843C5AA74EAF11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9957843C5AA74EAF11&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_193136.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3인실을 주문했더니... 이렇게 큰 방이 왔네요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;단점은 너무 건조하다는 것입니다. 알마티라는 도시 자체가 굉장히 건조한 것 같아요.&lt;/p&gt;&lt;p&gt;그래도 건조함 덕분에 눈에 젖은 옷들과 장비를 말리기에 제격이었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9924693D5AA7526825&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9924693D5AA7526825&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180301_200647.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;호텔 석식에서 나온 벨루가 보드카. 이 곳에서는 대략 1만 9천원 밖에 안 합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;맛이 깔끔한 것이 좋아요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;대충 호텔 석식을 먹고 내일을 기대하며 바로 곯아떨어졌네요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9968E6345AA752EA21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9968E6345AA752EA21&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_060442.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;아침에 마신 500ml 짜리 에너지 드링크... 몬스터보다 훨씬 강한 것 같았습니다. 역시 이쪽 동네는 에너지 드링크도 클라스가 다르네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B46D3B5AA7532329&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B46D3B5AA7532329&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_083737.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;호텔 조식을 마친 뒤에 이렇게 생긴 버스를 타고 출발합니다.&lt;/p&gt;&lt;p&gt;제가 간 날은 대략 36명 정도가 왔었던 것 같은데, 버스 짐칸이 꽤 커서&amp;nbsp;그 많은&amp;nbsp;스키와 보드 장비가 다 들어갑니다.&lt;/p&gt;&lt;p&gt;버스 내부는 좌석간 의 간격이 넓지도 않고 매연이 안으로 들어와서 매우 불편했지만, 이동시간이 길지 않아서 참을만 했습니다.&lt;/p&gt;&lt;p&gt;(내부로 들어오는 매연은... 3000m 가 넘는 침블락 정상에서 생길 수 있는 고산병 적응훈련이라 생각하고 참았습니다... ㅡ , , ㅡ)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 날은 눈이 꽤 많이 왔어요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9925F0335AA753E021&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9925F0335AA753E021&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_091554.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;차창 밖을 찍은 모습.&amp;nbsp;&lt;/p&gt;&lt;p&gt;버스를 타고 1593m 의 곤돌라 탑승장까지 이동합니다. 그리고 곤돌라로 30분간&amp;nbsp; 2260m 의 스키장 베이스로 이동하게 됩니다.&lt;/p&gt;&lt;p&gt;위로 올라갈수록 눈도 더 많이 오고 시야도 안 좋아지네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992F164B5AA7546B2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992F164B5AA7546B2F&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_100155.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;나란히 찍은 보드 장비들...&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;가장 긴 데크가 저의 장비입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;이날은 일반 라운드 데크로 가져올걸..&amp;nbsp;후회했었습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9964B8365AA7547729&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9964B8365AA7547729&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_100739.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;스키장 지도.&amp;nbsp;&lt;/p&gt;&lt;p&gt;날씨탓에 Close 된 곳이 많았지만, 슬로프에 올라가보니 눈도 많고 펜스도 없어서 어디가 슬로프고 어디가 산인지 구분하기 힘들더군요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;그냥 대략 다 Open 같은 Close라고&amp;nbsp;보면 됩니다. ㅡ , ㅡa&lt;/p&gt;&lt;p&gt;리프트는 멈춰있어도 그냥 다른 슬로프로 장비 들고 걸어서 올라가는 사람들도 많이 있었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99612F355AA7555C07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99612F355AA7555C07&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_101557.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;생애 처음으로 가본 고산지대라 처음에는 초보자 슬로프에서 적응 훈련(?)을 진행하였습니다.&lt;/p&gt;&lt;p&gt;가이드님이 처음부터 올라가면 고산병 때문에 힘들 수 있다며 적응 훈련을 추천해 주시더군요.&lt;/p&gt;&lt;p&gt;하지만 T바가 익숙하지 않은 분들은 계속 넘어지는 굴욕을 당했습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;오늘 안에 못탈듯...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;평소에 스케이팅(바인딩 한쪽발만 착용)을 많이 해보지 않은 분들은 타기 힘들 것 같아요...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;접니다...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;허벅지 안쪽보다 허리나 엉덩이에 끼고 올라가면 편하게 올라갈 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9928E53F5AA7579937&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9928E53F5AA7579937&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_103328.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내려가기 전에 한 컷.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CBA7365AA757FB0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CBA7365AA757FB0A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_103704.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내려와서 한 컷.&lt;/p&gt;&lt;p&gt;3월에 즐길 수 있는 밀가루 같은 설질이 참 마음에 듭니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제는 곤돌라를 타고 중간 정상으로 올라가보기로 합니다.&lt;/p&gt;&lt;p&gt;침블락 스키장은 중간 정상이 있고, 가장 높은 곳에 있는 정상이 있습니다.&lt;/p&gt;&lt;p&gt;각각 2860m 와 3200m 쯤에 위치하고 있는데, 이 날은 기상 상황이 안 좋아서 중간 정상만 오픈 하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ABAF445AA7586721&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ABAF445AA7586721&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_105327.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9909B84D5AA7588110&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9909B84D5AA7588110&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;IMG_20180302_105402.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이렇게 눈이 많이 쌓인 것을 본 것은 오랜만이라 뒹굴기만 해도 즐겁더라고요.&lt;/p&gt;&lt;p&gt;하지만, 다음날 이 많은 눈들이 우리들의 숨통을 조여오게 되는 사건이 발생합니다.&lt;/p&gt;&lt;p&gt;어쨌든 첫 날은 정상에서 정말 신나게 놀았던 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
    &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;하지만 정상에서 즐거운 시간을 보낸 것을 비웃기라도 하듯 안개는 점점 짙어졌고, 마치 산에 구름이 걸린 것 같았네요.&lt;/p&gt;&lt;p&gt;마치 우유 속에 들어온 것 같았는데, 시간이 지날수록 가시거리가 짧아졌습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D5594F5AA759CA18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D5594F5AA759CA18&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_105846.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992AE4435AA759D314&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992AE4435AA759D314&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_114509.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;처음에는 이정도였는데...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CA93425AA759D819&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CA93425AA759D819&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_110132.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;두 번째 내려올땐느 이정도...&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99404C425AA75A0C0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99404C425AA75A0C0F&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_112618.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;가장 젊은 일행도 결국 이렇게 기절해 버렸습니다. &amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;더는 위험하다고 판단하여 베이스에 있는&amp;nbsp;식당으로 돌진 하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99072E345AA75ACA12&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99072E345AA75ACA12&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_123521.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;식당 분위기.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;오리엔탈한 인테리어의 넓은 식당입니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;다행히도 영어가 되는 식당 직원이 있어서 제대로 주문할 수 있었습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FB12335AA75B6A20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FB12335AA75B6A20&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_123838.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FE9E3B5AA75B6C0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FE9E3B5AA75B6C0E&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_124128.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;￼&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위에서부터 아메리카노 크림 파스타,&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;볼로네제 파스타,&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그리고 스테이크 x3&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;추가로 콜라 5잔과 샤슬릭 1개 주문 하였는데 우리나라 돈으로 대략 5만원정도 나온 것 같았네요.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;카자흐스탄 물가는 매우 저렴하지만 스키장 식당은 역시..ㅎㅎㅎ&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;단, 카자흐스탄의 스테이크는 대부분 드라이에이징을 한 것이기 때문에 퍽퍽하긴해도&amp;nbsp;질기지 않고 고소합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;저는 웻에이징&amp;nbsp;고기를 좋아하지만, 카자흐의 드라이에이징 고기는 또 다른 맛이더군요.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 스키장에 있는 식당의 스테이크도 나쁘지 않았던 것 같았습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;단지... 파스타는 엄청 짜요... 진짜 짜요.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;(나중에 슬로프의 눈을 먹게 됩니다.)&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;건조한 기후의 카자스흐탄은 소를 잡자마자 피를 빼지 않고 바로 드라이에이징을 한다고 하네요.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;￼&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 461px; margin-left: 10px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991CDB485AA75B9A2A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991CDB485AA75B9A2A&quot; width=&quot;461&quot; height=&quot;820&quot; filename=&quot;20180302_125232.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;margin-left: 10px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;꼬치에서 고기를 빼내는 장인의 손길...&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;샤슬릭은 맛이 괜찮긴한데, 양고기는 우리나라에서 먹는 양꼬치보다 향이 10배쯤 강한 것 같았습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;식사를 마친뒤에 다시 라이딩 시작!!&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999B03435AA75DBB34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999B03435AA75DBB34&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_140906.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;쉬는중.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9935B44F5AA75DEF28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9935B44F5AA75DEF28&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_150500.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;타는중1.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9966484A5AA75E2134&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9966484A5AA75E2134&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_150507(0).jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;타는중2.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997206455AA75E2E2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997206455AA75E2E2D&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_150520(1).jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;뛰는중&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-----------------------&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 라이딩을 마치고 숙소로 들어왔습니다.&lt;/p&gt;&lt;p&gt;호텔에서 샤워하고 저녁 먹으러 갈 준비를 하는데.... 샴푸에서 염색약 냄새 같은 것이 나더라고요.&lt;/p&gt;&lt;p&gt;바디워시 냄새도 별로 맘에 들지 않았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997D3E505AA75EF32C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997D3E505AA75EF32C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_165857.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 우리에게 익숙한 용평 리조트 그린피아 콘도에서 가져온 비누를 챙겨왔습니다&amp;nbsp; :-)&lt;/p&gt;&lt;p&gt;이제야 익숙한 기분으로 씻을 수 있게 되었네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993DB7415AA75F4A1C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993DB7415AA75F4A1C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_175806.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;밥 먹으러 나가기 전에 가이드님께 받은 현지 유심입니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;충전된 유심을 10달러에&amp;nbsp;현지 가이드에게 구매 했었는데, 호텔 와이파이보다 빠르고&amp;nbsp;좋았습니다.&lt;/p&gt;&lt;p&gt;pooq 이나 옥수수로 스트리밍 방송을 봐도 끊기지도 않고 데이터도 충분했던 것 같아요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다만 유심 품질(?)에 문제가 있었던 것인지 첫날에는 원활하게 사용할 수 없었네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;첫날 갔던 식당은 Line Brew라는 이름의&amp;nbsp; 알마티 수제 맥주 &amp;amp; 스테이크 맛집이었습니다.&lt;/p&gt;&lt;p&gt;기억에 남을만큼 괜찮은 맛이었던 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;신청자에 한해서 예약을 한 뒤에 가이드와 함께 단체로 이동하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9980FB345AA760680F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9980FB345AA760680F&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_182554.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;지금까지 신경쓰지 못했던 호텔 앞 분위기.&amp;nbsp;&lt;/p&gt;&lt;p&gt;알마티의 많은 횡단 보도에는 신호등이 없었지만, 사람이 건너려고 하면 앞에서 달리던 모든 차가 알아서 멈추더라고요.&lt;/p&gt;&lt;p&gt;참 좋은 문화인 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995B8A4C5AA760F302&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995B8A4C5AA760F302&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_183425.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;알마티 도심 건물들. 카자흐스탄도 옛 소비에트&amp;nbsp;연방에 속해 있어서 그런지&amp;nbsp;동구권 양식(?)의 느낌을 주는 그런 건물들이 많았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이 날은 불금인지라 길이 많이 막혀서 도시 관광은 내일로 기약하였습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994748425AA7622C0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994748425AA7622C0B&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_185547.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9940AA425AA7622E0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9940AA425AA7622E0C&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_185558.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A7DF455AA7627E29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A7DF455AA7627E29&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_185754.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;알마티 스테이크 맛집 분위기. 전체적인 모습을 못 찍어서 매우 아쉽네요.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;사실 오래된 성채의 지하실같은 분위기라 전체적인 분위기를 찍기도 어려웠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;내년에 또 간다면 동영상을 찍어야겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99656F505AA762353F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99656F505AA762353F&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_190219.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;메뉴판 모습입니다.&lt;/p&gt;&lt;p&gt;미디엄에도 핏기가 보이네요.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993584445AA7623834&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993584445AA7623834&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_201110.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;스테이크.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999413365AA7624503&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999413365AA7624503&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;IMG_8943.JPG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;수제맥주.&lt;/p&gt;&lt;p&gt;고소한 맛이 일품입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990E18495AA762541A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990E18495AA762541A&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_201730.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;스톤 스테이크.&lt;/p&gt;&lt;p&gt;이렇게 생긴 돌판에...&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E698395AA762561E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E698395AA762561E&quot; width=&quot;820&quot; height=&quot;461&quot; filename=&quot;20180302_201733.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이런 생고기를 올려서 구워 먹습니다.&lt;/p&gt;&lt;p&gt;정신없이 먹느라 사진은 못 찍었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5명이서 수제 맥주와 최고급 스테이크들을 배터지게 먹었는데 고작 한국돈으로 13만원밖에 안 나왔네요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;우리에게는 저렴한 물가라서 관광하기 좋은 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;다음 편에서 계속...&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기타 취미/스노보드</category>
      <category>Symbulak</category>
      <category>쉼블락</category>
      <category>스키장</category>
      <category>싐블락</category>
      <category>원정보드</category>
      <category>침블락</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/94</guid>
      <comments>https://yagnu.tistory.com/94#entry94comment</comments>
      <pubDate>Tue, 13 Mar 2018 14:36:57 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 주소를 URL 인코딩하기.</title>
      <link>https://yagnu.tistory.com/92</link>
      <description>&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;JAVA 에서 특정 URL 경로로 데이터를 가져오기 위하여 URL Encoding 을 해야할 때 여간 귀찮은 것이 아니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그래서 아래처럼 URLEncoder 클래스를 수정한 BorwerURLEncoder 를 만들었다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;사용법은 URLEncoder 와 동일하며, 마치 브라우저 창에서 URL 주소를 입력해 놓은 것처럼 출력되도록 하였다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#333333&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;BrowserURLEncoder.java&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: medium; background: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-image: initial; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.io.CharArrayWriter&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.io.UnsupportedEncodingException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.net.URL&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.nio.charset.Charset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.nio.charset.IllegalCharsetNameException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.nio.charset.UnsupportedCharsetException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;java.util.BitSet&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;BrowserURLEncoder&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BitSet&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;caseDiff&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'a'&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'A'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dfltEncName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BitSet(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'a'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'z'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'A'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'Z'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'0'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'9'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'?'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;':'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'@'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'-'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'_'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'*'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'!'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'$'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'&amp;amp;'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'('&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;')'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'/'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'*'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'+'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;','&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;';'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'='&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;encode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;encode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(url,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dfltEncName);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;encode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlString,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;URL&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;URL(urlString);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuilder&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlStrBuilder&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuilder();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;port&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getPort&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getPath&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;query&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getQuery&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlStrBuilder.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(url.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getProtocol&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt;
							&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;://&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt;
							&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(url.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getHost&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt;
							&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(port&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;:&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;port&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(path&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!path.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encodeString(path,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlStrBuilder.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(path);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(query&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!query.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;query&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encodeString(query,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlStrBuilder.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;?&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(query);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlStrBuilder.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Exception&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;urlString;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;encodeString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;enc)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;UnsupportedEncodingException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;needToChange&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuffer(s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charset;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CharArrayWriter&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charArrayWriter&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CharArrayWriter();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(enc&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;NullPointerException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;charsetName&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(enc);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(IllegalCharsetNameException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;UnsupportedEncodingException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(enc);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(UnsupportedCharsetException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;UnsupportedEncodingException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(enc);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;charAt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(c))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;do&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charArrayWriter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(c);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xD800&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xDBFF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
						&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
							&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;charAt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
							&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(d&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xDC00&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xDFFF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
								&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charArrayWriter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(d);&lt;/span&gt;
								&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++;&lt;/span&gt;
							&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
						&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++;&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!dontNeedEncoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;charAt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i))));&lt;/span&gt;

				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charArrayWriter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;flush&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(charArrayWriter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;toCharArray&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
				&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ba&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(charset);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;j&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;j&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ba.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;j++)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'%'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Character.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forDigit&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((ba[j]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Character.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isLetter&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ch))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
						&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;caseDiff;&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ch);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Character.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forDigit&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ba[j]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Character.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isLetter&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ch))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
						&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;caseDiff;&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ch);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charArrayWriter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;needToChange&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(needToChange&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;out.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;s);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/92</guid>
      <comments>https://yagnu.tistory.com/92#entry92comment</comments>
      <pubDate>Thu, 31 Aug 2017 11:06:44 +0900</pubDate>
    </item>
    <item>
      <title>각 OS별 PS 명령어를 사용하여 모든 프로세스 정보 확인.</title>
      <link>https://yagnu.tistory.com/91</link>
      <description>&lt;p&gt;&lt;b&gt;1. 리눅스(데비안, 우분투, 레드헷, CentOS 등등)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$ ps -ef&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;2. AIX .&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;리눅스와 동일한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$ ps -ef&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. &amp;nbsp;Solaris&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$ /usr/ucb/ps auwxw&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4.&amp;nbsp;HP-UX&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$&amp;nbsp;ps -efx&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;5. BSD&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$ ps auxwww &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;6. Windows&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;$&amp;nbsp;WMIC path win32_process get Processid,Commandline&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련</category>
      <category>ps</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/91</guid>
      <comments>https://yagnu.tistory.com/91#entry91comment</comments>
      <pubDate>Fri, 3 Feb 2017 09:21:21 +0900</pubDate>
    </item>
    <item>
      <title>Nexus 6p 액정 디스플레이 자가 수리기</title>
      <link>https://yagnu.tistory.com/90</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;대략 두어 달 전..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;자전거에 나의 Nexus 6P 를 매달고 빠른 속도로 내리막을 내지르다가 갑자기 튀어나온 요철에 급브레이크를 잡게 되었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;덕분에 넥서스 6p 는 관성에 의해 총알처럼 튀어나갔고 아스팔트 바닥에 서너 바퀴 구른 뒤에 아래 사진과 같은 꼴을 하게 되었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2256E64B5804EB980A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2256E64B5804EB980A&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;p01.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/223BBF4B5804E62A0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F223BBF4B5804E62A0B&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;p02.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;다행히도 화면도 잘 나오고 기능 만큼은 정상적으로 동작하지만, 친구나 회사 사람이나 누구나 할 것 없이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;모두 이렇게 한마디씩 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&quot;핸드폰은 언제 바꿀거에요?&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아직 바꾼지 1년도 안 되었는데... ㅜ_ㅜ&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;수리점을 찾았으나 나의 Nexus 6p 꼬락서니를 보고 고개를 절레절레 흔드는 분이 있는가 하면&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;정말로 휴대폰을 바꿀까 고민하게 만드는 많은&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;수리비용 덕분에 부품을 직접 구입하여 자가 수리하기로 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이왕이면 배터리도 새것으로 교체하는 것으로...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/221B704B5804E62B2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F221B704B5804E62B2F&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;p1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;알리 익스프레스를 통하여 구입한 액정+터치 모듈.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;조금 허접하긴 하지만 일회용으로 쓸 수 있는 분해 도구도 함께 포함된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;가격은 배송비 포함하여 70.30$ 들었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;도착하는데 30일 가까이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;걸렸다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그리고, 이 녀석에게는 사소한 문제가 있었으니..&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/232A9F4B5804E62B1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F232A9F4B5804E62B1E&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;p2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;새 제품이 아닌 듯했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;떼어낸 접착제 흔적과 써멀 페이스트 흔적, 그리고 기분 나쁜 얼룩을 보니&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;온전한 제품을 각개격파하여 판매하는 것이 아닐까 하는 의구심이 생긴다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아마도 액정을 제외한 다른 모듈에 불량이 생긴&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;제품을 각개 격파하여 파는 것은 아닐까?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;내가 구입했던 디스플레이 모듈 판매 페이지의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;상품평에는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;별 다섯 개 만점과&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;구매자들이 직접 입력한 좋은 평가들이 많았으니 한 번 믿고 써보도록 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/243A9A4B5804E62C0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F243A9A4B5804E62C0C&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;p3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그리고, 알리에서 17.0$ 주고 구입한&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;프레임&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;응?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;원래 들어있어야 하는 부품은 찾아볼 수&amp;nbsp;없고 같은 부품이 두 개 들어있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 228px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/253138485804EAEA32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F253138485804EAEA32&quot; width=&quot;228&quot; height=&quot;95&quot; filename=&quot;22.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ㅠ_ㅠ&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;결국, 프레임&amp;nbsp;아래쪽 덮개는 이미 있던 것을 재활용해야만 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/251C024B5804E62C2E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F251C024B5804E62C2E&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;p5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;마지막으로...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;문제의 배터리...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;가격은 대략 11$밖에 안 하지만,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;배송일이 중국 국경절과 겹치고, 오는 중간에 소포가&amp;nbsp;분실되는 바람에 도착하는데&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;70일 넘게 걸렸다. 핳핳....&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;분실된 제품은&amp;nbsp;판매자가 다시 보내줬다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;70일 넘는 시간 동안 나는&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 245px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2256E64B5804EB980A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2256E64B5804EB980A&quot; width=&quot;245&quot; height=&quot;126&quot; filename=&quot;p01.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;요 상태로 갖고 다녀야만 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 본격적인 준비가 다 끝나고 추가로 사용한 공구 및 재료를 나열하면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(9, 0, 255);&quot;&gt;일자 드라이버&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(9, 0, 255);&quot;&gt;니퍼&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(9, 0, 255);&quot;&gt;열풍기&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(9, 0, 255);&quot;&gt;핀셋&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(9, 0, 255);&quot;&gt;써멀 그리스 (MX-4)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이렇게 되겠다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;열풍기가 필요한 이유는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Nexus 6p 에 접착제와 양면 테잎이 너무 많이 들어가기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;덕문에 수리 난이도가 꽤 높다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;분해 방법은 일단 아래 주소를 참고하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;https://gigglehd.com/zbxe/13487642&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25146C3F5804ECBF26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25146C3F5804ECBF26&quot; width=&quot;723&quot; height=&quot;658&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;첫 번째 단계는 뒷 판 아래쪽에 있는 덮개를 제거하는 일이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아래 사진처럼 열풍기로 가열하여&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;접착 성분을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;녹인 뒤에 제거한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/231FE73F5804ECBF1C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F231FE73F5804ECBF1C&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;위 사진처럼 일자 드라이버를 틈새 사이로 쑤셔 넣어 떼는 것보다&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;접착 성분을 녹인 뒤에 강력한 초록 테이프로 붙여서 떼는 것이 훨씬 좋을 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/272D3E3F5804ECC00F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F272D3E3F5804ECC00F&quot; width=&quot;723&quot; height=&quot;590&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;상단&amp;nbsp;덮개를 제거한다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;생각보다 깔끔하게 떨어지지 않기 때문에&amp;nbsp;산산조각내어 떼어내는 장면인데,&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;이렇게 뗄 경우, 사방팔방에 유리 조각이 튈 수 있다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&amp;nbsp;특히 미세한 파편이&amp;nbsp;눈에 들어가지 않도록 보호경을&amp;nbsp;껴야 한다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2612EB3F5804ECC128&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2612EB3F5804ECC128&quot; width=&quot;723&quot; height=&quot;541&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;상단&amp;nbsp;덮개가 모두 제거된 모습.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;덮개를 모두 제거한 뒤에 보이는&amp;nbsp;나사를 모두 제거한다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/262D8D3F5804ECC20F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F262D8D3F5804ECC20F&quot; width=&quot;723&quot; height=&quot;415&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그 다음 단계로 위 사진과&amp;nbsp;같이&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;주어진 공구를 통하여 액정과 프레임을 분리해야 하는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;큰 문제가 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2218853F5804ECC222&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2218853F5804ECC222&quot; width=&quot;723&quot; height=&quot;509&quot; filename=&quot;7.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;바닥에 떨어질 때 충격 때문에 위&amp;nbsp;사진처럼 프레임이 찌그러지는 바람에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;간단한 방법으로는 디스플레이 모듈이 쉽게 분리되지 않는다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;결국, 특단의 조치를 내리게 되었다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;니퍼를 이용하여&amp;nbsp;프레임의 찌그러진 부분을 벌려주는&amp;nbsp;방법을 사용한다!!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2218933F5804ECC322&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2218933F5804ECC322&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;8.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2112DB3F5804ECC428&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2112DB3F5804ECC428&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;9.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;이제 디스플레이 모듈과 프레임을 분리하기만 하면 된다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2738F33F5804ECBA02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2738F33F5804ECBA02&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;10.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;분리된 프레임 안쪽&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2225403F5804ECBB16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2225403F5804ECBB16&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;11.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;분리된 디스플레이 모듈 안쪽.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;아이폰의 유니바디와 유사한 구조를 갖고 있는 것을 확인할 수 있다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2339143F5804ECBB02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2339143F5804ECBB02&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;12.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;메인보드 좌측 하단에 있는 커넥터 덮개의 나사를 풀고 제거한다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2713823F5804ECBC26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2713823F5804ECBC26&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;13.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;커넥터 세 개를 조심스럽게 모두 제거한다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/270EC13F5804ECBE2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F270EC13F5804ECBE2C&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;16.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;하단 기판의 커넥터를&amp;nbsp;제거한다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2504B33F5804ECBC36&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2504B33F5804ECBC36&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;14.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;아....&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;https://gigglehd.com/zbxe/13487642 &amp;lt;--- 요기 있는 사진은&amp;nbsp;배터리가 참 쉽게 분리 되던데..&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;내 것은 초강력 접착제로 딱 달라 붙여서 쉽게 제거되지 않는다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;안 쓰는 신용카드를 마구 쑤셔 넣어서 배터리를 접착제로부터 분리하려고 하니 배터리가 ㄴ 모양으로&amp;nbsp;휘어 버린다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;이러다 결국&amp;nbsp;초록 연기를 뿜으며 터지는 것 아닌지 노심초사했지만, 배터리가 직각이 되도록&amp;nbsp;꺾여도 아무 일도 발생하지 않았다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;넥 6p 는 제조 공정에서 장인정신으로&amp;nbsp;접착제를&amp;nbsp;정성스럽게 바른 것 같다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/270B593F5804ECBD2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F270B593F5804ECBD2F&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;15.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;분리된 배터리. 심하게 휘었지만, 손으로 핀 것이 저 모양이다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/270EC13F5804ECBE2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F270EC13F5804ECBE2C&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;16.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;전원 모듈의 나사를 모두 풀어주고 제거한다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2264BF425804F30217&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2264BF425804F30217&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;17.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;전원 모듈을 제거한 상태에서 스피커 박스를 분리해야 하는데...&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;스피커 박스의 단자(빨간 동그라미) 초&amp;nbsp;강력 접착제로 찰싹 붙어있다. ㅠ_ㅠ&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;힘으로 빼다가는 단자의 회로를 끊어먹을 수 있으니 열풍기로 충분히 가열하여 접착 성분을 녹인 뒤에&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;핀셋으로 조심스럽게 스피커박스와 단자를 뽑는다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;진짜 겁나 힘들었다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;그리고 스피커 박스 단자의&amp;nbsp;접착 성분이 다시 굳기 전에, 새로운 디스플레이 모듈의 같은 위치에 옮긴다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2445B7425804F30437&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2445B7425804F30437&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;19.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;스피커 박스와 마찬가지로 우측에 있는 진동 모터도 새 디스플레이 모듈로 옮긴다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;고무로 되어있는&amp;nbsp;빨간색&amp;nbsp;부속도 바로 옮겨준다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2762FC425804F3051A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2762FC425804F3051A&quot; width=&quot;723&quot; height=&quot;440&quot; filename=&quot;20.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;마지막으로 전원 모듈 기판을 얹고 안테나 케이블 한쪽을&amp;nbsp;다시 연결한다.(흰색, 아래쪽에 보이는 케이블)&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;이때, 잠깐 편의를 위하여 나사 하나를 임시로 조여준다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;조립 도중에 전원 모듈이 계속 떨어지는 것을 방지하기 위함이다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214F87425804F3052B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214F87425804F3052B&quot; width=&quot;723&quot; height=&quot;977&quot; filename=&quot;21.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;메인 보드의 전면 카메라, 3.5파이 이어마이크&amp;nbsp;단자의 금속 덮개를 제거한다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;(1) 이 3.5파이 단자이며, (2) 가 전면 카메라 모듈이다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2570EA425804F3060C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2570EA425804F3060C&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;22.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;회로가 끊어지지 않도록 신경써서 커넥터를 제거한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2451C0425804F30727&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2451C0425804F30727&quot; width=&quot;723&quot; height=&quot;447&quot; filename=&quot;23.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;분리된 3.5 파이 단자와 전면 카메라.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이 녀석들도 접착제(양면테잎) 이 발라져 있는데 매우&amp;nbsp;엉성하게 발라져 있어서 툭 건드니 바로 빠져버렸다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/257410425804F30709&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F257410425804F30709&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;24.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;모든 커넥터를 제거하고 메인 보드를 분리한다.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;분홍색 부분은 방열을 위한 써멀 페이스트이며, 어차피 한 번 떼진 것은 다시 붙여도 효과가 떨어지기 때문에,&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;키친타올로 잘 닦아 내었다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2374B2425804F30808&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2374B2425804F30808&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;25.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;분리된 메인보드의 자태.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/246342425804F3081A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F246342425804F3081A&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;26.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;커넥터의 금속 덮개 (1) 와 전원, 볼륨 버튼 모듈을 기존의 디스플레이 모듈에서 새 디스플레이 모듈로 옮겼다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/212F23385804F69420&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F212F23385804F69420&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;28.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;버튼 모듈의 회로가 단선 되어있는 것을 발견하였다.&amp;nbsp;ㅠ_ㅠ&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;위 과정에서 니퍼로 프레임을 무리하게 피는 과정에서 충격이 가해진 것으로 판단된다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;결국 이 부품만 따로 주문하였고 10일 뒤에 다시 받아볼 수 있었다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/212F9A385804F69420&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F212F9A385804F69420&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;29.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;새로 받은 버튼 모듈&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/254641385804F6950C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F254641385804F6950C&quot; width=&quot;723&quot; height=&quot;534&quot; filename=&quot;30.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;새 버튼 모듈을 새로운 디스플레이 모듈에 붙이고,&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;기존의 써멀 페이스트를 깨끗이 닦아내었다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/222713385804F69628&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F222713385804F69628&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;31.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;기존의 써멀 페이스트가 있던 부분에 성능 좋은(하지만, 집에 굴러다니던..)&amp;nbsp;써멀 그리스를 도포하였다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23200C385804F6962F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23200C385804F6962F&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;32.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;조립은 분해의 역순...&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;일단 각 커넥터의 금속 덮개를 닫기 전에 전원을 넣고 잘 동작하는지 테스트 하였다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/232CE4385804F69723&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F232CE4385804F69723&quot; width=&quot;723&quot; height=&quot;693&quot; filename=&quot;33.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;이상 무.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;액정 -&amp;gt;&amp;nbsp;상,하단 스피커 -&amp;gt; 전면 카메라 -&amp;gt; 3.5 파이 이어마이크 단자 -&amp;gt; 진동 모터 순으로 테스트 하고&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;모든 모듈이 정상 동작하는 것을 확인하였다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/244662385804F6980C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F244662385804F6980C&quot; width=&quot;723&quot; height=&quot;617&quot; filename=&quot;35.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;음...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;평소에 넥서스 6p 를 사용하면서 느낀 것인데, 앞면과&amp;nbsp;저 부분에 많은&amp;nbsp;열이 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;열이 밖으로 잘 빠져나갈 수 있도록 써멀 그리스를 임의로&amp;nbsp;도포하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/253DFC385804F69B15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F253DFC385804F69B15&quot; width=&quot;723&quot; height=&quot;365&quot; filename=&quot;37.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;이제 프레임을 닫아주고, 덮게를 부착한다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;오공본드를 사용하여 하단 덮게를 닫았다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25249F385804F69B2A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25249F385804F69B2A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;36.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;액정 테스트. 아무 이상 없는 것을 확인하였다.&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/232DD0385804F69C22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F232DD0385804F69C22&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;38.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;자투리 부품.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;- 끝 -&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기타 취미/DIY</category>
      <category>Nexus 6P</category>
      <category>넥서스 6P</category>
      <category>액정수리</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/90</guid>
      <comments>https://yagnu.tistory.com/90#entry90comment</comments>
      <pubDate>Tue, 18 Oct 2016 01:15:17 +0900</pubDate>
    </item>
    <item>
      <title>엔진 오일 교체와 과다 주입 해결 삽질기.</title>
      <link>https://yagnu.tistory.com/89</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;지금으로부터 3개월 전에 들여온&amp;nbsp;나의 애마 올뉴 말리부 1.5T&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;의 주행 거리가 벌써 5000Km &amp;nbsp;가까이 되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;나의 애마는 다른 사람 손에 맡기는 것보다 사랑 넘치는 손길로 직접 관리해주는 것이 좋을 것 같아서 직접 엔진 오일을 교체하기로 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2753734557F9274333&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2753734557F9274333&quot; width=&quot;723&quot; height=&quot;541&quot; filename=&quot;IMG_20161001_110511.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;우선 엔진 오일 교체 방법에 대하여 동영상 강좌도 보고 글도 빡쎄게 읽은 다음에 부공 모터스 셀프 정비소에 직접 방문&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이곳에서 리프트를 사용할 수 있으며 이용 비용은 한 시간에 1만 원으로 나쁘지 않다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;내 손으로 엔진 오일을 직접 교환하는 첫 경험이라&amp;nbsp;긴장감이 올라왔지만 표정만은 마치 이미 전문가인 것처럼 여유로운 미소를 보이며 띄우며 미심쩍은&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;눈길을 보내는 직원들이 내미는 서류에 싸인하였다. 그 다음 본격적인 작업을 시작할 수 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/213E283F57F926E41D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F213E283F57F926E41D&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;IMG_20161001_111618.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;먼저 엔진 아랫쪽의 드레인 볼트를 찾아서 풀어준다. 자가 정비하기 전에 여러 경험담을 들어보니&amp;nbsp;지인 중에 어떤 분은 저 볼트가&amp;nbsp;되게 안 풀려서 하이킥을 공구 손잡이에&amp;nbsp;꽂으셨다는 분이 있었다. 하지만 나의 뉴 말리부는 생각보다 쉽게 풀렸다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 어느 정도 풀다보면 진한 다크 초콜릿 색을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;띠고 있는 오일이 틈새 사이로 벌컥벌컥 쏟아지는데, 마치 아래 짤방과 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 362px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/265D5B4F57F92A1424&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F265D5B4F57F92A1424&quot; width=&quot;362&quot; height=&quot;360&quot; filename=&quot;3e5fe7c6a505017afc321ad4a46a7d9f.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;엔진오일이 오렌주 쥬스처럼 나온다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 작업 중에 폐 엔진 오일에 손에 다 묻을 수도 있으므로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;반드시 비닐장갑을 먼저 착용하는 것이 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2465BC3F57F926E644&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2465BC3F57F926E644&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;IMG_20161001_112606.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;엔진 오일이 구멍을&amp;nbsp;통하여&amp;nbsp;다 빠졌다면 이제 오일 필터를 교환할 차례이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 녀석을 돌려서 뺄 때도 엔진 오일이 벌컥~ 쏟아지므로 주의하는 것이 좋다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2719A63F57F926E103&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2719A63F57F926E103&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;IMG_20161001_110556.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이제 드레인 볼트를 적당히 조인 다음&amp;nbsp;엔진오일 주입구를 열고 오일을 부어주면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;엔진 오일은 쉐보레 정품을 사용하였는데, 품질은 그럭저럭 괜찮은 편이라고 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 하지만...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 쉐보레 커뮤니티에서 어떤 작자가 뉴 말리부의 엔진 오일이 4.7리터 들어간다는 게시물을 올렸고,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그 것을 그대로 믿고 귀찮으니 더 조사도 안 한채 4.7리터 이상을 넣어버렸다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 엔진 오일을 다 교체하고 출발하는 순간 뒤에서 누가 차를 잡아채는 느낌이 들었다. 기존에는 엑셀을 밟으면 우앙~~ 하는 소리와 함께 괜찮은 가속력을 보여줬지만 엔진 오일을 과다 주입하고 나서는 우웅~ 하는 낮게 깔리는 소리와 2천 알피엠 이상 올라가는 것도 힘겨워 하는 듯 했다. 고속 주행시 많이 조용해진&amp;nbsp;것 같아서 훨씬 좋았지만 이러다 영원히 조용해 지는 것 아닐까 하는 걱정에 과다 주입된 엔진 오일 빼기를 시도하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;처음에는 약국에서 파는 60ml 용량의 주사기와 실리콘 호스를 이용하였지만, 엔진 오일 과다 주입 실수에&amp;nbsp;대하여 크게 반성하고 후회하게&amp;nbsp;만드는 힘과 시간이 필요하였다. 저 얇은 실리콘 호스를 넣고 주사기를 잡아 당기면 물처럼 쭉~~ 빨려 올라올 줄 알았건만, 엔진 오일의 점도 때문에 피스톤과 씨름을 해야 될 정도였다. 결국 주사기와 실리콘 호스는 아깝지만 버렸다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25174E4257F92D150F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25174E4257F92D150F&quot; width=&quot;723&quot; height=&quot;966&quot; filename=&quot;IMG_20161003_134219.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;두 번째로 샴푸 뚜껑을 이용하는 방법을 사용하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2515034257F92D1110&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2515034257F92D1110&quot; width=&quot;723&quot; height=&quot;966&quot; filename=&quot;IMG_20161003_123900.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;총비용은 5,500원으로 동네 다이소 같은 곳에서 재료를 구입하였다. 저 실리콘 튜브는 어항에 사용되는 호스다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2715994257F92D1210&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2715994257F92D1210&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;IMG_20161003_125548.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;호스를 펌프의 파이프 안쪽으로 넣으면 사용하는 도중에 압력이 새버릴 수도 있으므로 호스를 벌려서 펌프 파이프에 넣은 다음 순간 접착제를 붙이고 테이프로 칭칭 감았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2420734257F92D140F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2420734257F92D140F&quot; width=&quot;723&quot; height=&quot;966&quot; filename=&quot;IMG_20161003_133518.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그리고 엔진오일 게이지를 뽑고 그 자리에 호스를 쭉쭉~ 넣으면 된다. 이 과정이 좀 어려운 점이 있는데, 호스 끝을 엔진오일에 닿도록 해야 한다. 너무 많이 넣어도 안 된다. 만약 호스의 끝이 엔진 오일에 닿지 않는다면 펌프질을 할 때&amp;nbsp;공기만 빨아들이게 된다 .아마도 그 이유는 아래 그림과&amp;nbsp;같지 않을까 생각된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 621px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2519A83457F9314614&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2519A83457F9314614&quot; width=&quot;621&quot; height=&quot;254&quot; filename=&quot;엔진오일.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;물론 100% 나의 상상이다. &amp;nbsp;갈색 부분이 엔진오일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;어쨌든 한 번에 안 되어서 여러 번&amp;nbsp;삽질해야만 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;결국, 아래 동영상처럼&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;샴푸 뚜껑 펌프를 이용하여 엔진 오일을 쭉쭉~ 뽑을 수 있게 되었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/4MA719eg3Uo&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 377px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26036B4D57F9A1BE19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26036B4D57F9A1BE19&quot; width=&quot;377&quot; height=&quot;307&quot; filename=&quot;IMG_20161003_134851.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;엔진 오일을 뽑기 전에는 엔진 오일 게이지에&amp;nbsp;대략 분홍색 화살표가 있는 부분까지 엔진 오일이 찼었는데,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;뽑고 나서 빨간색 화살표 위치 쯤으로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;줄어들었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 것을 보면 얼마나 많은 엔진 오일이 과다 주입되어있는지 감을 잡을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2513803557F931900E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2513803557F931900E&quot; width=&quot;723&quot; height=&quot;540&quot; filename=&quot;IMG_20161003_212445.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1리터를 넘게 뽑았다. 이 오일은 다음 엔진오일 교체할 때 정비소에 버릴 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;정비소에서는 폐 오일을 모아서 수거 업자에게 판매하며, 최종적으로 폐유를 재가공 하여 벙커C유로 탄생시킨다고 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>기타 취미/DIY</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/89</guid>
      <comments>https://yagnu.tistory.com/89#entry89comment</comments>
      <pubDate>Sun, 9 Oct 2016 02:56:06 +0900</pubDate>
    </item>
    <item>
      <title>JAVA 에서 javascript (ECMA script) 실행하기.</title>
      <link>https://yagnu.tistory.com/88</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;JAVA6 부터 자바 스크립트 엔진을&amp;nbsp;기본적으로 지원한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 127);&quot;&gt;(ps, 안드로이드에서는 자바 스크립트 엔진이 직접 포함되지 않는다. 그렇기 때문에 RhinoScriptEngine 프로젝트를 직접 적용해야 한다.&amp;nbsp;https://github.com/mozilla/rhino)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;JAVA8 미만은&amp;nbsp;RhinoScriptEngine 을 사용하며, &amp;nbsp;8 버전에서는&amp;nbsp;NashornScriptEngine 을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하지만 사용방법은 동일하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;물론 각 브라우저에서 사용할 수 있는 자바 스크립트 API 는 제공되지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;아래 예제는 콘솔을 통하여 두 수를 입력 받아 각각 함수와 객체를 이용하여 덧셈을 하고 그 결과 값을 출력해 주는 코드다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt;&quot;&gt;&lt;strong&gt;test.js :&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;calc()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
   	    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;첫 번째 값 : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  	    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.readInt();&lt;/span&gt;
  	    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;두 번째 값 : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
 	    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.readInt();&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.println(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;32 바이트 정수를 입력해 주세요.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.printStackTrace();&lt;/span&gt;
	    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;result&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sum(param1,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2);&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;calc&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Calculator.newInstance();&lt;/span&gt;


	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;결과 (function 이용) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.println(param1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot; + &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot; = &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sum(param1,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2));&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;결과 (object 이용) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;console.println(param1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot; + &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot; = &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;calc.sum(param1,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;param2));&lt;/span&gt;



	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sum(val1,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val2)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	   &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val2;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;calc();&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위 자바 스크립트 코드를 보면 생소한 API 들이 보일 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;아래 자바 코드 예제에서 보면 객체를 자바 스크립트의 객체 이름을 자바의 객체와&amp;nbsp;맵핑을 시켜놓았다는 것을 알 수 있을 것이다. 자바 객체의 내부 메소드도 함께&amp;nbsp;맵핑된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;즉, 자바 스크립트 API 를 입맛대로 만들어서 적재적소에 사용할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;물론 떨어지는 성능은 감안해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div id=&quot;preview&quot; style=&quot;padding-bottom: 3em; margin: auto 1em; color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt;&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Preview:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.io.File;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.io.FileNotFoundException;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.io.FileReader;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.util.Scanner;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;javax.script.Bindings;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;javax.script.ScriptEngine;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;javax.script.ScriptEngineManager;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;javax.script.ScriptException;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;javax.script.SimpleBindings;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ScriptTest&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;main(&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ScriptException,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileNotFoundException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;js&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;File(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;./test.js&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileReader&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;JsfileReader&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileReader(js);&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ScriptEngineManager&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;manager&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ScriptEngineManager();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ScriptEngine&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;engine&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;manager.getEngineByName(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;js&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		
		
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Bindings&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bindings&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;SimpleBindings();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bindings.put(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;console&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Console());&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bindings.put(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Calculator&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Calculator());&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;engine.&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(JsfileReader,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bindings);&lt;/span&gt;

	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Calculator&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sum(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val1,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val2)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val2;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Calculator&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;newInstance()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Calculator();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Console&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readInt()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Scanner&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;scanner&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Scanner(System.&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;line&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;scanner.nextLine();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Integer.&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;parseInt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(line);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;print(&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;line)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.out.print(line);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;println(&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;line)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.out.println(line);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;결과는 아래와 같다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);&quot;&gt;첫 번째 값 : 123 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);&quot;&gt;두 번째 값 : 456 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);&quot;&gt;결과 (function 이용) : 123 + 456 = 579 &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;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);&quot;&gt;결과 (object 이용) : 123 + 456 = 579 &amp;nbsp; &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;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <category>Java</category>
      <category>javascript</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/88</guid>
      <comments>https://yagnu.tistory.com/88#entry88comment</comments>
      <pubDate>Mon, 23 May 2016 11:20:18 +0900</pubDate>
    </item>
    <item>
      <title>스트링 엔코딩 변환 - euc-kr &amp;lt;---&amp;gt; utf-8</title>
      <link>https://yagnu.tistory.com/87</link>
      <description>&lt;p&gt;세 줄 요약.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. JAVA 의 String 클래스는 유니코드로 처리되는&amp;nbsp;char 의 배열 이외에 어떠한 인코딩 정보를 갖고 있지 않는다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;2. String.getByte('인코딩명') 을 사용하여 인코딩 할 수 있으며, new String(byte[], &quot;인코딩명&quot;) 을 사용하여 &amp;nbsp;디코딩 할 수 있다/.&lt;/p&gt;&lt;p&gt;3. EUC-KR 에서 UTF-8 으로 바꾸기 위해서는 EUC-KR ---&amp;gt; java.lang.String ----&amp;gt; UTF-8 과 같은 방식으로 변환 할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp;&lt;strike&gt;기본적으로 자바의 String 클래스는&lt;/strike&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;strike&gt;&amp;nbsp;2 byte 크기의 유니코드를 사용하여 문자열을 처리하는 Character 배열을 감싸고 있는 형태이다.&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html&quot;&gt;https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html&lt;/a&gt;&amp;nbsp;참고.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp;JDK 1.8 의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String 클래스의 코드를 보면 아래와 같이...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;String&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;implements&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;Serializable&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Comparable&amp;lt;String&amp;gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CharSequence&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/** The value is used for character storage. */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;value[];&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/** Cache the hash code for the string */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;hash;&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Default to 0&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/** use serialVersionUID from JDK 1.0.2 for interoperability */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;serialVersionUID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6849794470754667710L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;

    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * Class String is special cased within the Serialization Stream Protocol.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     *&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * A String instance is written into an ObjectOutputStream according to&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * &amp;lt;a href=&quot;{@docRoot}/../platform/serialization/spec/output.html&quot;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * Object Serialization Specification, Section 6.2, &quot;Stream Elements&quot;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ObjectStreamField[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;serialPersistentFields&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ObjectStreamField[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;







&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;달랑 네 개의 필드를 확인할 수 있는데, 여기에 문자열 관련된 값이 저장되는 것은 value[] 가 유일하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String 클래스의 &amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(34, 116, 28); font-size: 10pt;&quot;&gt;getBytes() &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;line-height: 1.5; font-size: 10pt;&quot;&gt;메소드를 사용하여 String 을 다른 인코딩으로 변환할 수 있으며, 이 것은 즉 2byte 의 유니코드가 다른 인코딩으로 변환되어 반환되는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px;&quot;&gt;&amp;nbsp; getBytes() 사용시 아무런 인자값을 넣지 않고 호출한다면, 그리고 JVM 실행 옵션으로 인코딩을 정의하지 않았다면 ( 예 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Gulim; font-size: 13.3333px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8) 시스템 기본 인코딩으로 변환되어 나올 것이다. 만약 윈도우에서 아무런 옵션 없이 JVM 을 실행하여 String 에 대하여 getBytes() 를 호출한다면 MS949 로 인코딩된 byte 배열이 튀어나올 것이다. (윈도우에서 돌아가는 JVM은&amp;nbsp;기본적으로 MS949 를 사용하기 때문이다.) 이렇게 아무런 인자값 없이 getBytes() 를 호출한다면&amp;nbsp;내부적으로 JVM 기본 인코딩을 정보를 가져오는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;getProperty(&quot;file.encoding&quot;) 을 호출하여 얻은 결과 값으로 시스템 인코딩 값으로 인코딩 한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;그렇기 때문에 String 으로부터 자신이 원하는 인코딩 바이트 배열을 얻기 위해서는 아래 예제처럼 인자값으로 인코딩명을 넣어줘야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Gulim; font-size: 13.3333px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;Unicode String --&amp;gt; euc-kr&amp;nbsp;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// String 을 euc-kr 인코딩으로 변환하여 반환.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;안녕하세요?&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte[] euckrStrBuffer = &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;elloString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: Gulim; font-size: 13.3333px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;위 구현은 내부적으로 String 을 인코드&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;혹은 디코드&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;해주는 StringCoding 클래스의 encode 라는 이름의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;static 메소드를 이용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하지만,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5; font-size: 10pt;&quot;&gt;StringCoding 클래스는 protected 클래스기 때문에 직접적으로 사용할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하지만 String.getBytes(&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;) &amp;nbsp;메소드를 쓰는 방법 이외에도&amp;nbsp;같이 &amp;nbsp;nio 의 Charset 을 이용하여&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String 을 euc-kr 로 변환할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Unicode String --&amp;gt; euc-kr&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;(nio.charset 사용)&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrCharset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ByteBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byteBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrCharset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;encode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(helloString);&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrStringBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[byteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;remaining&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()];&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(euckrStringBuffer);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;다음으로 인코딩된&amp;nbsp;문자열의 바이트 배열을 다시 String 으로 만드는 방법이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;euc-kr --&amp;gt; Unicode String&amp;nbsp;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;안녕하세요&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; 
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrStringBuffer&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// euc-kr 로 변환된 byte 문자열을 다시 유니코드 String 으로 변환.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// String 생성자의 &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 첫 번째 인자로 문자열 byte 배열을  넣어주고, &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 두 번째 인자로 byte 배열의 인코딩 값을 넣어준다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedHelloString&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(euckrStringBuffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 것 또한 마찬가지로 nio 의 Charset 를 이용하여 디코드 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;euc-kr --&amp;gt; Unicode String (nio.charset 사용)&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrCharset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CharBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrCharset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;decode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ByteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;wrap&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(euckrStringBuffer));&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedHelloString&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;System.out.Println 를 찍어보면 값이 정상적으로 변환된&amp;nbsp;것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그렇다면, euc-kr 을 utf-8 로 변환시키거나 또는 반대로 변환시키고 싶을 때는 어떻게 해야 하는가?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;답은 도중에 String 으로 변환하는 과정을 한 번 거치면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;EUC-KR ---&amp;gt; UTF-8&amp;nbsp;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;안녕하세요. ㄱㄴㄷㄹㅁㅂㅆㅢ 놟쐛씗쀍&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Source : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString);&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// String 을 euc-kr 로 인코딩.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrStringBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloString.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr - length : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;euckrStringBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedFromEucKr&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(euckrStringBuffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;euc-kr&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;String from euc-kr : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedFromEucKr);&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// String 을 utf-8 로 인코딩.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;utf8StringBuffer&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedFromEucKr.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;

&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;utf-8 - length : &quot;&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;utf8StringBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedFromUtf8&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(utf8StringBuffer,&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;String from utf-8 : &quot;&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodedFromUtf8);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;즉 위 코드는&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;b&gt; &lt;span style=&quot;font-size: 11pt;&quot;&gt;euc-kr ---&amp;gt; JAVA String 객체(유니코드) &amp;nbsp;---&amp;gt; utf-8&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;과 같은 과정으로 인코딩 변환이 되는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;하지만, 아래 결과를 살펴보면...&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;결과:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;Source : 안녕하세요. ㄱㄴㄷㄹㅁㅂㅆㅢ 놟쐛씗쀍&lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;euc-kr - length : 33&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;String from euc-kr : 안녕하세요. ㄱㄴㄷㄹㅁㅂㅆㅢ ????&lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;utf-8 - length : 46&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;String from utf-8 : 안녕하세요. ㄱㄴㄷㄹㅁㅂㅆㅢ ????&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;깨지는 글자가 발생하게 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;이유는 완성형인&amp;nbsp;euc-kr 이 &lt;span style=&quot;color: rgb(255, 0, 127);&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 127); line-height: 16.25px;&quot;&gt;놟쐛씗쀍'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;과 같은 문자를 지원하지 못하기 때문에 문자열 &lt;span style=&quot;color: rgb(255, 0, 127);&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 127); line-height: 16.25px;&quot;&gt;안녕하세요. ㄱㄴㄷㄹㅁㅂㅆㅢ 놟쐛씗쀍'&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;를 인코딩 할 경우 지원하지 못 하는 문자에 대한&amp;nbsp;손실이 일어나게 되는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(204, 204, 204); line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/87</guid>
      <comments>https://yagnu.tistory.com/87#entry87comment</comments>
      <pubDate>Mon, 7 Mar 2016 02:05:51 +0900</pubDate>
    </item>
    <item>
      <title>Nexus5 액정 저렴하게 자가 수리하기.</title>
      <link>https://yagnu.tistory.com/86</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;넥서스5 액정을 교체해 보겠다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;우선 부품을 구해야 하는데, 해외 직구로 구매하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;알리 익스프레스에서 구매하였는데, 주의할 점은 반드시 터치와 LCD 가&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;함께 붙어있는 모듈을 사야한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;접착제로 터치와 LCD 가 붙어있기 때문에 따로 분리하기가 매우 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;가격은 32달러부터 40달러까지 하는 것 같은데, 나는 33.99 달러에 구입하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2138443D5676ADBD01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2138443D5676ADBD01&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0085.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;넥서스5 의 깨진 액정.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/241F033D5676ADBF1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241F033D5676ADBF1F&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0086.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;알리 익스프레스에서 구매한지 보름만에 도착하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;꼼꼼한 포장상태.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2730013D5676ADC20B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2730013D5676ADC20B&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0087.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;테이프를 뜯고 뚜껑을 열자 분해 조립에 필요한&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;간단한 도구 몇 개가 들어있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2614CC3D5676ADC32A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2614CC3D5676ADC32A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0088.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;모든 구성물을 꺼낸 상태. 가장 왼쪽에 보이는 녀석은 하드 글라스 형태의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;액정 보호필름. 나름 저렴한 가격에 풍부한 구성을 갖추고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2404B23D5676ADC53A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2404B23D5676ADC53A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0089.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 왼쪽은 액정 깨진 넥서스5. 오른쪽은 교체될 터치 액정 패널.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2434603D5676ADC906&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2434603D5676ADC906&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0090.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27613B385676AE7B1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27613B385676AE7B1E&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0119.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;액정 수리 킷에 포함되어있는 도구 외에 핀셋과 다이소표 미니&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;일자 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;드라이버를 함께 준비하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23053B3D5676ADCA39&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23053B3D5676ADCA39&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0091.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 주걱을 이용하여 틈을 벌려나가는 방식으로 뒷 뚜껑을 분리한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;text-align: center; line-height: 1.5; font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25147F3D5676ADCC29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25147F3D5676ADCC29&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0094.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 곳곳에 보이는 나사들을 풀어줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23220D3C5676AE170E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23220D3C5676AE170E&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0095.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;나사를 모두 푼 상태에서 상단 보드와 하단 보드를 덮고있는 덮게를 제거한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27021F445676B7F817&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27021F445676B7F817&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0096.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;빨간색 점선 동그라미 부분의 커넥터를 조심스럽게 제거하고 상단 메인보드를 분리한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;커넥터를 제거할 때 주의할 점은 절대 케이블을 붙잡고 뽑으면 안 된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;케이블이 단선이 될&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;수 있으므로 커넥터를 잡고 조심스레 뽑아야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;두 번째로 주의할 점은 유심을 먼저 뽑아야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;나는 실수로 유심을 뽑지 않고 메인보드 제거를 시도해서 꽤 고생을 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/246D9E385676AE460D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F246D9E385676AE460D&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0098.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;완전히 분리된 메인보드. 실수로 제거하지&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;않은 유심이 그대로 남아있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27259E4C5676B92A1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27259E4C5676B92A1A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0099.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제, 하단 보드를 분해할 차례. 먼제 터치 패널과 연결되어있는 커넥터를 제거해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/215091365676B03737&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F215091365676B03737&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0102.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하단 보드를 조심스럽게 제거하였다. 우측 부분이 양면 테잎으로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;붙어있기 때문에 조심스럽게 분리하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/276D64385676AE4E0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F276D64385676AE4E0E&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0108.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 719px; line-height: 1.5; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2375853A5676B06110&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2375853A5676B06110&quot; width=&quot;719&quot; height=&quot;235&quot; filename=&quot;IMG_0103.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;line-height: 1.5; text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;후면 카메라 모듈을 분리해준다. 역시 양면 테잎으로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;부착되어 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/272DE9375676B0A938&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F272DE9375676B0A938&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0112.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2608AB3A5676B0C108&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2608AB3A5676B0C108&quot; width=&quot;720&quot; height=&quot;218&quot; filename=&quot;IMG_0113.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이어폰 단자 모듈과 전면 카메라 모듈을 분리하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 535px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/257F483B5676B0E70E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F257F483B5676B0E70E&quot; width=&quot;535&quot; height=&quot;303&quot; filename=&quot;IMG_0116.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2338F9345676AF1030&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2338F9345676AF1030&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0140.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;수화기용 이어&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;스피커와 그 것을 받치고 있던&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;플라스틱 조각을 분리한다.&amp;nbsp;&lt;/span&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 722px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/212AD93D5676B13425&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F212AD93D5676B13425&quot; width=&quot;722&quot; height=&quot;236&quot; filename=&quot;IMG_0141.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 724px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/245D7E3E5676B14635&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F245D7E3E5676B14635&quot; width=&quot;724&quot; height=&quot;254&quot; filename=&quot;IMG_0142.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;플라스틱 조각과 이어&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;스피커 모듈을 결합해 준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(금속 단자가 눌리지 않게 주의한다. 만약 금속 단자가 눌렸&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;다면 살짝 펴준다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23599C385676AE7825&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23599C385676AE7825&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0117.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;모든 모듈을 분리한 상태. 이제 조립은 분해의 역순으로...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/256AD4495676BB0F13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F256AD4495676BB0F13&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0118.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아래쪽에 보이는 것은 기존의 깨진 패널, 위쪽이 새로 구입한 패널이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;새로 구입한 패널에는 전원 버튼과 볼륨 버튼이 포함되어 있지 않기 때문에 스위치를 분리해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 719px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2759EA445676B1C61C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2759EA445676B1C61C&quot; width=&quot;719&quot; height=&quot;273&quot; filename=&quot;IMG_0130.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;기존 패널에서 분리한 전원 스위치와 불륨 조절용 스위치 조각.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2675E43A5676AFFD0D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2675E43A5676AFFD0D&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0121.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;조립의 첫 번째 과정으로 미리 발라져 있는 양면 테잎의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;보호 필름을 제거한다. 흰색 또는 파란색 반투명 필름으로 되어있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226310385676AE841C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226310385676AE841C&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0122.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;모든 양면 테잎 보호용 필름을 제거하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;후면 카메라, 이어 스피커, 이어폰 단자, 전면 카메라를 방향에 맞게 잘 부착해준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(위 사진에서 보이는 이어 스피커 모듈은 실수로 플라스틱 조각을 빼고 부착한 상태다.;;; )&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/235EEF385676AE8620&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F235EEF385676AE8620&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0123.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/276BD3385676AE8B11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F276BD3385676AE8B11&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0124.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하단도 마찬가지로 양면테이프 보호용 필름을 제거하고 터치 패널용 커넥터를 부착한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/215EEF385676AFE328&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F215EEF385676AFE328&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0125.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하단 보드를 위치에 맞게 잘 올려놓고 커넥터를 연결한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/277A2E3B5676AFBA0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F277A2E3B5676AFBA0A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0128.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 배터리를 부착한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 542px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/227DFC505676BD0431&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F227DFC505676BD0431&quot; width=&quot;542&quot; height=&quot;723&quot; filename=&quot;IMG_0133.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;메인보드를 &amp;nbsp;올려놓기 전에 전원 스위치와 볼륨 스위치를 새 터치 패널에 끼운다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;전원 스위치는 위 빨간 동그라미처럼 스위치에 달려있는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;고리에&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;맞춰서 잘 끼워야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/225D73345676AF1907&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F225D73345676AF1907&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0144.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;상단 메인보드를 올려놓고 분리되었던 커넥터를 모두 연결해준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226850435676B22C0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226850435676B22C0A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0135.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;상단 플라스틱 덮게를 덮고 나사를 조여준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/255F31345676AF1B05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F255F31345676AF1B05&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0145.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하단 덮게를 덮고 나사를 조여준 다음 뒷 뚜껑을 닫고 손가락으로 꾹꾹 눌러준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/225B69345676AF0509&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F225B69345676AF0509&quot; width=&quot;723&quot; height=&quot;964&quot; filename=&quot;IMG_0138(1).jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 전원을 켜고 액정,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;진동, 이어 스피커, 스피커, 이어폰 단자, 후면 카메라, 전면 카메라가 잘 동작하는지 확인한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;물론 잘 동작할 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24385E345676AF1D30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24385E345676AF1D30&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0146.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 마지막으로 사은품(?) 으로 들어있는 액정 보호지를 부착해준다. 하드 글라스 형태라서 붙이는 것이 쉽지 않다. 본인은 이 것을 붙이는 것이 가장 어려웠다;;;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>기타 취미/DIY</category>
      <category>nexus5</category>
      <category>넥서스5</category>
      <category>넥서스5 액정 수리</category>
      <category>알리익스프레스</category>
      <category>액정 교체</category>
      <category>액정 교체 키트</category>
      <category>액정 수리</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/86</guid>
      <comments>https://yagnu.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 20 Dec 2015 23:48:52 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 간단한 일회성 JSON 데이터를  만들기 귀찮을 때...</title>
      <link>https://yagnu.tistory.com/85</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; API 서버를 개발하다보면 아래와 같이 간단한 JSON 타입을 Response 값으로&amp;nbsp;반환해야 하는 경우가 종종 생긴다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;color: rgb(51, 51, 51); margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; 
         &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&quot;success&quot; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
         &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&quot;id&quot; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;         &quot;items&quot;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;font color=&quot;#3677a9&quot;&gt;7&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;],&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;         &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
                  &lt;/font&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;  &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;  &lt;/font&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;get&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
                  &lt;/font&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;   &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;     &lt;/font&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;202&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
         &lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;font color=&quot;#333333&quot;&gt;
&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 만약 위 값이 일회성이라고 가정할 때, &amp;nbsp;GSON 같은 도구를 사용하기 위하여 객체로&amp;nbsp;만들거나 스트링을 사용해서 이어 붙이기에는 구현하기가 복잡하거나 귀찮아 지는 경우가 종종 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그래서 이런 귀찮은 작업들을 간단하게 줄여주는 코드를 만들었고, 공유한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;JsonMaker.java 파일을 만들고 아래 주소에 있는 코드를 붙여넣기 하여 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;a href=&quot;https://gist.github.com/ice3x2/0e73d96c5c6724116f5f&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://gist.github.com/ice3x2/0e73d96c5c6724116f5f&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 것을 활용한다면, 위 JSON 타입을 간단하게 만들 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;jsonValue&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;JsonMaker.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;success&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 12pt;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
			  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;openArray&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;items&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;closeArray&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
			  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;openObject&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;method&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;get&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
	   	   		  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 12pt;&quot;&gt;&quot;code&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 12pt;&quot;&gt;202&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;
			  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;closeObject&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 12pt;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 12pt;&quot;&gt;();&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;단, 주의사항은(단점) toString() 을 호출하는 순간 내부적으로 생성된 JSON 데이터 리스트가 모두 초기화 되어버린다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;이렇게 한 이유는 메모리 누수를 방지하기 위해서인데, 더 좋은 방법을 고민해보고 개선된 버전이 생기면 업데이트 하겠다.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>개발 관련/개인 자료</category>
      <category>Java</category>
      <category>json</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/85</guid>
      <comments>https://yagnu.tistory.com/85#entry85comment</comments>
      <pubDate>Thu, 3 Dec 2015 09:56:38 +0900</pubDate>
    </item>
    <item>
      <title>짭두이노 USB to serial 드라이버 CH340g, CH341 설치하기.</title>
      <link>https://yagnu.tistory.com/84</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; 값비싼?&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;FTDI 가 달려있는 아두이노나 짭두이노에 대한 설치 자료를 인터넷 검색을 통하여 쉽게 찾아볼 수 있지만, 최근 온라인 쇼핑몰에 심심치 않게 등장하는 초 저가형 짭두이노는 CH340 라는 USB&amp;nbsp;시리얼 변환 드라이브를 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2271723C5651E6391C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2271723C5651E6391C&quot; width=&quot;723&quot; height=&quot;359&quot; filename=&quot;스크린샷 2015-11-22 오후 10.55.40.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; (요즘 알리 익스프레스에 접속하면 자동으로 한글로 번역되어 나오는데, 차라리 영어가 낫다...)&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 특히 아두이노 나노와 호환되는 초 저렴한 짭두이노를 많이 찾아볼 수 있는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이 블로그 포스팅을 작성하고 있는 15.11.23 기준으로 가장 싼 녀석이 1.75 달러다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 현재 환율로 따져보면 초코파이 한박스보다 싼 가격으로 아두이노를 구입할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; 이렇게 다른 짭두이노보다&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;가격이 저렴한 이유는 FTDI 와 같은 비싼 드라이버 대신&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;CH340 (ch340g, ch341) 이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;라는 듣보잡 시리얼 변환 드라이버를 쓰고 있어서라고 판단된다. (물론 시리얼 변환 드라이버가 없는 mini 호환 버전이 가장 저렴하다. 최저가 1.4 달러.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;하지만, 불량률이 높기 때문에 한 번에 여러개를&amp;nbsp;사는 것을 추천한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;그리고 제품 수령 후에는 반드시 전압과 동작&amp;nbsp;테스트를 해봐야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;아직까지는 쓰다가 고장나는 &amp;nbsp;경우는 없었지만, 처음부터 인식이 잘 안된다거나&amp;nbsp;전압이 불안정한 경우가 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;주변으로부터 짭두이노의 인식 불량과 쇼트 문제로 센서를 태워먹은 사례&lt;strike&gt;&lt;span style=&quot;color: rgb(93, 93, 93);&quot;&gt;(너죽고 나살자)&lt;/span&gt;&lt;/strike&gt;에 대한 이야기를 들었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;실제로 한 번에 5개를 샀는데, 그 중에&amp;nbsp;5v output&amp;nbsp;단자에서 3.5~4v 사이를 왔다갔다 하는 전압을 출력하고 3.3v 단자에서 4v 정도를 출력하는 폭탄같은 녀석이 있었다. 미련없이 바로 쓰레기통에 넣어버렸다. ㅡ , ㅡ;;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;어쨌든 윈도우에서 짭두이노를 이용하기 위해서 아래의 드라이버를 다운로드 받는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/226F243A5651EA0F23&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;CH341SER.zip&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;또는 다른 OS 의 드라이버는 아래 주소의 공식 지원 사이트에서 다운로드 받을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;a href=&quot;http://www.wch.cn/download/CH341SER_ZIP.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.wch.cn/download/CH341SER_ZIP.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;MAC 버전은 다운로드 받아서 설치하고 터미널에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(39, 78, 19); font-family: 'Courier New', Courier, monospace; font-size: 10pt; line-height: 19.5px; background-color: rgb(224, 224, 224);&quot;&gt;sudo nvram boot-args=&quot;kext-dev-mode=1&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;를 입력하면 인식이 된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하지만 엘 카피텐 이상부터는 잘 인식이 안 되는 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;리눅스 같은 경우는 소스코드를 직접 빌드하여 사용해야 하는데 우분투에서 사용하려다 포기했다. ㅡ , ㅡa&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;역시 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;가장 잘 되는 것은 윈도우다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;설치 및 적용 방법은 아래와 같다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;첫 번째로 드라이버를 다운로드 받아서 압축을 푼다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;만약 자신이 쓰고있는 윈도우가 64비트 버전이라면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;DRVSETUP64 &amp;nbsp;폴더에 있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;DRVSETUP64.EXE 파일을 밖으로 복사하고 실행한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;만약 32비트라면 그냥 SETUP.exe 파일을 실행한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;자신의 윈도우가 몇 비트인지 모를때는 그냥 64비트처럼 둘 다 복사하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;DRVSETUP64.EXE 부터 실행시켜 본다. 만약 32비트라면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;DRVSETUP64.EXE 는 실행되지 않을 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 576px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/215E6E3E5651EC1824&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F215E6E3E5651EC1824&quot; width=&quot;576&quot; height=&quot;433&quot; filename=&quot;스크린샷 2015-11-22 오후 10.43.19.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;인스톨 버튼을 누른다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;파일이 드라이버 폴더에 복사되는 것으로 보인다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 426px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/260C343C5651E63201&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F260C343C5651E63201&quot; width=&quot;426&quot; height=&quot;280&quot; filename=&quot;스크린샷 2015-11-22 오후 10.43.10.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;이제 짭두이노를 PC 에 연결한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그리고 바탕화면의 내 컴퓨터에서 오른쪽 버튼을 누르고 '속성' 으로 들어가서 '장치 관리자' 에 들어간다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 347px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2769A33C5651E63324&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2769A33C5651E63324&quot; width=&quot;347&quot; height=&quot;230&quot; filename=&quot;스크린샷 2015-11-22 오후 10.44.06.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 207px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226A543E5651ED9F23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226A543E5651ED9F23&quot; width=&quot;207&quot; height=&quot;223&quot; filename=&quot;스크린샷 2015-11-22 오후 10.44.17.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;그럼 아래와 같이 PC 에 연결된 드라이버 리스트가 뜨는데, &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;포트 (COM &amp;amp; LPT)&lt;/span&gt; 트리 내부에&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;USB-SERIAL CH340(COM 포트번호)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;가 존재하는지 확인하자. 만약 아래 이미지와&amp;nbsp;같이 보이지 않는다면...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;1. 컴퓨터를 재시작하거나,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;2. Mini USB 케이블이 불량인지 확인하거나 (의외로 잘 고장난다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;3. 다른 짭두이노를 연결해본다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;위와 같은 순서대로 확인해 본다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/235E74425651EDD036&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F235E74425651EDD036&quot; width=&quot;723&quot; height=&quot;530&quot; filename=&quot;스크린샷 2015-11-22 오후 10.44.33.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;위 그림에서 짭두이노와 연결될 포트 번호를 확인한 뒤에 아두이노 IDE 의 상단 메뉴의&amp;nbsp;'툴(도구)-&amp;gt;포트' &amp;nbsp;에서 방금 확인한 포트 번호로 설정해 보자. &amp;nbsp;Arduino Nano 호환 보드를 사용했으니 보드 항목도 이와 같도록 맞춰준다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 513px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/215EB03C5651E63C2F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F215EB03C5651E63C2F&quot; width=&quot;513&quot; height=&quot;426&quot; filename=&quot;스크린샷 2015-11-22 오후 10.57.05.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;정품 아두이노와 다르게&amp;nbsp;시리얼 변환 드라이버의 거북이 같은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;속도 덕분에&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;업로드 도중에 간혹 잘 되고 있는지 궁금할 때가 있는데, 그럴 경우는 '환경설정' 에서 '다음 동작중 자세한 출력 보이기:' 항목의 '업로드' 체크 박스를 선택해 주면 되겠다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 715px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21643F3C5651E63D29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21643F3C5651E63D29&quot; width=&quot;715&quot; height=&quot;463&quot; filename=&quot;스크린샷 2015-11-22 오후 10.57.48.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>CH340</category>
      <category>CH341</category>
      <category>아두이노</category>
      <category>짭두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/84</guid>
      <comments>https://yagnu.tistory.com/84#entry84comment</comments>
      <pubDate>Mon, 23 Nov 2015 00:51:30 +0900</pubDate>
    </item>
    <item>
      <title>JAVA 텍스트 파일의 Encoding 정보 가져오기 + String Encoding 변환하기.</title>
      <link>https://yagnu.tistory.com/83</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이클립스로 작성된 다양한 프로젝트들을 의존하는 프로젝트를 생성하는 경우 인코딩 문제로 당황스러울 때가 종종 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&amp;nbsp; 만약 여러개의 프로젝트내의 소스 파일들이&amp;nbsp;각각 다른 인코딩으로 저장되었을 경우 이 것을 한 번에 utf-8 로 바꾸는 방법에 대하여 알아볼 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;1. 텍스트 파일 (혹은 java 파일) 의 인코딩 정보 가져오기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; Text 파일 혹은 Java 소스 파일의 인코딩을 확인하는 방법은 여러가지가 있지만&amp;nbsp;가장 정확하면서 간단한 방법은 바로 &amp;nbsp;juniversalchardet (&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;https://code.google.com/p/juniversalchardet/&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;라이브러리를 사용하는 것이다.&lt;/span&gt; &lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;(무식한? 방법으로는 파일을 읽어서 테스트 하려는 인코딩의 스트링으로&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;&amp;nbsp;변환하고 character 배열을 받아&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;&amp;nbsp;0xfffd 문자&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;를 찾는 방법이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;있다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 0, 255);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;우선 라이브러리를 다운 받아서 프로젝트에 포함시킨다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Maven Repository 주소는 아래와 같다. &amp;nbsp;(or&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이 곳에서 라이브러리를 다운로드 받을 수 있다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.mvnrepository.com/artifact/com.googlecode.juniversalchardet/juniversalchardet/1.0.3&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;http://www.mvnrepository.com/artifact/com.googlecode.juniversalchardet/juniversalchardet/1.0.3&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;아래 코드는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;juniversalchardet 프로젝트 페이지 메인에 나온 샘플 코드를 그대로 옮겨온 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;이렇게 간단한 방법으로 텍스트 파일의 인코딩 정보를 바로 가져올 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;샘플 코드:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;org.mozilla.universalchardet.UniversalDetector&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;TestDetector&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;IOException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buf&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4096&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fileName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;FileInputStream&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;FileInputStream&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(fileName);&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;UniversalDetector&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;UniversalDetector(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;nread;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((nread&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buf))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isDone&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;handleData&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buf,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;nread);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;dataEnd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getDetectedCharset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Detected encoding = &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;No encoding detected.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;2. String 의 인코딩 바꾸기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&amp;nbsp; 아래 코드는 &quot;헬로월드!&quot; 라는 문자열을 EUC-KR 로 인코딩하여 출력한다음 다시 UTF-8 로 디코딩하여 출력하는 예제이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&amp;nbsp; java.nio 의 Charset 을 통하여 문자열을 인코딩 및 디코딩할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// UTF-8.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;String(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 10pt;&quot;&gt;&quot;헬로월드!&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Charset&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;eucKRCharset&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 10pt;&quot;&gt;&quot;EUC-KR&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;CharBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;sourceBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;CharBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;wrap&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(str.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;toCharArray&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;());&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;ByteBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;resultByteBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;eucKRCharset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;encode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(sourceBuffer);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;resultBytes&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;resultByteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// EUC-KR 의 String 을 생성할 때, 두번째 인자값으로 인코딩 정보를 넣어준다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;String(resultBytes,&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;eucKRCharset));&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 만약 인코딩 정보를 넣지 않는다면 에러 스트링이(�, 0xfffd) 이 출력될 것이다. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;String(resultBytes));&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 원래의 UTF-8 로 디코딩.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;CharBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;charBuffer&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;eucKRCharset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;decode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(ByteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;wrap&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(resultBytes));&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(charBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;3. 응용 - workspace 내의 모든 자바 소스 파일을 UTF-8 로 바꾸기&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;p style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;color: rgb(51, 51, 51); font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;IOException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 프로젝트 폴더 경로&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodingProjectSources(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;File(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;/home/name/worksapce&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt;  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;decodingProjectSources&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;IOException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 자바 파일만 UTF-8로 디코딩&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isFile&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;matches&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;^.*\\.((?i)JAVA)$&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readEncoding(file);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!encoding.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodingFile(file,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isDirectory&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;File[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;list&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;listFiles&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;childFile&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;list)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;decodingProjectSources(childFile);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;decodingFile&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;IOException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charset&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;forName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(encoding);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileInputStream&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileInputStream(file);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ByteOutputStream&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fbs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ByteOutputStream();&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4096&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((n&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fbs.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;n);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CharBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charBuffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;charset.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;decode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ByteBuffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;wrap&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(fbs.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getBytes&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()));&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BufferedWriter&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bw&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BufferedWriter(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileWriter(file));&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bw.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(charBuffer);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bw.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;readEncoding&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file)&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;IOException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buf&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4096&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;FileInputStream&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;io&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;FileInputStream&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(file);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;UniversalDetector&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;UniversalDetector(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;nread;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((nread&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buf))&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isDone&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;handleData&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buf,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;nread);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;dataEnd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getDetectedCharset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;detector.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;reset&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buf&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fis.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encoding&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:encoding;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/83</guid>
      <comments>https://yagnu.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 18 Nov 2015 15:06:15 +0900</pubDate>
    </item>
    <item>
      <title>무선 인터넷으로 제어하는 가습기 개발기</title>
      <link>https://yagnu.tistory.com/82</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px; line-height: 20px;&quot;&gt;프로젝트 코드 및 회로도는&amp;nbsp;아래 주소에서 확인하세요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/ice3x2/Wifi_Humidifier&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 18.6667px; line-height: 20px;&quot;&gt;https://github.com/ice3x2/Wifi_Humidifier&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 아두이노를 취미로 시작한지 1년이 지났다. 그 이후로 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;수집벽이 생겼는데, &amp;nbsp;센서나 부품을 쓰지도 않으면서 알리 익스프레스를 통하여 모으는 일이다&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;덕분에 책상 위에 온갖 센서들이 굴러다닌다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;초창기에 구입한 ESP8266 ESP-1 도 그 중에 하나인데, 사놓고 사용하지를 않아 아까워서 이번 프로젝트에 사용하게 되었다. 단, ESP8266은 80Mhz 와 메모리 32kbyte 의 뛰어난&amp;nbsp;성능을 갖고 있는데, 그 자체로 IOT 플랫폼으로 사용할 수 있다. 하지만 ESP-1은 최신 버전인 ESP-12 와 다르게 사용할 수 있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;GPIO &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;포트가 얼마 되지 않고 아날로그 입력을 받도록 처리하는 것도 귀찮아서 그냥 알리익스프레스에서 1달러에&amp;nbsp;구입한 Mini 또는 nano 와 호환되는 짭두이노를 연결 하였는데, 생각해보니 벤츠 SLS 에 마티즈 엔진을 얹고 달리게 하는 것과 비슷하다. ㅡ , ㅡa&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt; line-height: 1.5;&quot;&gt;1. 삽질의 시작.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;요새 날씨가 건조하니 비염이 심해지기 시작했다. 그래서 아래와 같이 가습기를 구입하였다. 위x프 에서 구입한 보만 미니 가습기인데, 번들로 페트병 하나가 들어있는 것이 인상적이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 136px; width: 136px; height: 300px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/245E1E41566D726C25&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F245E1E41566D726C25&quot; width=&quot;136&quot; height=&quot;300&quot; filename=&quot;IMG_0001.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 136px; height: 300px;&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 361px; width: 361px; height: 270px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27691F45566D721813&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27691F45566D721813&quot; width=&quot;361&quot; height=&quot;270&quot; filename=&quot;IMG_0002.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 361px; height: 270px;&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; (이 글을 작성한 시점에서는) 백수에 시간부자라 소일거리로 가습기 리뷰를&amp;nbsp;블로그에 올릴 생각으로 사진을 찍어봤다. 그리고&amp;nbsp;저 작고 앙증맞은 것이 어떻게 동작 하는지에 대한 궁금증이 생겼다. 그래서 한 번 분해해 봤다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24514036560368EF2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24514036560368EF2B&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0005.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(밑 뚜껑을 따버린 모습.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;내부는 간단해 보인다.&amp;nbsp;아무래도 전원부를 24v 정전압 아답터로 사용하기 때문인 것 같다. 배선은 예상외로 깔끔한 모습을 보여준다. 중국 공장에서 생산 되었어도 독일 회사 브랜드를 달고 출시되어서 그런지 깔끔해 보인다. 좀 더 자세히 뜯어보면, 초음파 진동자를 구동시키기 위한&amp;nbsp;주파수를 발생 시키는&amp;nbsp;메인보드가 보이며&amp;nbsp;&amp;nbsp;여기여 연결된 24v 팬과 토글 스위치를 겸비한 분부량 조절기인&amp;nbsp;1.5k옴 가변 저항이 있다. &amp;nbsp;분무량 조절기의&amp;nbsp;노브를 잡고 돌리는 느낌이 중저가형&amp;nbsp;음향기기에 달려있는 조절 노브를 돌릴 때의 느낌과 비슷하다.&amp;nbsp;그리고 물 경고등과 전원등이 연결되어 있는데 Red-Green LED 로 되어있다. 마지막으로 수위 센서가 연결되어 있다. 수위 센서라고 해서 별거 없고 그냥 막대기에 물에 떠다니는 플라스틱을 끼운 형태인데, 물이 없으면&amp;nbsp;플라스틱이 막대기를 타고 아래쪽으로 내려와 스위치를 건듦으로써 on 이 되는 원리이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;이 가습기는 쓸만한 디자인에 비하여&amp;nbsp;가격이 저렴하지만,&amp;nbsp;철저하게 아날로그다. 덕분에 자면서 가습기를 틀고 아침에 일어나보면 방 안이 눅눅해져 있고 가끔 분무량 조절 노브를 가장 작게 줄여도 항상 최대치로 돌아가는 팬 소리 때문에 잠을 잘 때 거슬린다. 그래서 이 녀석의 구조도 대충 알겠다 한 번 개조해보기로 하는데...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 32px;&quot;&gt;2. 부품 쑤셔 넣기.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;*&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;제목 그대로 쑤셔 넣었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 우선 아래와 같이 이번 프로젝트에 사용될 부품을 준비하였다.
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/223E5F42566D730A17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F223E5F42566D730A17&quot; width=&quot;723&quot; height=&quot;316&quot; filename=&quot;IMG_0011.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;첫 번째로 아두이노가 필요하다. 사진상의 아두이노는 공개하지 않은 다른 프로젝트에서 사용된 것을 적출한 것으로 케이블이 제거되지 못한 상태다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;두 번째로 WIFI 모듈인 ESP8266 이 필요한데, 사실 위에서 언급한대로 아두이노로 ESP8266 을 제어한다는 것은 오늘 운전면허증 받은 사람이 페라리를 운전하는 것과 비슷해서 굉장히 비효율적이다. ESP8266 이 저렴하기도 하지만 성능까지도 좋고 Lua 나 아두이노 부트로더를 올릴 수 있어 최근 메이커들 사이에서 새로운 IOT 플랫폼으로 주목받고 있다. 하지만 초창기 버전인 ESP-1 은 GPIO 포트가 부족하기도 하고 아날로그 제어도 해야 하므로 그냥 아두이노로 제어하도록 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그리고 중요한 작업이 하나 있는데, 초기 상태의 ESP8266 은 깡통과 같다. 펌웨어가 올라가 있지만 꽤 구형 버전으로 올라가 있다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그러므로 반드시 펌웨어를 최신 버전으로 올려줘야 한다. 이 프로젝트에서는 AT 커맨드를 사용하기 위한 AT 펌웨어 v0.9.2.2 버전을 사용하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;펌웨어 설치 방법은 네이버 카페&amp;nbsp;&lt;a href=&quot;http://cafe.naver.com/arduinostory&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아두이노 스토리&lt;/span&gt;&lt;/a&gt;&amp;nbsp;에서 쉽게 찾아볼 수 있으며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;a href=&quot;http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_comm&amp;amp;wr_id=20&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;하드카피 월드&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;에서도 살펴볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그 밖에 ESP8266 만을 위한 해외 포럼도 있다!! (http://www.esp8266.com/)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; baud rate 는 9600으로 설정해야 한다. 디버깅을 위하여 RX,TX 핀을 희생하고 SoftwareSerial 을 사용하도록 하였으며 때문에 9600으로 설정한 것이다. 9600이면 초당 1.17 Kbyte 전송률을 갖고 있는데, 1메가 전송하려면 대략 14분하고 5초 걸린다. -_-ㅎㅎㅎ. 문제는 이것은 시리얼 통신의 속도지 WIFI 자체의 속도가 아니라는 것이다. 결국 통신 프로토콜을 잘못 짠다면 버퍼 오버플로우가 생길 것이다. 그 때문에 만약 큰 데이터를 주고받는다면 ESP8266 모듈의 ESP-12 버전을 사용하여 SPI 통신을 사용하도록 하는 것이 현명한 선택일지도 모르겠다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;세 번째로 BLE 모듈인 HM-10 을 사용하기로 하였으나, 귀찮아서 제거하였다. 사실 이 녀석을 이용하여 스마트폰으로 무선 AP 와 서버 등을 설정하려고 하였으나 너무 귀찮았다. 그래서 버튼을 달고 5초 이상 누르고 있으면 WIFI 모듈이 무선 AP 모드로 동작하고 여기에 접속하여 설정할 수 있도록 하였다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 10pt;&quot;&gt;그리고 온습도 센서인 DHT22 를 사용하는데, 이거 비추다. 생각보다 정확하지 않다. ㅠ_ㅠ 조만간 GY-21 로 바꿔서 테스트해볼 생각이다.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;AMS 1117 3.3v 는 esp8266 에 3.3v 를 공급하는 데 필요한데, 타입별로 input, output, gnd 핀 위치가 다르니 주의하도록 한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그 밖에 24v 750mA에서 안전하게 사용할 수 있는 NPN 트랜지스터와 (본인은 이전에 만든 프로젝트에서 적출한 TIP 120을 사용하였다.) DC to DC Step-down 모듈과 7805 이 필요하다. 24v를 바로 7805로 방열판 없이 연결할 경우 아마 터질지도 모른다. (진짜로 소리 나면서 깨진다) ESP8266 은 생각보다 에너지 소비량이 많다. 대략 알기로는 250mA 정도 된다고 들었다. 그렇기 때문에 전원부가 중요하다. 이 프로젝트에서는&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;a href=&quot;http://www.xn--e-pn9e73fo4c93z9wmk2j.com/product/detail.html?product_no=430&amp;amp;cate_no=33&amp;amp;display_group=1&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;이곳&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;에서 구매한 모듈을 사용하였는데, 가격도 2,000원 밖에 안 하고 크기도 소형이다. 이 DC to DC 컨버터에 달린 가변저항을 조절하여 6.5v 로 정확하게 맞춰주고 나서 7805를 연결하면 안정적으로 전원을 공급받을 수 있다. 7805 를 부착한 이유는 혹시 모를 사고로 24v가 아두이노에 입력되는 일이 없도록 하기 위해서다. 만약 5v 정전압 컨버터가 있다면 7805 없이 그것을 이용하는 것이 효율적인 측면에서 훨씬 좋을 것이다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;


&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 10pt;&quot;&gt;아래는 직접 그려본 회로 배선도이다. 최근에&amp;nbsp;시간이 많아서&amp;nbsp;이런 잉여로운 짓을 할 수 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ice3x2/Wifi_Humidifier/master/image/Schematic.jpg&quot; target=&quot;_blank&quot; style=&quot;box-sizing: border-box; color: rgb(64, 120, 192); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/ice3x2/Wifi_Humidifier/master/image/Schematic.jpg&quot; alt=&quot;&quot; style=&quot;box-sizing: border-box; border: 0px; max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;부품과 회로에 대한 더 자세한 설명은 배선도 아래에 있는 Github 에 공개하였으니 참고바란다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 자 이제 이 많은 부품을 어떻게 가습기 안에 쑤셔 넣어볼까...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;이 문제로 꽤 많이 고민했던 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 모든 부품을 케이블로 연결하여 가습기 안에 넣어보려고 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 678px; text-align: left; font-size: 9pt; line-height: 1.5;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27674A3D560378E526&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27674A3D560378E526&quot; width=&quot;678&quot; height=&quot;290&quot; filename=&quot;IMG_0013.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: left; font-size: 9pt; line-height: 1.5;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; 위와같이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;아두이노에 &amp;nbsp;ESP8266 을 케이블을 연결 하였다...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 621px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2617F549560379B531&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2617F549560379B531&quot; width=&quot;621&quot; height=&quot;439&quot; filename=&quot;IMG_0015.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;전원 모듈도 절연 효과를 위하여 방열 테이프로 감싸서 케이블로 연결하였다. 사진상에는 안 보이지만 7805 도 부착하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;하지만, 이렇게 케이블로 연결해서 쑤셔 넣어보려고 해도 잘 들어가지 않았다. 무엇보다 공기 흐름을 방해하지 말아야 하는데, 부품과 케이블이 늘어날수록 공기 통로는 좁아지게 되어 결국 분무량도 떨어진다. ㅠㅠ&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 633px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22462A3656037B7B33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22462A3656037B7B33&quot; width=&quot;633&quot; height=&quot;565&quot; filename=&quot;IMG_0019.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;버틸수 없다...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그래서 결국 가습기 외벽에 구멍을 뚫어서 컨트롤과 신호, 5v 전원 케이블을 뽑아내도록 하였다. 결국 내부에 남는 것은 TIP120 두 개와 5v 전원부이다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 그리고&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;, 전원 LED 와 수위 경고 LED의 각 + 부분에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;케이블을 연결한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 612px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2347153356037BA011&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2347153356037BA011&quot; width=&quot;612&quot; height=&quot;457&quot; filename=&quot;IMG_0017.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 617px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2163E53B56037BCC3D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2163E53B56037BCC3D&quot; width=&quot;617&quot; height=&quot;700&quot; filename=&quot;IMG_0018.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이렇게 구멍을 뚫어서 케이블을 빼준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2416BF415603787F16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2416BF415603787F16&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_0040.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;배선 완료. 조만간 3D 프린터로 케이스를 뽑아 씌운다음에 깔끔하게 부착할 계획이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 32px;&quot;&gt;3. Software&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 32px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ice3x2/Wifi_Humidifier/master/image/photo6.jpg&quot; target=&quot;_blank&quot; style=&quot;box-sizing: border-box; color: rgb(64, 120, 192); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif; font-size: 16px; line-height: 25.6px;&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/ice3x2/Wifi_Humidifier/master/image/photo6.jpg&quot; alt=&quot;&quot; style=&quot;box-sizing: border-box; border: 0px; max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 가습기를 제어하기 위한 서버 프레임워크로 Node.js 를 택했다. &amp;nbsp;자바 스크립트를 이용하였기 때문에&amp;nbsp;개발하기도 쉬웠고&amp;nbsp;라즈베리 파이 위에서도 그럭저럭 괜찮은 성능으로 잘 돌아간다. 또한 &amp;nbsp;npm 모듈로 제공되는&amp;nbsp;forever 를 이용하면&amp;nbsp;백그라운드에서 깔끔하게 돌아가기 때문에 가습기 제어용 서버 개발, 운영하는 데는 이보다 좋은 선택이 있을수가 없다. 그리고 웹 서버 프레임워크로 Express 를 사용하였다. 처음에는 TCP 프로토콜을 직접 제어하여 가습기와 커넥션을 유지하도록 하였는데, 개발 중간에 모두 HTTP 프로토콜로 변경시켜 버렸다. 원래 처음에는 모바일 앱을 만들고 서버에서 데이터를 중계하는 방식으로 개발할 계획이었다. 그런데, 생각해보니 이렇게 하면 PC에서 제어하지 못하고 귀찮게 스마트폰 꺼내서 앱 실행 시키고 로딩이 끝날 때 까지 기다렸다가 버튼 몇 개 누르고 다시 앱을 닫아야 한다니.... 이건 통신 거리가 무한대인 블루투스와 다름 없다고 판단하여 웹페이지로 제어 콘솔을 만들기로 하였다. 또, 통신 프로토콜도 HTTP 로 통합시켜 버렸다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;로그 수집을 위한 DB 는 SQL 쿼리문 날리기도 귀찮고 ORM 사용하기에는 이런 미니 프로젝트에서는 오버 테크놀러지고, 몽고DB 같은 사용하기 편하지만, 사용 용도에 비해서 무거운 DB 는 일단 배제하였다. 파일로 직접 저장하자니 그것도 귀찮았다. npm 사이트를 뒤져보니 simple-node-db 라는 나름 쓸만한 녀석을 발견하게 되었다. 성능이나 뭐 그런 것은 안 바라고 오르지 간단하고 개발하기 편리 하다는 이유로 선택하였는데, 뭔가 느린감은 없지않았다.&amp;nbsp;조금은 구리지만 그래도 데이터는 잘 들어가니 걱정 없다. DB 테이블을 분, 시간, 날짜, 월, 년 단위로 만들어서 평균치를 구하여 저장하려고 계획하였는데 이 것도 귀찮아져서 무조건 분 단위로 저장하도록 하였다. 아니, 귀찮다기 보다는 어차피 내가 쓰려고 대강 만드는 것이고 여러 사람들이 이용하는 서비스가 아니므로 구조가 복잡해질수록 개발 시간을 비롯한 여러 자원이 낭비되기 때문이다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 웹 프런트 프레임워크는 Angular.js 와 Angular Material을 사용하였다. 원래 모바일 개발을 주로 해와서 MVVM 패턴을 위한&amp;nbsp;Angular.js 의 복잡한&amp;nbsp;구조도 그럭저럭 이해할 수 있었지만,&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;웹 개발을 많이 하시는 분들은 항상 학습 곡선이 크다고 말씀하신다. 나한테는 가장 빨리&amp;nbsp;개발하기 쉬운&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;(그리고 대충해도 잘 나오는)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;웹 프레임워크가 Angular.js 기 때문에 이 것을 선택하였다. &amp;nbsp;(사실 &lt;a href=&quot;https://material.angularjs.org/latest/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;angular&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://material.angularjs.org/latest/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;material&lt;/span&gt;&lt;/a&gt;&lt;/b&gt; 에서 제공하는 다양한 UI 컴포넌트를 척척 붙여서 빠르게 개발하기 위하여 선탁한 것이다.)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 647px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/235EE04856038ABC1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F235EE04856038ABC1F&quot; width=&quot;647&quot; height=&quot;274&quot; filename=&quot;js-learning-curves.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: center;&quot;&gt;(이미지 출처 :&amp;nbsp;http://nathanleclaire.com/blog/2014/01/04/5-smooth-angularjs-application-tips/)&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 마지막으로 문제의 아두이노와 ESP8266. 진짜 개고생 했다. 무엇 때문에 고생을 했냐면, 첫 번째로 ESP8266 의 AT+COMMAND (명령어) 의 Response 값이 일관되지 못 하고 제대로 된 문서도 없다. 예를 들어 어떤 상황에서 에러가 발생하면 \r\nERROR 이라고 출력되는데 어떤 상황에서는 \nError 이라고 출력된다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 또, 소프트웨어 시리얼을 이용하기 때문에 많은 데이터를 주고받으면 버퍼 오버플로우가 발생하고 깨진 데이터들이 들어온다. UART 방식이 타이밍을 이용하여 데이터를 주고 받는 원시적인(?) 방식인 데 비하여 TCP 는 굉장히 세련되었기 때문에 엄청난 비효율이 아닐 수 없다. 그러므로 다음에도 이와 비슷한 프로젝트를 진행한다면 아두이노 연결 없이 ESP8266 을 기반으로 하여 프로젝트를 진행할 것이다. ㅠㅠ&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 진짜 심각한 문제는, Node.js + Express 서버와 ESP8266 을 이용하여 HTTP 프로토콜에서 Connection 값을 close로 하여 데이터를 주고받을 때 발생한다. 뭐, Keep-Alive 는 구현하기 빡쎄서 그냥 무조건 close로 하기로 했다.ㅎㅎ 어쨌든 이렇게 했을 때, Get 으로 요청하여 성공했을 때 연결이 바로 끊어져야 한다. 하지만 종종 연결이 끊어지지 않는 괴현상이 생긴다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이런 괴현상이 발생할 때,&amp;nbsp;서버와 연결을 시도하면&amp;nbsp;busy s... 라는 메시지가 출력되면서 그 뒤로는 어떤 명령어를 날려도 busy s... 메시지를 출력하는 고집 불통을 보여주는데,&amp;nbsp;해외 포럼의 어떤 분은 NPN 트랜지스터를 전원에 연결하여&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;busy s... 가 등장하면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;하드웨어적으로 리셋시켜 버리는 방법을 제시하고 있다. (헐...) 이게 서버 문제인지 ESP 모듈의 펌웨어 문제인지 아직 파악 못 하였다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이런 현상이 간혹 발생하긴 하지만 한 번 발생한다면 전원 케이블을 뽑았다 다시 껴야 한다. 이렇게 된다면 24시간 동작하며 온습도 자료를 수집하고, 일정 습도를 유지할 수 있도록 도와줘야 하는 가습기 에겐 치명적인 상황이다. 그냥 예전에 17달러 주고 구입한 CC3000 (아두이노 WIFI 쉴드) 을 사용할까 하다가, 불현듯이 좋은 아이디어가 떠올랐다. &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그 것은 Get으로 요청한 상황에서 response가 왔을 때, Unlink 메시지가 일정 시간 이상 안 온다면(timeout 상황) AT+RST 명령어를 날려서 모듈을 리셋시켜 버리고 재접속하는 것이다. &amp;nbsp;그럼 모듈이 리셋이 되면서&amp;nbsp;마지막으로 연결 되었던&amp;nbsp;공유기에 자동으로 접속 시도하게 된다. 단, timeout 이 발생하여 임의로&amp;nbsp;리셋을하고 공유기에 재접속하는 시간까지 다 합쳐서&amp;nbsp;약 4~5초 정도 손해를 보게 된다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;


&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px;&quot;&gt;&amp;nbsp; 이런 상황마다 중요한 것이 사용자에게 현재 동작 상태를 알려주는 것이다. 예를 들면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;서버 접속 에러, 공유기 접속 에러, 인증에러 등을 알려줘야 한다. 그래서&amp;nbsp;이런 동작 상태를&amp;nbsp;LED 깜빡임 간격으로 알릴 수 있도록 하였다. 그러기 위해서는 HTTP 통신을 비동기인 듯 동기 같은 비동기로 처리하도록 해야 했다. 이것이 가능하도록 (대충)만든 HTTP 라이브러는 2kbyte 메모리 공간 중에서 대략 483byte를 잡아먹게 되었다. ㅎㄷㄷ (앞으로 최적화를 통하여 줄어들 수 있다. 물론 늘어날 수도 있다. ㅎㅎ)&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 14pt; line-height: 20px;&quot;&gt;github : &lt;a href=&quot;https://github.com/ice3x2/Wifi_Humidifier&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/ice3x2/Wifi_Humidifier&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; &quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>Iot</category>
      <category>가습기</category>
      <category>보만</category>
      <category>보만 가습기</category>
      <category>스마트 가습기</category>
      <category>아두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/82</guid>
      <comments>https://yagnu.tistory.com/82#entry82comment</comments>
      <pubDate>Thu, 24 Sep 2015 13:55:57 +0900</pubDate>
    </item>
    <item>
      <title>Arduino IDE 1.6.x 버전을 이용하여 간단하게 Attiny85 부트로더 굽기.</title>
      <link>https://yagnu.tistory.com/81</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이전에 아두이노 IDE&amp;nbsp;1.0.x 버전 기준으로 Attiny85 부트로더 굽는 법과 삽질 경험에 대하여&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;포스팅(&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;a href=&quot;http://www.dev.re.kr/59&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 0, 0);&quot;&gt;http://www.dev.re.kr/59&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;했었는데, 아두이노 IDE 1.6.4 버전 이상과 그 안에 포함된 개개선된&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;ISP 코드 덕분에 이제는 부트로더 굽는 것이 더 쉬워졌다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; 콘덴서나 저항을 reset 버튼 사이에 연결하거나&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;수정된 ISP 를 따로 구해서 사용할 필요가 없어졌다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이번 시간에는 1.6.x 버전을 이용하여 간단하게 부트로더를 굽는 방법에 대하여 언급할까 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이 포스팅은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;Arduino UNO 기준으로 되어있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Attiny85 라이브러리 설치하기.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 먼저 환경설정 메뉴에 들어가면 아래와 같은 화면이 나오는데, Additional Boards Manager URLs 의 텍스트 박스에 다음과 같은 주소를 적는다. (그림에서 빨간 화살표가 가르키는 곳)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(255, 0, 0);&quot;&gt;https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 677px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/237CBF3E55C240D70D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F237CBF3E55C240D70D&quot; width=&quot;677&quot; height=&quot;452&quot; filename=&quot;스크린샷 2015-08-06 오전 1.33.07.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 20px;&quot;&gt;&amp;nbsp;(아두이노 IDE 1.6.4 로 버전업 하면서 굉장히 편하고 재미있는 기능을 넣은 것 같다.)&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;이렇게 입력하게 된다면&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; https://github.com/damellis/attiny/tree/ide-1.6.x-boards-manager 에 있는 파일을 다운로드 받아 보드 매니져에서 볼 수 있게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 두 번째 단계로 상단 메뉴에서 &amp;nbsp;'&lt;b&gt;도구' -&amp;gt; '보드' -&amp;gt; Boards Manager&lt;/b&gt; 를 선택한다. 그럼 아래 스샷과 같은 창이 하나 뜨는데, 검색창에 attiny 를 입력하거나 스크롤을 아래로 내리다보면 attiny 항목을 볼 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214EEA3F55C242282C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214EEA3F55C242282C&quot; width=&quot;723&quot; height=&quot;409&quot; filename=&quot;스크린샷 2015-08-06 오전 2.04.21.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; (설치하기&amp;nbsp;전에 David A. mellis 에게 감사하는 마음을...)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;항목을 선택하면 인스톨 버튼이 나온다. 인스톨 버튼을 누르기 전에 콤보박스에서 최신 버전으로 선택 되어 있는지&amp;nbsp;확인하자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 인스톨이 완료되면 상단 메뉴에서 &lt;b&gt;도구 -&amp;gt; 보드&lt;/b&gt; 항목을 살펴보면 가장 아래쪽에 Attiny 가 추가된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 581px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2405D54455C243D527&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2405D54455C243D527&quot; width=&quot;581&quot; height=&quot;612&quot; filename=&quot;스크린샷 2015-08-06 오전 2.11.20.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. 기존의&amp;nbsp;아두이노에 ISP 굽기.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;USB 로 동작하는 ISP 가 없는이상 기존의 아두이노에 ISP 를 올려서 Attiny 에 부트로더를 굽거나 프로그램을 올릴수밖에 없다. 그러기 위해서 ISP를 기존의 아두이노 위에 올려야한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 상단 메뉴에서&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 파일 -&amp;gt; 예제 -&amp;gt; ArduinoISP&lt;/span&gt;&lt;/b&gt;&amp;nbsp;를 선택한 다음 자신의 아두이노 위에 올려보자.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 물론 상단 메뉴의 도구 에서 선택해야 하는 보드와 포트는 기존에 갖고 있던 아두이노를 선택해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 아두이노와 Attiny85 간의 연결.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2309AC3D5433E1E632&quot; height=&quot;800&quot; width=&quot;720&quot; style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; font-size: 9pt; border: 0px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;font-weight: bold; font-size: 12pt;&quot;&gt;&amp;lt;기존 아두이노 IDE 1.0.x 를 이용하여 부트로더를 굽는 방법에 대하여 설명한 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&amp;nbsp;포스팅&lt;span style=&quot;font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 돋움; font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.dev.re.kr/59&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-family: 돋움; font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.dev.re.kr/59&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;에서 가져온 이미지이다. &lt;/b&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;수정하기 귀찮으므로 그대로 가져왔다.&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-weight: bold; color: rgb(255, 0, 0);&quot;&gt;이번에 설명하는 아두이노 IDE 1.6.x 이상에서는 아두이노의 9번핀과 Attiny85 의 pin&amp;nbsp;3 을 연결할 필요는 없다. pin 번호는 아래 그림 참고&lt;/span&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 458px; height: auto;&quot;&gt;&lt;span dir=&quot;https://t1.daumcdn.net/cfile/tistory/222423435433E24319&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/222423435433E24319&quot; height=&quot;164&quot; width=&quot;458&quot; style=&quot;border: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;(Pin0 은 D0 , Pin2 는 D1 이다.)&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이해를 돕기 위하여 좀 더 자세히 설명하면,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp; 다음 표와 같다. &amp;nbsp;(9번핀 연결할 필요 없음)&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: dotum; line-height: 19.2000007629395px; text-align: center; clear: none; float: none; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;352&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; align=&quot;center&quot; style=&quot;color: rgb(51, 51, 51); font-size: 12px; line-height: 19.2000007629395px; border: none; border-collapse: collapse; width: 352px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 12pt; background-color: transparent;&quot;&gt;ATtiny Reset&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;------&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(0, 130, 153); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(0, 130, 153); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;------&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;Arduino 10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;strike&gt;ATtiny Pin3&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;-----------------&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;strike&gt;Arduino 9&lt;/strike&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;ATtiny GND&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;text-align: left; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;-----------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;---&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;----&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino GND&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny VCC&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(255, 0, 0); background-color: transparent;&quot;&gt;-------------&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 5v&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 187, 0);&quot;&gt;----------------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(255, 187, 0); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 187, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 13&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 12&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin0&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center; padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&amp;nbsp;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(9, 0, 255); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;-------------------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;padding-top: 0px !important; padding-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 11&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. 부트로더 굽기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;상단 메뉴에서&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 도구 -&amp;gt; 보드 -&amp;gt; Attiny 선택.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 도구 -&amp;gt; 프로세서 -&amp;gt; Attiny85&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 도구 -&amp;gt; Clock -&amp;gt; 8 Mhz (internal)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 도구 -&amp;gt; 프로그래머 -&amp;gt; Arduino as ISP&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 를 선택한다. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 만약 Clock 을 1 Mhz (internal) 로 선택한다면 최소&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1.8v 이상의 저전압에서 사용할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 313px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/222B224F55C2468306&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F222B224F55C2468306&quot; width=&quot;313&quot; height=&quot;256&quot; filename=&quot;스크린샷 2015-08-06 오전 2.21.44.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; 그리고 가장 하단의 부트로더 굽기를 선택하면....&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/264D174955C247442F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F264D174955C247442F&quot; width=&quot;723&quot; height=&quot;365&quot; filename=&quot;스크린샷 2015-08-06 오전 2.25.07.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 부트로더가 생각보다 빠른 속도로 구워진다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;5. 테스트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 잘 되는지 테스트하기 위하여 LED 를 하나 연결해 보고 PWM 으로 깜빡이도록 해보았다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; Attiny85 의 PWM 제어 핀은 0 번과 1번이다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 455px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/235E283355C24CBA06&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F235E283355C24CBA06&quot; width=&quot;455&quot; height=&quot;329&quot; filename=&quot;스크린샷 2015-08-06 오전 2.47.07.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 전원을&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;5V 를 공급해준다. &amp;nbsp;그리고 테스트 코드를 입력한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Attiny85 Test:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define LED_PIN 0&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;bool&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gIncreaseMode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gLedValue&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;analogWrite(LED_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gLedValue);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gLedValue&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(gIncreaseMode)?-&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
  
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(gLedValue&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gIncreaseMode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(gLedValue&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gIncreaseMode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;   
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;              
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;              
  
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px;&quot;&gt;아래는 결과 영상.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Attiny85 에 프로그램을 올릴 때 마다 빵판에 케이블을 꼈다 뺐다 하기 귀찮아서 아래와 같이 프로그래머&amp;nbsp;보드를 대충 만들었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 22px;&quot;&gt;아래 영상의 LED 도 pin 0 번과 연결되어 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;iframe src=&quot;https://www.youtube.com/embed/KAmao1kn97o&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>1.6.4</category>
      <category>1.6.5</category>
      <category>arduino</category>
      <category>Attiny</category>
      <category>ATtiny85</category>
      <category>부트로더</category>
      <category>스케치</category>
      <category>아두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/81</guid>
      <comments>https://yagnu.tistory.com/81#entry81comment</comments>
      <pubDate>Thu, 6 Aug 2015 03:00:39 +0900</pubDate>
    </item>
    <item>
      <title>DHT22  를 활용한 온도, 습도계 만들기::인터넷으로 온도와 습도, 불쾌지수를 확인하기.</title>
      <link>https://yagnu.tistory.com/80</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. DHT22 와 라이브러리&amp;nbsp;구하기&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24478E3A55BE0B350A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24478E3A55BE0B350A&quot; width=&quot;723&quot; height=&quot;348&quot; filename=&quot;스크린샷 2015-08-02 오후 9.20.29.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 내가 자주 이용하는 알리 익스프레스에서 3달러 라는 저렴한 가격에 판매되고 있다. 국내 쇼핑몰에서도 많이 판매되고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; github 에 공개된 오픈소스 라이브러리를 다운 받아서 압축을 풀고 아두이노 프로젝트 폴더 내의 라이브러리 폴더에 붙여 넣는다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; DHT22 라이브러리 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;a href=&quot;https://github.com/nethoncho/Arduino-DHT22&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/nethoncho/Arduino-DHT22&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 예제코드 :&amp;nbsp;&lt;a href=&quot;https://github.com/nethoncho/Arduino-DHT22/blob/master/examples/Serial/Serial.ino&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/nethoncho/Arduino-DHT22/blob/master/examples/Serial/Serial.ino&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 예제코드를 보면 매우 간단한 사용법을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/260AA23655BE0C710C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F260AA23655BE0C710C&quot; width=&quot;723&quot; height=&quot;472&quot; filename=&quot;스크린샷 2015-08-01 오전 3.01.29.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt; &lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 예제코드 실행 결과. 2초에 한 번씩 온도와 습도를 불러온다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. DHT22 를 활용한 인터넷 온도/습도계 프로젝트.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2731E53A55BE0CC41D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2731E53A55BE0CC41D&quot; width=&quot;241&quot; height=&quot;334&quot; filename=&quot;스크린샷 2015-08-01 오전 6.15.07.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22319A3A55BE0CC51E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22319A3A55BE0CC51E&quot; width=&quot;241&quot; height=&quot;334&quot; filename=&quot;스크린샷 2015-08-01 오전 6.15.19.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/273E2F3A55BE0CC617&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F273E2F3A55BE0CC617&quot; width=&quot;241&quot; height=&quot;334&quot; filename=&quot;스크린샷 2015-08-01 오전 6.15.40.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/264E3B3A55BE0CC611&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F264E3B3A55BE0CC611&quot; width=&quot;241&quot; height=&quot;339&quot; filename=&quot;스크린샷 2015-08-01 오전 6.15.54.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2125E33A55BE0CC722&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2125E33A55BE0CC722&quot; width=&quot;241&quot; height=&quot;334&quot; filename=&quot;스크린샷 2015-08-01 오전 6.16.05.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 241px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2230643A55BE0CC71F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2230643A55BE0CC71F&quot; width=&quot;241&quot; height=&quot;334&quot; filename=&quot;스크린샷 2015-08-01 오전 6.16.16.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp;웹 브라우저상에서 비동기 방식(ajax)으로 2초에 한 번씩 온도 습도와 불쾌지수를 받아온다. 이를&amp;nbsp;실시간으로 확인할 수 있으며 불쾌지수에 따라서 위 스샷과 같이 배경 색이 바뀐다. &lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;참고로 위 스샷은 불쾌지수별로 배경색이 바뀌는 것을 테스트하기&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&amp;nbsp;위하여 임의의 값을 넣어본 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아래는 테스트 영상.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/besULfxX_60&quot; width=&quot;640&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 중간에 더러운(?)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;소리는 DHT22 온 습도 센서에 입김을 불어넣는 소리다. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 입김으로 인하여&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;올라간 습도와 온도 때문에 불쾌지수가 올라가게 되고 따라서 배경색도 바뀌게 된다.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 만약 데이터 읽기&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;실패한 경우 에러 화면을 보여주게 된다. (timeout 5초 내에 데이터를 가져오지 못 한경우.)&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 360px; font-size: 9pt; line-height: 1.5; width: 360px; height: 591px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2634164455BE2A520F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2634164455BE2A520F&quot; width=&quot;360&quot; height=&quot;591&quot; filename=&quot;스크린샷 2015-08-02 오후 11.31.15 복사본.png&quot; filemime=&quot;image/png&quot; style=&quot;font-size: 9pt; line-height: 1.5; width: 360px; height: 591px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;물론 이 상태에서 데이터를 정상적으로 읽게 된다면 원래의 모습으로 돌아온다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 온도와 습도, 그리고 불쾌지수를 받아올 데이터 타입 정의가 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(0, 128, 0);&quot;&gt;&quot;temp&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(186, 33, 33);&quot;&gt;&quot;31.2°C&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(0, 128, 0);&quot;&gt;&quot;hr&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(186, 33, 33);&quot;&gt;&quot;80.1%&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(0, 128, 0);&quot;&gt;&quot;di&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(102, 102, 102);&quot;&gt;84.85&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; 위 JSON 데이터에서 temp 는 온도, hr 은 습도를 의미하고 실수형 데이터를 갖고 있는 di 는 불쾌지수를 나타낸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; 두 번째로 html 코드를 작성한다. css 파일과 js 파일을 나누어 작성하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;HTML:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;TMP22&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;http-equiv=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'X-UA-Compatible'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'IE=Edge'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;charset=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'UTF-8'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;http-equiv=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'Pragma'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'no-cache'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;HTTP-EQUIV=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'Expires'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;CONTENT=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'-1'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;&amp;lt;!--모바일 브라우저 호환--&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;width=device-width, user-scalable=no&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;&amp;lt;!--모바일 크롬을 위한 테마 컬라--&amp;gt;&lt;/span&gt; 
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;theme-color&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;#333333&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;&amp;lt;!--iOS 사파리를 위한 상태바 컬러--&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;apple-mobile-web-app-status-bar-style&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;#333333&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;

    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;src=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'https://code.jquery.com/jquery-2.1.4.min.js'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'text/javascript'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;src=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'/js'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'text/javascript'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'http://fonts.googleapis.com/css?family=Righteous'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;rel=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'stylesheet'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'text/css'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'/css'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;rel=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'stylesheet'&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'text/css'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;container&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;outer&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;inner&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;block&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;h1&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;id=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'temp'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;??.? °C&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;h1&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;id=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'hr'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;??.? %&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;h2&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;id=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'di'&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;NaN&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; Jquery 라이브러리와 구글 폰트 사이트에서 가져온 Righteous 폰트를&amp;nbsp;사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Javascript:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;diMap&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;86&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#F44336'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#C62828'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;83&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#FF5722'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#BF360C'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#FF9800'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#E65100'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;75&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#FFAB00'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#FF6F00'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#009688'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#004D40'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;backColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#03A9F4'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;blockColor:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#01579B'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}];&lt;/span&gt;

    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * 불쾌지수별로 색을 바꾼다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * @param di 불쾌지수 값.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setColorByDI(di)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(i&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;diMap)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(diMap[i].min&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;di)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'body'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).css(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'background-color'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,diMap[i].backColor);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'.block'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).css(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'background-color'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,diMap[i].blockColor);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setColorOnError()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'body'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).css(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'background-color'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#ffffff'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'.block'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).css(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'background-color'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#000000'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     * 2초에 한 번씩 서버로부터 온도, 습도, 불쾌지수 데이터를 받아온다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;     */&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;loadData(){&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$.ajax({&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'/data'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dataType:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'json'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;timeout:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;success:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(data)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#temp'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).text(data.temp);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#hr'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).text(data.hr);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#di'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).text(data.di);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setColorByDI(data.di);&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;},&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;error:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(xhr,status,error)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'#di'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).text(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'ERROR'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setColorOnError();&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;});&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setTimeout(loadData,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;loadData();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setTimeout(loadData,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;Javascript 코드는 편한 Ajax 를 이용하기 위하여 Jquery 라이브리를 활용한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;CSS:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;body&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;font-family&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'Righteous'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;cursive&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;body&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;overflow&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;hidden&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;h1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;font-size&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5em&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;text-align&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;h2&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;font-size&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3em&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;text-align&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.container&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.container&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.outer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;table;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.outer&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.inner&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;table-cell&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;vertical-align&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;middle&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;text-align&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.inner&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;.block&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;position&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;relative&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;block&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;white&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;padding&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1em&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;black&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 폰트를 이쁜 폰트로 설정하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 아두이노 코드를 작성하기 전에 먼저 이더넷 모듈과 라이브러리를 준비해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; 이 예제에서는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: dotum; font-size: 13.3333330154419px; line-height: 20px; color: rgb(255, 0, 0);&quot;&gt;ENC28J60 이더넷 모듈을 이용하였고, 이 것에 대한 활용 방법을 다룬&amp;nbsp;포스팅은&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://www.dev.re.kr/79&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;http://www.dev.re.kr/79&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; 에서 확인할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;그리고 이 예제를 수행하기 위하여&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: dotum; font-size: 13.3333330154419px; line-height: 20px; color: rgb(255, 0, 0);&quot;&gt;ENC28J60 모듈 라이브러리의 EtherCard.cpp 파일을&amp;nbsp;수정해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: dotum; font-size: 13.3333330154419px; line-height: 20px; color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;버퍼에 문자열을&amp;nbsp;기록하는&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: dotum; font-size: 13.3333330154419px; line-height: 20px; color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;emit_p 함수가 지정된 크기의 소수점 자리수 출력을&amp;nbsp;지원하지 않기 때문이다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span style=&quot;font-size: 10pt;&quot;&gt;기존의 Ethercard 라이브러리를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;수정된 라이브러리&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; : &lt;/span&gt;&lt;a href=&quot;https://github.com/ice3x2/ethercard/blob/master/EtherCard.cpp&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;https://github.com/ice3x2/ethercard&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;로 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;교체&lt;/span&gt;하거나,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;또는&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;EtherCard.cpp 파일을 열어서&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; background-color: rgb(234, 255, 234);&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; background-color: rgb(234, 255, 234);&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; background-color: rgb(234, 255, 234);&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; background-color: rgb(234, 255, 234);&quot;&gt;FLOATEMIT &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 이 부분에 되어있는 주석을 지우고,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;BufferFiller::emit_p&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;(PGM_P fmt, ...)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;  함수 내부의 &lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;case&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-s&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(24, 54, 145); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;'&lt;/span&gt;T&lt;span class=&quot;pl-pds&quot; style=&quot;box-sizing: border-box;&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;:  &lt;span style=&quot;font-size: 10pt;&quot;&gt;에서&lt;/span&gt; &lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 9pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;; &lt;span style=&quot;font-size: 10pt;&quot;&gt;까지의 부분을 찾아서 삭제한 아래의 코드로 교체한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'T'&lt;/span&gt;:
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;defaultPa&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pgm_read_byte(fmt);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'.'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pgm_read_byte(++fmt);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'0'&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'9'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fmt++;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;defaultPa&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;c&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'0'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;defaultPa&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dtostrf(va_arg(ap,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;),&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;defaultPa,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)ptr&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이렇게 한다면 이제 DHT22 으로 부터 출력되는 데이터를 소수점 첫 번째 자리수까지 끊어서&amp;nbsp;출력할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이제 아두이노 코드를 작성해야 하는데, 그 전에 HTML 과 CSS 와 Javascript 를 압축 해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;HTML 과&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;CSS 는&amp;nbsp;http://www.willpeavy.com/minifier/ 이 곳에서 사이즈를 줄일 수 있고,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; Javascript 는&amp;nbsp;http://jscompress.com/ 이 곳에서 사이즈를 줄일 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;아두이노 코드:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;EtherCard.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;DHT22.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;string&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define DHT22_PIN 2&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define CS_PIN 8&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define READ_DHT_DELAY 2000&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define HOST_NAME &quot;TMP22&quot;&lt;/span&gt;

&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define BUFFER_SIZE 1280&lt;/span&gt;


&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;calcDiscomfortIndex&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;temp,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;humi);&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;readDHT&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;valueStr[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;uint8_t&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;macAddr[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x54&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x55&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x58&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x56&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt; 

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer[BUFFER_SIZE];&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BufferFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller;&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;DHT22&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;dht22&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(DHT22_PIN);&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;temperature&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.00f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 온도 &lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;humidity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.00f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 습도&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;di&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.00f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 불쾌지수&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lastReadDHT&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 마지막으로 DHT22 로부터 값을 읽은 시간 (ms)&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// CSS 코드를 버퍼에 기록한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeCss&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 200 OK\r\nContent-Type: text/css\r\nPragma: no-cache\r\n\r\n&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;html, body{font-family: 'Righteous', cursive;margin: 0; width: 100%; height: 100%; overflow: hidden}h1{font-size: 5em;margin: 0;text-align: center}h2{font-size: 3em;margin: 0;text-align: center}.container{width: 100%; height: 100%;}div.container .outer{display: table; width: 100%; height: 100%;}div.outer .inner{display: table-cell; vertical-align: middle; text-align: center;}div.inner .block{position: relative; display: inline-block; color: white; padding: 1em; background: black;}&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeFail&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 401 Unauthorized\r\nContent-Type: text/html\r\n\r\n&amp;lt;h1&amp;gt;401 Unauthorized&amp;lt;/h1&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 자바스크립트 코드를 버퍼에 기록한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeJS&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 200 OK\r\nContent-Type: application/javascript\r\nPragma: no-cache\r\n\r\n&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;var diMap=[{min:86,backColor:'#F44336',blockColor:'#C62828',},{min:83,backColor:'#FF5722',blockColor:'#BF360C',},{min:80,backColor:'#FF9800',blockColor:'#E65100',},{min:75,backColor:'#FFAB00',blockColor:'#FF6F00',},{min:70,backColor:'#009688',blockColor:'#004D40',},{min:0,backColor:'#03A9F4',blockColor:'#01579B',}];function setColorByDI(di){for(i in diMap){if(diMap[i].min&amp;lt;=di){$$('body').css('background-color',diMap[i].backColor);$$('.block').css('background-color',diMap[i].blockColor);return}}}function setColorOnError(){$$('body').css('background-color','#ffffff');$$('.block').css('background-color','#000000')}function loadData(){$$.ajax({url:'/data',dataType:'json',timeout:5000,success:function(data){$$('#temp').text(data.temp);$$('#hr').text(data.hr);$$('#di').text(data.di);setColorByDI(data.di)},error:function(xhr,status,error){$$('#di').text('ERROR');setColorOnError()}});setTimeout(loadData,2000)}loadData();setTimeout(loadData,2000);&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// html 코드를 버퍼에 기록한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;uint16_t&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeHtml&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;&amp;lt;!doctype html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta name='theme-color' content='#333333'&amp;gt;&amp;lt;meta name='apple-mobile-web-app-status-bar-style' content='#333333'&amp;gt;&amp;lt;meta name='viewport' content='width=device-width, user-scalable=no'&amp;gt;&amp;lt;meta http-equiv='X-UA-Compatible' content='IE=Edge'/&amp;gt; &amp;lt;meta charset='UTF-8'&amp;gt; &amp;lt;meta http-equiv='Pragma' content='no-cache'&amp;gt; &amp;lt;meta HTTP-EQUIV='Expires' CONTENT='-1'&amp;gt; &amp;lt;script src='https://code.jquery.com/jquery-2.1.4.min.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;link href='http://fonts.googleapis.com/css?family=Righteous' rel='stylesheet' type='text/css'&amp;gt; &amp;lt;link href='/css' rel='stylesheet' type='text/css'&amp;gt; &amp;lt;script src='/js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;div class='container'&amp;gt; &amp;lt;div class='outer'&amp;gt; &amp;lt;div class='inner'&amp;gt; &amp;lt;div class='block'&amp;gt; &amp;lt;h1 id='temp'&amp;gt;??.? °C&amp;lt;/h1&amp;gt; &amp;lt;h1 id='hr'&amp;gt;??.? %&amp;lt;/h1&amp;gt; &amp;lt;h2 id='di'&amp;gt;NaN&amp;lt;/h2&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;  
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 온습도, 불쾌지수 값을 JSON 형태로 버퍼에 기록한다. &lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeJson&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 200 OK\r\nContent-Type: application/json\r\nPragma: no-cache\r\n\r\n&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;{\&quot;temp\&quot;:\&quot;$T.1°C\&quot;,\&quot;hr\&quot;:\&quot;$T.1%\&quot;,\&quot;di\&quot;:$T.1}&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;),temperature,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;humidity,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;di);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bufFiller.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(){&lt;/span&gt;
  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이더넷 초기화 &lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;sizeof&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;macAddr,CS_PIN);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// DHCP 초기화.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!ether.dhcpSetup(HOST_NAME,&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
 
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(){&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pos&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.packetLoop(ether.packetReceive());&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readDHT();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(pos)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReplyAck();&lt;/span&gt; 
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pos;&lt;/span&gt;
      &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Data 요청,  &lt;/span&gt;
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET /data &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeJson(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// CSS 요청&lt;/span&gt;
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET /css &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeCss(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Javsscript 요청&lt;/span&gt;
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET /js &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeJS(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET / &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
         &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; 
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeFail(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;  

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// DHT22 로부터 값을 읽어온다. &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 값은 2초 간격으로 읽어온다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;readDHT&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(millis()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lastReadDHT&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;READ_DHT_DELAY)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lastReadDHT&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;millis();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;DHT22_ERROR_t&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;errorCode;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;errorCode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dht22.readData();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(errorCode)&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;DHT_ERROR_NONE&lt;/span&gt;:
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;DHT_ERROR_CHECKSUM&lt;/span&gt;:
              &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;temperature&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dht22.getTemperatureC();&lt;/span&gt;
              &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;humidity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;dht22.getHumidity();&lt;/span&gt;
              &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;di&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;calcDiscomfortIndex(temperature,humidity);&lt;/span&gt;
              &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 온도와 습도를 입력받아 불쾌지수를 계산하여 반환한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 불쾌지수에 대한 계산법은 http://www.kma.go.kr/HELP/basic/help_01_05.jsp 이 곳에서 확인하였다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;calcDiscomfortIndex&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;temp,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;float&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;humi)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1.8f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*temp)-(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.55&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-humi/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100.0f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)*(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1.8f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*temp-&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;26&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;))+&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>DHT22</category>
      <category>ENC28J60</category>
      <category>Iot</category>
      <category>사물인터넷</category>
      <category>아두이노</category>
      <category>아두이노 인터넷</category>
      <category>이더넷</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/80</guid>
      <comments>https://yagnu.tistory.com/80#entry80comment</comments>
      <pubDate>Sun, 2 Aug 2015 23:35:35 +0900</pubDate>
    </item>
    <item>
      <title>ENC28J60 이더넷 모듈을 이용하여 아두이노를 웹 서버로 활용하기::인터넷 건반 만들어 소리 재생하기</title>
      <link>https://yagnu.tistory.com/79</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 이번 포스팅에서는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;ENC28J60 를 이용하여 아두이노를 웹서버로 만들어 보겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;아두이노 모델중에&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;가장 많이 사용되는 UNO 에 탑재된&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ATmega328의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;2kbyte 라는 개미 코딱지 같은 메모리를 활용하여&amp;nbsp;그럴싸한 html 문서를 보여주는 웹 서버를 만드는 것은 쉽지&amp;nbsp;않은 일이다. 응용 소프트웨어&amp;nbsp;서버로 사용하기에는&amp;nbsp;조악한 성능을 갖고 있다. 그 때문에,&amp;nbsp; 아두이노를&amp;nbsp;웹 서버로&amp;nbsp;사용하게 된다면 센서를 통하여 데이터를 수집하고 REST로 값을 전달해 주는 기능이나&amp;nbsp;물리적 장치&amp;nbsp;제어를 위한 컨트롤러&amp;nbsp;이상으로 확장하기는 어려울 것이다&amp;nbsp;. 하지만 이번 포스팅에서는 아두이노를 웹서버로 만들어&amp;nbsp;재미있는 것들을 만들어보고자 한다. &amp;nbsp;(조만간 안 귀찮을 때&amp;nbsp;WIFI 사용도 같이 다뤄보고자 한다. )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. 이더넷 모듈&amp;nbsp;구하기.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 아두이노 UNO R3 기준으로 설명하겠다. 첫 번째로 점프 케이블을 구하고 두 번째로 가장 중요한&amp;nbsp;ENC28J60이 탑재된 이더넷 모듈을&amp;nbsp;구해야 한다. 사실 아두이노 공식 이더넷 쉴드는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 10pt; line-height: 20.7999992370605px;&quot;&gt;W5100 라는 칩을 사용하지만&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;ENC28J60 &lt;/span&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20.7999992370605px;&quot;&gt;에 비하여 가격이 비싸다. 당장 국내 온라인 쇼핑몰만 찾아봐도&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;ENC28J60 이더넷 모듈은&amp;nbsp;1만 3천원 안쪽으로 구입할 수 있지만&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 10pt; line-height: 20.7999992370605px;&quot;&gt;W5100 이더넷 모듈은 이 것보다 배 이상 비싸다. 성능 차이는 있을지 모르겠지만, 초 극 저사양 마이크로 컨트롤러 에서는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;ENC28J60만 되어도 충분하지 않을까...;;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/227E354C55BCEB2A16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F227E354C55BCEB2A16&quot; width=&quot;723&quot; height=&quot;369&quot; filename=&quot;스크린샷 2015-08-02 오전 12.51.35.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; 알리익스프레스에서 enc28j60 으로 검색하면 정말로 저 가격에 살 수 있다. 참고로 본인은 할인 행사 덕분에 2달러에 구입했다. ㅡ , ㅡd &amp;nbsp;대신 도착하는데 &amp;nbsp;보름 이상 걸린다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;국내 유명 전자 부품 쇼핑몰 엘xx츠 에서도 1만 3천원 안쪽으로 구입할 수 있으며 재고도 있는듯.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. 연결하기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC_%EC%A3%BC%EB%B3%80%EA%B8%B0%EA%B8%B0_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_%EB%B2%84%EC%8A%A4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;SPI&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC_%EC%A3%BC%EB%B3%80%EA%B8%B0%EA%B8%B0_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_%EB%B2%84%EC%8A%A4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 통신&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;을 사용하기 때문에 점퍼 케이블을 이용하여 다음과 같이 연결해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;251&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; font-family: 돋움; font-size: 12px; width: 251px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border: 1px solid rgb(204, 204, 204); background-color: rgb(217, 229, 255);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;이더넷 모듈 핀&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204); background-color: rgb(217, 229, 255);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;아두이노 핀&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;전원&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;5v or 3.3v (모듈에 따라서)&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;GND&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;GND&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;SCK&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;13&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;SO&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;12&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;SI&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;11&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 116px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); background-color: rgb(178, 235, 244);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;CS&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 134px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); background-color: rgb(183, 240, 177);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;8&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;(CS 핀은 아무곳에나 연결해도 상관 없다. 코드상으로&amp;nbsp;이더넷을 초기화 하는 과정에서&amp;nbsp;CS 핀을&amp;nbsp;변경할 수 있기 때문이다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 라이브러리 구하기,&amp;nbsp;예제 돌려보기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; 이 곳 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;https://github.com/jcw/ethercard)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;에 접속하여 &amp;nbsp;라이브러리를 다운로드 받고 압축을 풀어 아두이노 프로젝트 폴더 내의 라이브러리 폴더에 폴더채로 이동시킨다. 폴더명은 적절하게 수정하자. 또는 아두이노 IDE 의 스케치 -&amp;gt; 라이브러리 가져오기 메뉴를 활용하는 방법도 있다.&lt;span style=&quot;color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(153, 0, 76); background-color: rgb(255, 255, 255);&quot;&gt; &amp;nbsp;&lt;u&gt;(시간이 흘러 이 포스팅에서 언급하는 이더넷 라이브러리 버전과 최신 버전의 API 가 일치하지 않을 수 있으므로 포스팅 작성 시점에서&amp;nbsp;&lt;/u&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: rgb(153, 0, 76); background-color: rgb(255, 255, 255);&quot;&gt;fork 하였다. fork된&amp;nbsp;git 프로젝트의&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 0, 76); background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;링크&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(153, 0, 76); background-color: rgb(255, 255, 255);&quot;&gt;&lt;u&gt;&lt;a href=&quot;https://github.com/ice3x2/ethercard&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/ice3x2/ethercard&lt;/a&gt;)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;아두이노 IDE 를 실행하면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;ethercard 라이브러리가 추가된 것을 확인할 수 있다. 이 라이브러리에 포함된 예제를 살펴보면 재미있고 유용한 예제들이 많다. 그 중에&amp;nbsp;rbbb_server 라는 예제를 살펴보겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 161px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2568D85055BCF12420&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2568D85055BCF12420&quot; width=&quot;161&quot; height=&quot;404&quot; filename=&quot;스크린샷 2015-08-02 오전 1.14.11.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;rbbb_server 를 선택하면 아주 짧고 간단한 코드가 등장하는데, 사용하기 편하도록 몇 가지만 수정해보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;setup() 함수를 살펴보면 아래와 같이 구현이 되어있다.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;void &lt;/span&gt;setup () {&lt;br /&gt;  &lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;if &lt;/span&gt;(ether.begin(sizeof Ethernet::buffer&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;mymac) == &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;       Serial.println(F(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;Failed to access Ethernet controller&quot;&lt;/span&gt;))&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;       &lt;/span&gt;ether.staticSetup(myip)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;간단히 설명하자면, 이더넷을 버퍼와 mac 어드레스를 이용하여 초기화하고, 고정된 아이피 주소를 할당하도록 하는 코드이다&lt;/span&gt;&lt;font id=&quot;ul_0&quot; class=&quot;ul&quot; style=&quot;font-size: 9pt; line-height: 1.5; cursor: pointer; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;. 하지만 이&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;코드는 불편하다. 이유는, 공유기의 설정에 들어가서 mac 주소 찾아서 할당해줘야 하기 때문이다. 요즘은 대부분 누구나 이더넷 케이블 연결하기만 하면 동적으로 주소 할당해주는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 굴림; font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;DHCP&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;기능이 지원되는 공유기를 갖고 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;그러므로 DHCP&amp;nbsp;기능을 사용하여&amp;nbsp;&lt;/span&gt;&lt;font id=&quot;ul_3&quot; color=&quot;red&quot; class=&quot;ul&quot; style=&quot;font-size: 9pt; line-height: 1.5; cursor: pointer; font-family: 굴림;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;ip&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; font-family: 굴림; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;주소를 자동으로 받아 오도록 하는 것이 편할 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;DHCP를 이용하기 위하여&amp;nbsp;아래와 같이 수정해준다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;p&gt;#define CS_PIN &lt;span style=&quot;color:#6897bb;&quot;&gt;8&lt;br /&gt;&lt;/span&gt;#define HOST_NAME &lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;arduino&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;// ... 중략&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;void &lt;/span&gt;setup () {&lt;br /&gt;    Serial.begin(&lt;span style=&quot;color:#6897bb;&quot;&gt;57600&lt;/span&gt;)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;if &lt;/span&gt;(ether.begin(sizeof Ethernet::buffer&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;mymac&lt;span style=&quot;color:#cc7832;&quot;&gt;,&lt;/span&gt;CS_PIN) == &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;    Serial.println(F(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;Failed to access Ethernet controller&quot;&lt;/span&gt;))&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;while&lt;/span&gt;(!ether.dhcpSetup(HOST_NAME&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;true&lt;/span&gt;))&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;Serial.println(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;Connected&quot;&lt;/span&gt;)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;ether.printIp(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;IP: &quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;ether.myip)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;ether.printIp(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;Netmask: &quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;ether.netmask)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;ether.printIp(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;Gateway IP: &quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;ether.gwip)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;    &lt;/span&gt;ether.printIp(&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;DNS IP: &quot;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;, &lt;/span&gt;ether.dnsip)&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;}&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 변경된 코드에서는&amp;nbsp;CS_PIN 번호를 추가하였다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ethercard &amp;nbsp;라이브러리 내에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;CS PIN 은 기본으로 8번으로 되어있지만, ether.begin 함수의 마지막 인자값으로 임의의 CS pin 번호를 넣어줄 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 두 번째로 정적으로 ip 를 할당하는 staticSetup 함수를&amp;nbsp;지우고 dhcp 를 통하여 ip 를 할당받을 수 있는 dhcpSetup 함수를 넣었는데, 제대로 설정될 때 까지 무한 반복되도록 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이제 코드를 아두이노에 업데이트 하고 인터넷 케이블을 연결한 다음에&amp;nbsp;도구-&amp;gt;시리얼 모니터를 열어서 baud rate 를 57600 으로 설정하면 다음과 같은 메세지를 확인할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 274px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2216424455BCFAF62D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2216424455BCFAF62D&quot; width=&quot;274&quot; height=&quot;215&quot; filename=&quot;스크린샷 2015-08-02 오전 1.55.26.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;ip 주소가 192.168.0.49 로 자동 할당되었다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24018A3E55BCFC8303&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24018A3E55BCFC8303&quot; width=&quot;723&quot; height=&quot;428&quot; filename=&quot;스크린샷 2015-08-02 오전 2.03.57.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;공유기 설정 화면에서도 지정한 host name 으로 하여 ip 주소가 자동을 할당된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 509px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2170CF3D55BCFD3403&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2170CF3D55BCFD3403&quot; width=&quot;509&quot; height=&quot;373&quot; filename=&quot;스크린샷 2015-08-02 오전 2.07.37.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 주소로 접속하면 위 스샷 이미지와 같이 아두이노의 구동 시간을 보여주며 연속으로 refresh 하는 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 인터넷 웹&amp;nbsp;브라우저로 연주하는 건반&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;이 예제를 이용하여 좀 더 재미있는 것을 만들어 보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;원래는 브라우저로 LED 밝기를 조절하는 것을 만들어 보려고 했지만, 너무 식상해서간단한 건반으로 바꾸었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;아래는 동작&amp;nbsp;영상이다. &lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;(동영상의 볼륨을 올려주세요.)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/rqrChst6dbw&quot; width=&quot;640&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;첫 번째로 준비물을 챙긴다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;우선&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ENC28J60 모듈과 스피커를 준비한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;스피커는 아무 것이나 상관 없는데, 극성만 잘 구분해서 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;+ 단자를&amp;nbsp;아두이노의 핀 6번에 연결&lt;/span&gt;하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;두 번째로&amp;nbsp;아래와 같은 화면이 나오게끔 html 을 코딩한다&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/246F6B4855BD30F735&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F246F6B4855BD30F735&quot; width=&quot;723&quot; height=&quot;477&quot; filename=&quot;스크린샷 2015-08-02 오전 5.49.35.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt; &lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;위 스샷에 나오는 색이 들어있는 상자 하나는 각 음계를 재생하는 버튼이다. 예를들어 빨간색은 C4 주황색은 D4, 노란색은 E4 ... 보라색은 B4 를 나타낸다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 각각의 상자를&amp;nbsp;눌러서 각 음계로 해당하는 링크로 이동할 수 있도록 만들어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;!DOCTYPE &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;html &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;lang=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;'en'&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;meta &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;charset=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;'UTF-8'&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;meta &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;'viewport' &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;'width=device-width, user-scalable=no'&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;style &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;text/css&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;div &lt;/span&gt;{ &lt;span style=&quot;color:#9876aa;&quot;&gt;width&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;14.28&lt;/span&gt;%&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;height&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;100&lt;/span&gt;%&lt;span style=&quot;color:#cc7832;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;display&lt;/span&gt;: inline-block&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;}&lt;br /&gt;        &lt;span style=&quot;color:#cc7832;&quot;&gt;body &lt;/span&gt;{&lt;span style=&quot;color:#9876aa;&quot;&gt;width&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;100&lt;/span&gt;%&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;height&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;100&lt;/span&gt;%&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;margin&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;position&lt;/span&gt;: absolute&lt;span style=&quot;color:#cc7832;&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;overflow&lt;/span&gt;: hidden&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;font-size&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;px&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;letter-spacing&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;px&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;word-spacing&lt;/span&gt;: &lt;span style=&quot;color:#6897bb;&quot;&gt;0&lt;/span&gt;px&lt;span style=&quot;color:#cc7832;&quot;&gt;;&lt;/span&gt;}&lt;br /&gt;    &lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/0&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: red&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/1&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: orange&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/2&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: yellow&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/3&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: green&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/4&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: blue&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/5&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: midnightblue&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;a &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;/6&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;div &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9876aa;&quot;&gt;background&lt;/span&gt;: darkviolet&lt;span style=&quot;color:#a5c261;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 각 음계에 해당하는 상자에는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;/0 부터 /6 까지 링크가 걸려있으며 이 버튼을 누를 경우 해당 페이지로 이동하게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;이제 이 html 코드를 아두이노로 옮겨야 한다. 그냥 옮기면 사이즈도 크고 복잡하므로&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://kangax.github.io/html-minifier/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;https://kangax.github.io/html-minifier/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 를 이용하여 코드를 한 줄로 만들어 버린다. 아마 다음과 같이 나올 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(188, 122, 0);&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;lang=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;en&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;charset=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;UTF-8&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;meta&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;viewport&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;content=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;'width=device-width,user-scalable=no'&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;style &lt;/span&gt;&lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;type=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;text/css&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;div&lt;/span&gt;{&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:14.28%&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:100%&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;block&lt;/span&gt;}&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;body&lt;/span&gt;{&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:100%&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:100%&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;margin&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:0&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;position&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;absolute&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;overflow&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;hidden&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;font-size&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:0&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;letter-spacing&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:0&lt;/span&gt;;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;word-spacing&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;:0&lt;/span&gt;}&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/style&amp;gt;&amp;lt;body&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/0&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:red&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/1&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:orange&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/2&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:#ff0&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/3&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:green&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/4&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:#00f&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/5&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:#191970&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;href=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;/6&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;style=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;background:#9400d3&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;주의해야 할 사항은 큰 따옴표를 작은 따음표로 바꿔줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이제 아두이노에 들어갈 코드를 살펴보자.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;EtherCard.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define CS_PIN 8&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define SPEAKER_PIN 6&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define HOST_NAME &quot;keyboard&quot;&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 각 음계에 해당하는 값. CDEFGAB -&amp;gt; 도레미파솔라시&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이 값은 아두이노 IDE의 파일-&amp;gt;예제-&amp;gt;Digital-&amp;gt;toneKeyboard 에서 확인 가능.&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_C4  262&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_D4  294&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_E4  330&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_F4  349&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_G4  392&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_A4  440&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NOTE_B4  494&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;note[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{NOTE_C4,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NOTE_D4,NOTE_E4,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NOTE_F4,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NOTE_G4,NOTE_A4,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NOTE_B4};&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// MAC 어드레스&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mymac[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x74&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x69&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x69&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2D&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x30&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x31&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;860&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BufferFiller&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;57600&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(ether.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;sizeof&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mymac,CS_PIN)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(F(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Failed to access Ethernet controller&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// HDCP 가 설정될 때 까지 대기한다.&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!ether.dhcpSetup(HOST_NAME,&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Connected&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.printIp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;IP: &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.myip);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.printIp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Netmask: &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.netmask);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.printIp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Gateway IP: &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.gwip);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.printIp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;DNS IP: &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.dnsip);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// HTML 을 버퍼에 기록한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeHtml&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//  https://kangax.github.io/html-minifier/ 를 통하여 압축한 html 코드&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html lang=en&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta charset=UTF-8&amp;gt;&amp;lt;meta name=viewport content='width=device-width,user-scalable=no'&amp;gt;&amp;lt;style type=text/css&amp;gt;div{width:14.28%;height:100%;display:inline-block}body{width:100%;height:100%;margin:0;position:absolute;overflow:hidden;font-size:0;letter-spacing:0;word-spacing:0}&amp;lt;/style&amp;gt;&amp;lt;body&amp;gt;&amp;lt;a href=/0&amp;gt;&amp;lt;div style=background:red&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/1&amp;gt;&amp;lt;div style=background:orange&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/2&amp;gt;&amp;lt;div style=background:#ff0&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/3&amp;gt;&amp;lt;div style=background:green&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/4&amp;gt;&amp;lt;div style=background:#00f&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/5&amp;gt;&amp;lt;div style=background:#191970&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=/6&amp;gt;&amp;lt;div style=background:#9400d3&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;writeFail&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.tcpOffset();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill.emit_p(PSTR(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HTTP/1.0 401 Unauthorized\r\nContent-Type: text/html\r\n\r\n&amp;lt;h1&amp;gt;401 Unauthorized&amp;lt;/h1&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bfill.position();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 패킷이 들어올 때 까지 루프.&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;word&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pos&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.packetLoop(ether.packetReceive());&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(pos)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReplyAck();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 데이터를 가져온다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Ethernet::buffer&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pos;&lt;/span&gt;

        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET /&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(i);&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(str.c_str());&lt;/span&gt;
            &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이 부분에 대하여 밑에서 설명하겠다.&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(str.c_str(),&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str.length())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
                &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 재생중인 소리 종료&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;noTone(SPEAKER_PIN);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 500ms 동안 소리를 재생한다.&lt;/span&gt;
                &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 비동기식으로 동작한다.&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;tone(SPEAKER_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;note[i],&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이 부분에 대하여 밑에서 설명하겠다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET / &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 정의된 path 값으로 접속하지 않았을 경우 에러 메세지 전송.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeFail(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;위 코드에서 중요한 부분이 있는데, 바로 &amp;nbsp;path 값을 분류하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;웹 브라우저를 통하여 http 프로토콜로 서버로 요청할 때 들어오는 데이터는 다음과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;GET&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HTTP/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1.1&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Host:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;192.168.0.49&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Connection:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;keep-alive&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Accept:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;text/html,application/xhtml+xml,application/xml;q=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,image/webp,&lt;/span&gt;&lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;*/&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*;q=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.8&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Upgrade-Insecure-Requests:&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;User-Agent:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Mozilla/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5.0&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Macintosh;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Intel&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Mac&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OS&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;X&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;_10_4)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;AppleWebKit/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;537.36&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(KHTML,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;like&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Gecko)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Safari/&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;537.36&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Referer:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;http:&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//192.168.0.49/0&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Accept-Encoding:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;gzip,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;deflate,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sdch&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Accept-Language:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ko-KR,ko;q=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,en-US;q=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,en;q=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0.4&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 중에서 우리가 눈여겨 보아야 할 것은 첫 번째 줄이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;첫 번째 줄의 첫 번째 블럭을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;보면 GET 방식으로 접속 한다는 것을 알려주고 있고, 두 번째 블럭은 paht 값을 알려주고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이 path 값을 이용하여 통신할 수 있는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;HTTP 프로토콜 파싱 모듈을 만들거나 라이브러리를 이용한다면 완벽한 REST 서버도 구현할 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;어쨌든 이 번은 간단한 예제이므로, 이 것을 다음과 같이 처리하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET / &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;            
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;   ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; path 값을 검사하기 위해서 strncmp 를 이용하였는데, 첫 번째 인자는 비교할 문자열이고 두 번째 인자는 대상 문자열이다. 세 번째 인자는 비교할 길이다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;. (주로 첫 번째 인자로 들어간 문자열의 길이를 입력한다.)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;즉, data 배열에 담긴 문자열의 시작 위치에서 6번째 까지 문자를 검사하고 이 것이 &quot;GET / &quot; 과 일치하는지 확인하는 과정이다. paht 값이&amp;nbsp;일치 한다면 ctrncmp 함수는 0을 반환한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 이 라인에서는 http 데이터를 반환하고 TCP ack 값을 날리고 연결을 닫아준다.(&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: 돋움; font-size: 10pt;&quot;&gt;TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;돋움&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px;&quot;&gt;  확인결과 안타깝게도 소켓을 여려개 생성하고 커넥션을 관리하는 것이 힘들기 때문에 연결을 즉시 닫아주는 것이 좋을 것 같다. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;돋움&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px;&quot;&gt;  만약 데이터를 여러번 나누어 보내고 싶을 때는 multipacket 예제를 살펴보자. &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;돋움&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 이제 주소값을 이용하여 소리를 재생하는 부분을 살펴보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;GET /&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(i);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;' '&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(str.c_str());&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이 부분에 대하여 밑에서 설명하겠다.&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(strncmp(str.c_str(),&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str.length())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 재생중인 소리 종료&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;noTone(SPEAKER_PIN);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 500ms 동안 소리를 재생한다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 비동기식으로 동작한다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;tone(SPEAKER_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;note[i],&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ether.httpServerReply_with_flags(writeHtml(),TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이 부분은 귀찮은 관계로 다소 비효율적으로 처리하였는데, 오히려 이해하기는 쉬울 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이 코드는 클라이언트(웹브라우저) 를 통하여 들어온 http 헤더 값의 첫 번째 줄을 총 7번 검사한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; path 값들도&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; /0 /1 ... /5 /6 까지&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;총 7번&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;검사한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 만약 path 값이 일치할 경우 현재 재생하고 있는 소리를 종료하고 해상 path 값에 해당하는 소리를 500ms 동안&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;재생한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>ENC28J60</category>
      <category>Ethernet</category>
      <category>Iot</category>
      <category>소리</category>
      <category>소리재생</category>
      <category>스피커</category>
      <category>아두이노</category>
      <category>이더넷</category>
      <category>인터넷</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/79</guid>
      <comments>https://yagnu.tistory.com/79#entry79comment</comments>
      <pubDate>Sun, 2 Aug 2015 03:49:52 +0900</pubDate>
    </item>
    <item>
      <title>[Tip] View 으로로부터 Bitmap 가져오기 :: getDrawingCache 를 호출했을 때 발생하는 문제 해결.</title>
      <link>https://yagnu.tistory.com/78</link>
      <description>&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;pre style=&quot;font-family: Menlo; font-size: 12pt;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(128, 128, 128); font-size: 10pt; line-height: 1.5;&quot;&gt;// SDK 22 기준.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Menlo; font-size: 12pt;&quot;&gt;&lt;pre style=&quot;font-size: 12pt; font-family: Menlo;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.setDrawingCacheEnabled(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;// 임의로 measure 와 layout 을 호출한다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;//view.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY),&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;//                View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY));&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.measure(View.MeasureSpec.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 10pt;&quot;&gt;makeMeasureSpec&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;View.MeasureSpec.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-style: italic; font-size: 10pt;&quot;&gt;UNSPECIFIED&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;                    &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;View.MeasureSpec.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 10pt;&quot;&gt;makeMeasureSpec&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;View.MeasureSpec.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-style: italic; font-size: 10pt;&quot;&gt;UNSPECIFIED&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.layout(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.getMeasuredWidth()&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.getMeasuredHeight())&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;// 알파값을 갖는다면 어떤 옵션을 줘도 ARGB_8888 (32비트) 비트맵으로 반환되며,&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;// 알파값을 갖지 않는다면 어떤 옵션을 줘도 RGB_565 (16비트) 의 비트맵으로 반환한다 (;;;)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;// 게다가 호출하는 즉시 캐쉬 비트맵이 recycle 된다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;//view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_AUTO);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Bitmap cache = view.getDrawingCache(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(cache != &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;    Bitmap cachedBitmap = Bitmap.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 10pt;&quot;&gt;createBitmap&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(cache)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 12pt; font-family: Menlo;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.setDrawingCacheEnabled(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;보통은 위와 같은 방법으로 호출하면 View 의 bitmap 캐쉬를 무사히 가져올 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;하지만 이 방법을 사용했을 때, setDrawingCacheQuality 옵션을 LOW 로 줘도 ARGB_8888또는 RGB_565 이 반환된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;View 의&amp;nbsp;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;getDrawingCache 내부에 퀄리티 관련 옵션값을 처리하는 부분에 다음과 같은 주석이 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(128, 128, 128); font-family: Menlo; font-size: 12pt; line-height: 1.5; background-color: rgb(43, 43, 43);&quot;&gt;// Never pick ARGB_4444 because it looks awful&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래도 ARGB_4444 를 사용하고 싶다면 다음과 같이 처리하면 된다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Bitmap bitmap = Bitmap.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 10pt;&quot;&gt;createBitmap&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(view.getWidth()&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.getHeight()&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Bitmap.Config.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-style: italic; font-size: 10pt;&quot;&gt;ARGB_4444&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Canvas canvas = &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Canvas(bitmap)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;canvas.translate(view.getScrollX()&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.getScaleY())&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;canvas.drawARGB(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 10pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;view.draw(canvas)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/78</guid>
      <comments>https://yagnu.tistory.com/78#entry78comment</comments>
      <pubDate>Fri, 8 May 2015 19:31:41 +0900</pubDate>
    </item>
    <item>
      <title>테스트 진행시 Private 메소드 호출하기.</title>
      <link>https://yagnu.tistory.com/77</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;TDD 코드를 작성하는데, Private 메소드는 아주 귀찮은 존재입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;잠시 public 으로 바꿔서 테스트 하거나 또는 리플렉션을 사용하여 실행 시키는 방법등이 있는데, 여러가지로 피곤함을 가중시켜요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;그러나 이런 문제를 해결하기 위한 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt; line-height: 1.5;&quot;&gt;PowerMock 과 같은 도구가 있습니다!!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;https://code.google.com/p/powermock/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://code.google.com/p/powermock/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;하지만, Android &amp;nbsp;테스트에서&amp;nbsp;Robolectric 과 Mockito 를 사용하는데, 여기다가&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;PowerMock&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;까지 붙이면 Exception 을 뿜으며&amp;nbsp;문제가 생기네요.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;(혹시 문제 해결책을 아시는 분 있으면 알려주십쇼..ㅠㅠ)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;어쨌든 위와 같은&amp;nbsp;문제를 해결 하느라&amp;nbsp;약간의 삽질을 하다가,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;허접하게 나마 아래와 같이 좀 더 &lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;편하게&lt;/span&gt;&amp;nbsp;private 메소드를 실행시킬 수 있는 코드를 짜봤는데요,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;이 것을 이용하면 private 메소드에 대하여&amp;nbsp;그럭저럭 테스트는 진행할 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;다만, 아직 null 인자값을 받을 수 없고, 가변 인자값도 사용할 수 없습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;이 문제가 개선되는 대로 업데이트 할 것입니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/255F1E45554069D416&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;invoke.zip&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;사용 방법.&lt;/span&gt;&lt;/p&gt;&lt;div id=&quot;preview&quot; style=&quot;padding-bottom: 3em; margin: auto 1em; font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;div style=&quot;overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 인자값이 없는 static 메소드.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 메소드의 반환 값이 없을 경우 null 을 반환.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;반환값&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;invokeStatic(&lt;/span&gt;&lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;클래스&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;메소드명&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 인자값이 있는 static 메소드.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;반환값&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;invokeStatic(&lt;/span&gt;&lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;클래스&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;메소드명&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;인자값&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;인자값&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;...&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 인자값이 없는 메소드.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;반환값&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;invoke(&lt;/span&gt;&lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;객체&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;메소드명&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 인자값이 있는 메소드&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Object&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;반환값&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;invoke(&lt;/span&gt;&lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;객체&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;메소드명&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;인자값&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;인자값&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;...&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/개인 자료</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/77</guid>
      <comments>https://yagnu.tistory.com/77#entry77comment</comments>
      <pubDate>Wed, 29 Apr 2015 14:13:34 +0900</pubDate>
    </item>
    <item>
      <title>Guava 사용 요약 슬라이드.</title>
      <link>https://yagnu.tistory.com/76</link>
      <description>이 슬라이드를 보고 암이 치료되었습니다...&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;4f25d429da3abe001f006bc6&quot; data-ratio=&quot;1.33507170795306&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;위 슬라이드 내용을 아래와 같이 정리해 봤다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt; background-color: rgb(255, 255, 255);&quot;&gt;Base :: Objects.equal()&lt;/span&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt; background-color: rgb(255, 255, 255);&quot;&gt;, Objects.hashCode(),&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt; background-color: rgb(255, 255, 255);&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;MoreObjectes.toStringHelper(), ComparisonChain.compare()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;



&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public class &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Employee &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;implements  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Comparable{&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Integer &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Job &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 181, 41); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public boolean &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 198, 109); font-size: 9pt;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(Object o) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(!(o &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;instanceof  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Employee)) &lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;return false;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Employee that = (Employee)o&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;        return &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Objects.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;that.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;) &amp;amp;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                Objects.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;equal&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;that.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;) &amp;amp;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;== that.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 181, 41); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public int &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 198, 109); font-size: 9pt;&quot;&gt;hashCode&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Objects.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;hashCode&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 181, 41); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 198, 109); font-size: 9pt;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;MoreObjects.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;toStringHelper&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                add(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                add(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;age&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                add(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;job&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                toString()&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#bbb529;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 181, 41); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public int &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 198, 109); font-size: 9pt;&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(Employee another) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;ComparisonChain.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                .compare(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;another.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;                                &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Ordering.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;natural&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;().nullsLast())&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                .compare(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;another.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;                                &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Ordering.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;natural&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;().nullsLast())&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                .compare(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;another.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;                                &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Ordering.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;natural&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;().nullsLast())&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;                .result()&lt;/span&gt;&lt;span style=&quot;color:#2b2b2b;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt;&quot;&gt;Base :: Preconditions.checkNotNull()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public class &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    String &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail(String title&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String body) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;title &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;= Preconditions.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;checkNotNull&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(title&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;title must not be null&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;        this&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;body &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;= Preconditions.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;checkNotNull&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(body&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;body must not be null&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Preconditions.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;checkArgument&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(body.matches(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;&amp;lt;[^&amp;gt;]*&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Cannot insert tags in body.&quot;  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Preconditions.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;checkArgument&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(title.matches(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;&amp;lt;[^&amp;gt;]*&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Cannot insert tags in title&quot;  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;// &lt;span style=&quot;color: rgb(204, 61, 61);&quot;&gt;java.lang.NullPointerException: title must not be null&lt;/span&gt; 발생.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;mailA &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail(&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;null, null&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;// &lt;span style=&quot;color: rgb(204, 61, 61);&quot;&gt;java.lang.IllegalArgumentException: Cannot insert tags in body.&lt;/span&gt; 발생.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-size: 9pt;&quot;&gt;mailB &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;= &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Mail(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;ha ha!&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;hi &amp;lt;div&amp;gt; hello &amp;lt;/div&amp;gt; &quot; &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;더 많은 정보 :&amp;nbsp;http://stackoverflow.com/questions/3128120/what-is-the-proper-error-message-to-supply-to-google-guavas-preconditions-met&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt;&quot;&gt;Base :: MoreObjects.firstNonNull()&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 198, 109); font-size: 9pt;&quot;&gt;getPackageName&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;// 기존&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    //String packageName = getPackageName();&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    //return (packageName != null)?packageName:&quot;UNKNOWN&quot;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;    // 개선&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 128); font-size: 9pt;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;MoreObjects.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;firstNonNull&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(getPackageName()&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;UNKNOWN&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(53, 53, 53); font-size: 18pt;&quot;&gt;Base :: Joiner&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;span style=&quot;font-size: 9pt; background-color: rgb(52, 65, 52);&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;lt;String&amp;gt; heroes = Lists.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;newArrayList&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Kick-Ass&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Iron Man&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, null, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Chuck Norris&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String names = Joiner.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).join(heroes)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;// &lt;span style=&quot;color: rgb(204, 61, 61);&quot;&gt;NullPointerException&lt;/span&gt; 발생!!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; background-color: rgb(52, 65, 52);&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;lt;String&amp;gt; heroes = Lists.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;newArrayList&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Kick-Ass&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Iron Man&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, null, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Chuck Norris&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String names = Joiner.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).skipNulls().join(heroes)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;// &quot;Kick-Ass, Iron Man, Chuck Norris&quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; background-color: rgb(52, 65, 52);&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;lt;String&amp;gt; heroes = Lists.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;newArrayList&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Kick-Ass&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Iron Man&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, null, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Chuck Norris&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String names = Joiner.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).useForNull(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Invisible Man&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).join(heroes)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 128); font-size: 9pt;&quot;&gt;// prints &quot;Kick-Ass, Iron Man, Invisible Man, Chuck Norris&quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'Menlo';font-size:12.0pt;&quot;&gt;&lt;pre style=&quot;font-family: Menlo; font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Map&amp;lt;Integer&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String&amp;gt; map = &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;HashMap&amp;lt;Integer&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String&amp;gt;()&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;map.put(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 9pt;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Chuck Norris&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;map.put(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 9pt;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Iron Man&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;map.put(&lt;/span&gt;&lt;span style=&quot;color: rgb(104, 151, 187); font-size: 9pt;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot;Kick-Ass&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;String ranks = Joiner.&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-size: 9pt;&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 120, 50); font-size: 9pt;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).withKeyValueSeparator(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 135, 89); font-size: 9pt;&quot;&gt;&quot; -&amp;gt; &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;).join(map)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 118, 170); font-style: italic; font-size: 9pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;.println(ranks)&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;Prints:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;1 -&amp;gt; Chuck Norris&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;2 -&amp;gt; Iron Man&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;3 -&amp;gt; Kick-Ass&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#629755;font-style:italic;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;정리중...&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/76</guid>
      <comments>https://yagnu.tistory.com/76#entry76comment</comments>
      <pubDate>Fri, 17 Apr 2015 02:55:26 +0900</pubDate>
    </item>
    <item>
      <title>ActivityLifecycleCallbacks 를 이용하여 실행중인 Activity 상태와 객체 가져오기.</title>
      <link>https://yagnu.tistory.com/74</link>
      <description>&lt;div id=&quot;preview&quot; style=&quot;padding-bottom: 3em; margin: auto 1em;&quot;&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: normal; font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; Application 클래스 내부 메소드인&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;registerActivityLifecycleCallbacks(&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;를 이용해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 이 메소드의 인자값으로&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;ActivityLifecycleCallbacks 를 상속받아 구현한 클래스의 인스턴스를 넣어준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&amp;nbsp; 또는 다른 Activity 나 Service 내부에서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 12pt; font-family: Batang, 바탕;&quot;&gt;getApplication().&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 12pt; line-height: 16.25px;&quot;&gt;&amp;nbsp;registerActivityLifecycleCallbacks(new&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 12pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks { &amp;nbsp;... &amp;nbsp;}&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 12pt; line-height: 16.25px;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; &amp;nbsp;와 같이 호출해 주는 방법도&amp;nbsp;있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;registerActivityLifecycleCallbacks 을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;더이상 사용하지 않을때는&amp;nbsp;&lt;/span&gt;&lt;font color=&quot;#000000&quot; face=&quot;Batang, 바탕&quot; style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;unregisterActivityLifecycleCallbacks(&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(0, 0, 0); font-family: Batang, 바탕;&quot;&gt;&amp;nbsp;를 이용하여 이벤트 등록을 해지시켜 줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 16.25px; color: rgb(0, 0, 0); font-family: Batang, 바탕;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;registerActivityLifecycleCallbacks 는 Activity 의 라이프 사이클별로 발생하는 이벤트에 대한 콜백을 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;즉, 어떤 Activity의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;라이프 사이클 이벤트 메소드(onCreate, onDestroy, onResume, onPause, onStart, onStop 등)&amp;nbsp;가 호출되는 순간&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;때 외부에서&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks 를 사용하여 발생하는 이벤트와 대상 Activity 객체를 가져올 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;사용시&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;주의할 점은 Activity 를 상속받아 구현된&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;당신의 액티비티&amp;nbsp;클래스에서&amp;nbsp;오버라이드된 이벤트 메소드가 끝나는 순간에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks 의 이벤트가 호출되지 않을 수 있다. 좀 더 자세히 설명하기 위해서 아래 코드를 첨부한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; (말도 안 되는 코드지만, 이해를 돕기 위하여 이렇게 작성하였다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 130, 153); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;lt;MainActivity.java&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;class MainActivity extends Activity {&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; public ListView mText&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;View;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected void onCreate(Bundle savedInstanceState) {&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;mText&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;View&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;= (ListView)findViewById&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(R.id.textView&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; ...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 130, 153); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&amp;nbsp;Ex&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;ActivityLifecycleCallbacks&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 130, 153); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;.java&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 130, 153); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;class&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;Ex&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px; color: rgb(0, 0, 0);&quot;&gt;ActivityLifecycleCallbacks&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;implements&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;{&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;font color=&quot;#000000&quot; face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;public void onActivityCreated(Activity activity, Bundle savedInstanceState) {&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;ListView textView = ((MainActivity)actvitiy).&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;mText&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;View&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;// 이 곳에서 null 포인터&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;예외&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;발생.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;textView.setText(&quot;Hello World!&quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot; face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px; color: rgb(0, 0, 0); font-family: Batang, 바탕;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 16.25px;&quot;&gt;&amp;nbsp;...&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이와 같이 에러가 발생하는&amp;nbsp;이유는 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks &amp;nbsp;의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;onActivityCreated 가 실제로 호출되는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;시점이 상속받은 액티비티의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;onCreate 메소드에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;super.onCreate(savedInstanceState); 를&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;호출하는&amp;nbsp;순간이기 때문이다. 즉,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: 16.25px;&quot;&gt;ActivityLifecycleCallbacks 의 이벤트 메소드의 호출은 부모 Activity 클래스의 각 라이프 싸이클 관련 이벤트 메소드 내부에서 간접적으로 이루어지기 때문이다. 이 것에 대한 자세한 내용은 아래에서 다루겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); line-height: 16.25px; font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;ActivityLifecycleCallbacks 의 메소드 이름을 보면 한 눈에 딱 들어오는 것이 쓰기에도 편하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px;&quot;&gt;api 레벨 14 (iCS) 이상에서 사용할 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background-image: initial; background-attachment: initial; background-color: rgb(32, 32, 32); background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;TestApplication&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Application&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

    &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityLifecycleCallbacks&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mActivityLifecycleCallbacks&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&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;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityLifecycleCallbacks()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityCreated&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Bundle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;savedInstanceState)&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityStarted&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityResumed&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityPaused&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityStopped&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivitySaveInstanceState&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Bundle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;outState)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onActivityDestroyed&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;하지만, 뭔가 되게... 찝찝한 것이 있다. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;구글 개발자 사이트에서&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&amp;nbsp;ActivityLifecycleCallbacks 의 페이지를&amp;nbsp;찾아서 들어가보면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;설명이 전혀 없는&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;것을 볼 수 있기 때문이다. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2142EA345525820B31&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2142EA345525820B31&quot; width=&quot;400&quot; height=&quot;237&quot; filename=&quot;스크린샷 2015-04-09 오전 4.29.47.png&quot; filemime=&quot;image/png&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; text-align: start;&quot;&gt;(이 문서 페이지에 대하여 마지막으로 확인을 한 것은 이 포스팅을 작성한&amp;nbsp;시점과 동일한 15년 03월이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; text-align: start;&quot;&gt;이 문서에 대한 첫&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; text-align: start;&quot;&gt;&amp;nbsp;확인은1년전에&amp;nbsp;했었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; text-align: start;&quot;&gt;지금까지는&amp;nbsp;변한 것이 없지만 앞으로는 개선될 수 있다.&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; text-align: start;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: normal; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 여담이지만, 그동안 구글 api 와&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;문서에 뒤통수 맞은 것이 한 두번이 아니다. 다행히&amp;nbsp;요즘은&amp;nbsp;많이 괜찮아 졌지만 오래전&amp;nbsp;안드로이드에서&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;버전별로 미묘하게 다르게 동작하는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;AsyncTask 때문에 개삽질한 경험과&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;Fragment 의 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;파편화, 기기별로 미묘하게 동작이 다른&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;onTouch 이벤트 등...&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: Batang, 바탕;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; (경험상&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;AsyncTask 파편화 처리가 최고 정점이었다. 결국 호환 클래스를 구현하여 해결&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하였지만&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그 이후로 AsyncTask 는 두번다시 사용하지 않는다. ㅡ , , ㅡa )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;그렇기 때문에 문서에&amp;nbsp;설명조차 없는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt;&quot;&gt;ActivityLifecycleCallbacks 사용이 조금 망설여 지는 것도 사실이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: 돋움; font-size: 10pt;&quot;&gt;그러나 테스트 결과는 우려와는 다르게 정상적으로 동작하는 것을 확인 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: 돋움; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;Application.java 내부에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;ActivityLifecycleCallbacks이 사용되는 과정은 다음과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;우선&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Batang, 바탕; font-size: 10pt; line-height: 16.25px;&quot;&gt;registerActivityLifecycleCallbacks 를 통하여 등록된&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ActivityLifecycleCallbacks &amp;nbsp;인스턴스의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;메소드들은 Application 클래스의&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;  &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;dispatchActivityCreated, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 0, 0); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;dispatchActivityStarted, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 0, 0); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;dispatchActivity...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp;등의 메소드에서&amp;nbsp;호출된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp; 참고로 &amp;nbsp;이 메소드들은 2011년 7월에 추가된 것 같다. &amp;nbsp;(&lt;/span&gt;&lt;font face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: normal;&quot;&gt;https://github.com/android/platform_frameworks_base/blob/3bdbf644d61f46b531838558fabbd5b990fc4913/core/java/android/app/Application.java)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp; 이 메소드들이 호출되는 장소는&amp;nbsp;Activity 클래스의 각 라이프 사이클 관련 이벤트 메소드다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp; 예를들어 Application&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;dispatchActivityCreated&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 는&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 아래 코드와 같이 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Activity&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 의 onCreate 이벤트 메소드에서&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 호출된다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&amp;nbsp;( Activity.java )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;font face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;protected&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-en&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(121, 93, 163); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;@Nullable&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-smi&quot; style=&quot;font-size: 10pt; box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;Bundle&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pl-v&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(237, 106, 67); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;) {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp; // 나머지 코드는 생략.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font face=&quot;Batang, 바탕&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;getApplication()&lt;/span&gt;&lt;span class=&quot;pl-k&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(167, 29, 93); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;dispatchActivityCreated(&lt;/span&gt;&lt;span class=&quot;pl-v&quot; style=&quot;font-size: 10pt; box-sizing: border-box; color: rgb(237, 106, 67); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; line-height: 16.7999992370605px; white-space: pre;&quot;&gt;, savedInstanceState);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal; font-family: Batang, 바탕;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; API&amp;nbsp;&lt;span style=&quot;font-size: 10pt;&quot;&gt;문서에 설명이 없는 것은&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;조금 당황스럽지만, 안심하고 사용해도 될 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal; font-family: Batang, 바탕;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: normal; font-family: Batang, 바탕;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Batang, 바탕; font-size: 13.3333330154419px; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>ActivityLifecycleCallbacks</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/74</guid>
      <comments>https://yagnu.tistory.com/74#entry74comment</comments>
      <pubDate>Thu, 9 Apr 2015 05:24:09 +0900</pubDate>
    </item>
    <item>
      <title>Android, NDK 를 활용한 클라이언트 앱 위변조 간단하게 방지하기.</title>
      <link>https://yagnu.tistory.com/73</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 사실 앱 위변조 방지는 프로가드만 잘 적용하면 어느정도 방지할 수 있다. 하지만, 클라이언트 앱을 역컴파일 한다면 서버 API 가 노출되는 것을 쉽게 막을수도 없는일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; 사실 이 문제에 대하여 당장 떠오르는 해결책은 NDK 를 사용하여 서버와 통신하는 것이다. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;하지만 서버의 모든&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;API 호출을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;C/C++ 로 구현하기에는 시간적 인적 비용이 부족한 많은 프&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;로젝트에서는 거의 불가능에 가깝지 않을까 생각한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그래서 시간이 없는 상황에서는 다음과 같이 간단한 방법을 이용할 것을 권장한다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 코드상에서 서명 값&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;을 가져와서 서버와 첫 접속시&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;이 값을 보내준다. 서버에는 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;앱의 서명 값이 이미 저장되어 있으며 이 것을 클라이언트로부터 받은 서명값과 비교하여 위변조된 앱인지 검출하는 것이다. 즉, 앱 빌드시 다른 인증서로 서명한 것들은 위변조로 판별하는 원리이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 만약 위변조된 앱으로 접속했을 경우 앱에서는 경고창을 띄워주고&amp;nbsp;세션을 유지하지 않도록 해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; 서명 값을 가져와 서버로 보내는 과정만큼은&amp;nbsp;NDK 로 구현하여 서버 API 를 노출하지 않도록 만들어야 하며, 서버로 보내는 서명 값을 공격자가 알 수 없는 값으로 변환하거나 암호화 하는 것이 더 좋을 것이다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;서명 값(인증서 지문, 이 포스팅에서는 서명 값으로 표시하겠다.)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;은 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;APK 파일 내부의 META-INF/CERT.RSA &amp;nbsp; 를 통하여 가져올 수 있기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 너무나 당연한 이야기지만 주의할 점은 HTTP 를 사용할 경우 반드시 SSL 을 적용해야 한다. HTTPS 가 아닌 HTTP 는 공격자가 루팅된 폰이나 VPN 을 사용하여 손쉽게 패킷 전송&amp;nbsp;내용을 훔쳐볼 수 있기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;이 것의 구현에 필요한 관련 포스팅은 아래와 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;NDK 에서 HTTP 통신 이용하기 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.dev.re.kr/67&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.dev.re.kr/67&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;NDK 에서 서명 값 가져오기 : &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.dev.re.kr/72&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.dev.re.kr/72&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;안드로이드 아닌 자바&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;코드상에서 서명 값 가져오기 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.dev.re.kr/70&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.dev.re.kr/70&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;* 여담으로 얼마 전 같이 (동료로) 일했던 분이&amp;nbsp;앱 위변조 방지에 대한 요구사항을&amp;nbsp;위하여 서버의 API 를 직접&amp;nbsp;호출하는 부분을 C/&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;C++ 로 짜고 빌드 하느라 삽질하고 있다는 이야기를 들었다. 시간 + 인력&amp;nbsp;빵빵한 프로젝트에서는 가능하겠지만 동시에&amp;nbsp;프로젝트 세 개를 진행하던 그분은 여러&amp;nbsp;사정 때문에&amp;nbsp;어쩔 수 없이 한 땀 한 땀 코딩하며&amp;nbsp;저녁도 못 먹고 매일매일 야근 릴레이를 펼치고 있다. 만약 그 프로젝트에서 누군가가 이런 어렵지 않은&amp;nbsp;방법을 알고 있었다면&amp;nbsp;그 분은 매일매일 지치는 야근을 피하지 않았을까 싶다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/기타,연구</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/73</guid>
      <comments>https://yagnu.tistory.com/73#entry73comment</comments>
      <pubDate>Wed, 8 Apr 2015 18:45:08 +0900</pubDate>
    </item>
    <item>
      <title>NDK 를 이용하여 Signaiture (서명) 값 가져오기.</title>
      <link>https://yagnu.tistory.com/72</link>
      <description>&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;앱의 위변조를 방지하기 위하여 서명 값을 가져와서 서버에 미리 등록된 값과 비교하는 과정이 필요하다.&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;하지만, 안드로이드&amp;nbsp;Java 코드상으로 제공되는 API 를 활용하는 것은 안전하지 못하다.&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;(안드로이드 자바 코드상에서 서명 값 가져오기 :&amp;nbsp;&lt;a href=&quot;http://www.dev.re.kr/70&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.dev.re.kr/70&lt;/a&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;그렇기 때문에 JNI 를 활용해야 한다. context 를 인자값으로 받아서 jni 에서 제공되는&amp;nbsp;리플렉션을 사용하여 SHA1 으로 변환된 서명 값을 가져오는 코드를 첨부한다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;주의할 점은 아래 코드는 C++ 로 작성되었기 때문에 C 에서 사용하려면 약간의 수정이 필요하다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;이를테면&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-size: 10pt;&quot;&gt;env-&amp;gt;GetObjectClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-size: 10pt;&quot;&gt;context);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; white-space: normal;&quot;&gt;를 C로 표현 하려면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(*env)-&amp;gt;GetObjectClass(env, &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;context);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; white-space: normal;&quot;&gt;로 변환해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: normal; font-size:12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;스크롤바 때문에&amp;nbsp;코드를 보기 불편할 수 있으므로 파일도 추가한다.&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/255EDB485524F6001B&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/txt.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;getSignaiture.txt&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Context 를 인자값을 받아서 Signature 의 값을 얻는다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;getSignaiture&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(JNIEnv&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*env,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;context)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageName;&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageManagerObj;&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageInfoObj;&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;contextClass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetObjectClass(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;context);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageNameMid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;contextClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;getPackageName&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;()Ljava/lang/String;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageManager&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;contextClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;getPackageManager&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;()Landroid/content/pm/PackageManager;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageManagerClass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;FindClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android/content/pm/PackageManager&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageInfo&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageManagerClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;getPackageInfo&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageInfoClass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;FindClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android/content/pm/PackageInfo&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jfieldID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signaturesFid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetFieldID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageInfoClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;signatures&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;[Landroid/content/pm/Signature;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureClass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;FindClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android/content/pm/Signature&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureToByteArrayMid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;toByteArray&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;()[B&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestClass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;FindClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;java/security/MessageDigest&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestUpdateMid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;update&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;([B)V&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getMessageDigestInstanceMid&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetStaticMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;getInstance&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;(Ljava/lang/String;)Ljava/security/MessageDigest;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;digestMid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestClass,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;digest&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;()[B&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jclass&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;base64Class&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;FindClass(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android/util/Base64&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
               &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jmethodID&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encodeToStringMid&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetStaticMethodID(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;base64Class,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;encodeToString&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;([BI)Ljava/lang/String;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(jstring)env-&amp;gt;CallObjectMethod(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;context,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageNameMid);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageManagerObj&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;CallObjectMethod(context,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageManager);&lt;/span&gt;
          &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// PackageManager.GET_SIGNATURES = 0x40&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageInfoObj&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;CallObjectMethod(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageManagerObj,getPackageInfo,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageName,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x40&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobjectArray&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatures&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(jobjectArray)env-&amp;gt;GetObjectField(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageInfoObj,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signaturesFid);&lt;/span&gt;
          &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//int signatureLength =  env-&amp;gt;GetArrayLength(signatures);&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureObj&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetObjectArrayElement(signatures,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestObj&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;CallStaticObjectMethod(messageDigestClass,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getMessageDigestInstanceMid,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;NewStringUTF(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;SHA1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;CallVoidMethod(messageDigestObj,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestUpdateMid,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;CallObjectMethod(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureObj,signatureToByteArrayMid));&lt;/span&gt;

          &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Base64.DEFAULT = 0 그렇기 때문에 맨 마지막 인자값은 0이다.&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureHash&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(jstring)env-&amp;gt;CallStaticObjectMethod(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;base64Class,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;encodeToStringMid,env-&amp;gt;CallObjectMethod(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;messageDigestObj,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;digestMid,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;signatureObj),&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

          &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)env-&amp;gt;GetStringUTFChars(signatureHash,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/72</guid>
      <comments>https://yagnu.tistory.com/72#entry72comment</comments>
      <pubDate>Wed, 8 Apr 2015 18:40:55 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 APK 서명에 대하여 + java 코드상에서 APK 파일로부터 인증서 정보 가져오기.</title>
      <link>https://yagnu.tistory.com/70</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 우선 안드로이드 APK 파일은 JAR 와&amp;nbsp;호환되는 형태로 되어있다. 즉, 코드를 빌드를 하여 나오는 APK &amp;nbsp;파일은 zip 포맷과 유사한 jar 와도&amp;nbsp;비슷하다. 특히&amp;nbsp;서명에 대한 방식은 JAR 와 APK 와 매우 비슷하다. 실제로 서명을 사용해 빌드된 APK 파일 확장명을 &amp;nbsp;zip 으로 변경하고 압축을 풀어보면 META-INF 디렉토리 내부에 이와 관련한 파일이 생성된 것을 볼 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 이 파일은 MANIFEST.MF, CERT.SF, CERT.RSA 파일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;MANIFEST.MF&lt;/span&gt;&lt;/b&gt; 파일은 텍스트로 되어있으며&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;META-INF&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;디렉토리 내부의&amp;nbsp;파일을 제외한&amp;nbsp;APK 패키지 내부&amp;nbsp;모든 파일(Entry)에 대한&amp;nbsp;리스트를 보여준다. 각 리스트의 항목에는 파일 경로와 각 파일의&amp;nbsp;SHA1 해쉬 값(파일을 읽어서 만든다.)을 Base64 로 인코딩 하여 나타내고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 431px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22273B35551249242F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22273B35551249242F&quot; width=&quot;431&quot; height=&quot;349&quot; filename=&quot;스크린샷 2015-03-25 오후 2.33.13.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;CERT.SF&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; &lt;/span&gt;도 마찬가지로 텍스트로 되어있으며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;MANIFEST.MF 파일과 구조가 비슷하다. 다만 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;MANIFEST.MF 에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;등록된 각 파일에 대한 해쉬 값은&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;개인키(APK 빌드할 때 사용되는 인증서,&amp;nbsp;패스워드와 관련되어 있다고 생각하면 된다)&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;를 이용하여 SHA1 RSA 로 암호화 한 뒤에&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;Base64 로 인코딩 되어 있다. 또, &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;MANIFEST.MF 파일 자체의&amp;nbsp;위변조를 막기 위하여&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;MANIFEST.MF 파일의 값도 포함&lt;/b&gt;되어 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;개인키로 암호화된 값들은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;공개키로 복호화할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 455px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25506035551249241A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25506035551249241A&quot; width=&quot;455&quot; height=&quot;393&quot; filename=&quot;스크린샷 2015-03-25 오후 2.34.16.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-weight: bold;&quot;&gt;&amp;nbsp;CERT.RSA&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;nbsp;는 공개키&amp;nbsp;인증서이며 소유자, 발행자, 일련번호, 유효기간, 인증서 지문, &amp;nbsp;알고리즘등이 표시되어 있다. &amp;nbsp;keeytool 을 이용하여 값을 확인할 수 있다.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 538px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2402014955124B0111&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2402014955124B0111&quot; width=&quot;538&quot; height=&quot;134&quot; filename=&quot;스크린샷 2015-03-25 오후 2.38.06.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;안드로이드 APK 패키지 파일의 서명은 기존 JAVA 에서 제공하는 JAR 파일의 서명과 동일한 방식을 사용한다. 마찬가지로&amp;nbsp;APK 파일 설치시 JAVA 에서 기본적으로 제공하는 jar&amp;nbsp;서명 검증 관련 API 를 이용하여 APK 의 무결성을 확인한다. 실제 예를 들자면&amp;nbsp;Android 내부의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0); font-family: 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; line-height: normal;&quot;&gt;&lt;a href=&quot;http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/content/pm/PackageParser.java#442&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;PackageParser&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;클래스에서도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;JarFile&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt; 클래스를 이용하여 APK 파일을 열고 내부의 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;Entry&lt;/span&gt;(파일) 리스트를 받아와서 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;InputStream&lt;/span&gt; &amp;nbsp;을 통하여 파일을 읽는다. 이&amp;nbsp;과정에서 내부적으로&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;JarVerifier&lt;/span&gt; 클래스가 서명 정보를 확인한다. 서명 정보를 확인할 때, CERT.SF 내부의 암호화된 값들을&amp;nbsp;공개키를 이용하여 복호화 하고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;MANIFEST.MF 의 파일 해쉬 값들과 비교한다. 또, 실제 파일의 SHA1 값들과&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;MANIFEST.MF 내부의 값들이 일치하는지 검사한다.(순서는 확인하지 못 하였다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 이런 과정 덕분에 안드로이드 앱은 빌드시에 사용되는 인증서가 있지 않는한 위변조된 APK 파일은 원본과 구분될 수 있다. 즉, 원본 앱을 업데이트 하는 방식으로 위변조 APK 를 설치할 수 없다. (물론 인증서를 탈취하면 이야기가 달라진다.) 그렇다고 해서 악의적으로 위변조된 APK 파일에 대한 위협이 사라지는 것은 아니다. 만약 원본과 거의 비슷한 모양새로 만들어&amp;nbsp;빌드하고 다른 인증서로 배포하면 사용자 입장에서는 속아 넘어가서 설치하고 스미싱을 당하거나, 서버와 통신하는 클라이언트 앱의 경우 서버 공격에 대한 빌미를 줄 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 앱이 위변조 되었는지 확인하기&amp;nbsp;위하여 불가피하게 서버와의 통신이 필요하다.&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;(이 내용은 지금 포스팅과 시리즈로 엮어서 다음 포스팅에서 다루겠다.)&lt;/span&gt; 서버로 APK 파일에 대한 고유 키 값을 보내줘야할 때, 인증서 정보(인증서 지문)&amp;nbsp;만큼 확실한 값은 없다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 우선 APK 파일을 압축을 풀면 나오는 META_INF/CERT.RSA &amp;nbsp;파일에 대한 인증 정보를 확인하는 방법은 다음과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;







&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;keytool -printcert -file &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;CERT.RSA&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 이 명령어를 실행하면 인증서 정보(인증서 지문, Certificate Fingerprint)를 얻을 수 있다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;안드로이드 코드상에서 얻는 방법은 다음과 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Context&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;getApplicationContext();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;PackageManager&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;pm&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;context.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getPackageManager&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;packageName&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;context.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getPackageName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;PackageInfo&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;packageInfo&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;packageInfo&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;pm.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getPackageInfo&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(packageName,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;PackageManager.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;GET_SIGNATURES&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Signature&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certSignature&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;packageInfo.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;signatures&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;MessageDigest&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;msgDigest&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;MessageDigest.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;SHA1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;msgDigest.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(certSignature.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;toByteArray&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;());&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Base64.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;encodeToString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(msgDigest.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;digest&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Base64.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;DEFAULT&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(PackageManager.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;NameNotFoundException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(NoSuchAlgorithmException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 위 코드에서 cert &amp;nbsp;변수에 이 앱을 빌드할 때 사용된 인증서의 정보 값이 들어간다. 이 값과 APK 파일의&amp;nbsp;CERT.RSA 파일로부터 'keytool -printcert -file CERT.RSA' 으로 얻은 값을 Base64 로 인코딩 하여 비교하면 동일함을 알 수 있다. &amp;nbsp;물론 해쉬 알고리즘을 SHA-256 또는 MD5 를 이용하여 요약해도 마찬가지다. &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &lt;span style=&quot;font-size: 10pt;&quot;&gt;하지만, 서버나 외부에서 APK 파일의 인증서 정보 값을 얻을 때는 안드로이드 내부에서 얻는 코드를 이용할 수 없다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그래서 다음과 같은 클래스를 만들어 보았다. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;APK 파일의 인증을 검증하는 과정도 포함되어 있으며 잘못된 인증 값을 갖고 있을 경우 예외를 발생시킨다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 테스트 완료 하였으며, 아마도&amp;nbsp;안드로이드 내부에서 다른 APK 파일 인증 정보를 읽어오는 것도 가능할 것이다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; (코드가 다소 길다. 읽기 쉽도록&amp;nbsp;소스 파일도 함께 첨부한다. &amp;nbsp;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/216FFB3455124CE809&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/unknown.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;APKCertExtractor.java&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;APKCertExtractor:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.io.IOException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.io.InputStream&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.security.MessageDigest&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.security.NoSuchAlgorithmException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.security.cert.Certificate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.security.cert.CertificateEncodingException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.util.Enumeration&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.util.jar.JarEntry&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;java.util.jar.JarFile&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;javax.xml.bind.DatatypeConverter&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;kr.re.dev.server.APKCertExtractor.APKCertExtractionException.ErrType&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;



&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * APKCertExtractor&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * - APK 파일내의 인증 정보를 SHA1, base64 로 만들어 반환한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * - APK 파일의 유효성을 검사한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * - 2개 이상의 서명을 사용하는 APK 파일에 대하여 사용할 수 없다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; *   하지만, Play store 에서도 2개 이상의 서명을 갖고 있는 APK 를 허용하지 않는다.  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; *     &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * ::사용법&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; *   - APKCertExtractor.execute(apk 파일 경로);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; *   - 인증 검증 실패시 APKCertExtractionException 예외 발생.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; *   &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; * http://dev.re.kr&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;APKCertExtractor&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(String[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;args)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractor.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;test.apk&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(cert);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	

	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * 인증서 지문을 반환한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @param apkFilePath APK 파일의 경로. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @throws APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 165, 0); font-size: 9pt;&quot;&gt;@SuppressWarnings&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;resource&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;execute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkFilePath)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// JarFile 클래스는 java.util.zip.ZipFile 를 상속받아 구현되었다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// jar 파일에 대한 설명은 다음 블로그 페이지에 자세히 소개되어 있다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// http//www.yunsobi.com/blog/62&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 이 클래스는 jar(zip) 의 엔트리(파일 정보) 및 파일을 읽기 위하여 사용된다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;JarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;JarFile(apkFilePath);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// APK 파일 내의 AndroidManifest.xml 의 엔트리와 인증 정보를 읽어온다.  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;JarEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;manifestEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getJarEntry&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;AndroidManifest.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(manifestEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;WrongAPKFormat&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkFilePath,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Certificate[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;loadCertificates(jarFile,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;manifestEntry);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(certs&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;WrongCert&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;manifestEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Certificate&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// APK 파일 내의 모든 엔트리의 인증을 검증한다.  &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;verifCertificates(jarFile,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 바이트 배열 타입의 인증 정보를 SHA1 Base64로 변환.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;hash;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;hash&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certToSHA1(cert);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(CertificateEncodingException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 인증서에 문제 있을 때 발생. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;WrongCert&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkFilePath,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;hash;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
		&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 파일 경로등에 문제 있을 때 발생한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(IOException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;ReadFail&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkFilePath,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		 
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		
	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * APK 내부 파일의 인증을 확인한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @param jarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @param cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;verifCertificates&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(JarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile,Certificate&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Enumeration&amp;lt;JarEntry&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;entries&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(entries.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;hasMoreElements&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;JarEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(JarEntry)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;entries.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;nextElement&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 서명되지 않는 디렉토리인 META-INF 는 건너뛴다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;isDirectory&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;META-INF/&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;.DS_Store&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;			
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Certificate[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;loadCertificates(jarFile,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(certs&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;WrongCert&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Certificate&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;localCert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certs[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 인증 정보가 없는(서명이 되지 않은) 파일 발견. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// APK 압축을 풀고 임의의 파일을 넣거나 제거하여 다시 APK 파일로 압축했을 때 발생한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(localCert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;				
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(IOException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;ForgeryAPK&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;  
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 인증 정보가 서로 다른 엔트리 발견. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 물론 설치는 안 되겠지만, 위변조 시도되는 앱으로 의심된다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(!cert.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(localCert))&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(IOException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;ForgeryA&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;PK&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	 
	 &lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	  * Certificates 객체를 반환한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @throws APKCertExtractionException &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	  */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;security&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;Certificate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;loadCertificates&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(JarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;JarEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(jarEntry&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// JarEntry 로부터 Certificate 객체를 얻기 위해서는 JarEntry 를 검증하기 위하여 끝까지 다 읽어야 한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 이 과정에서 내부적으로 JarVerifier 클래스를 통하여 인증에 대한 검증이 이뤄어진다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;];&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;InputStream&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getInputStream&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(jarEntry);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			 
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(is.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;read&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(buffer,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;buffer.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 테스트 결과 MATA-INF 폴더의 파일 내에 해당 엔트리의 인증값들은 있지만, &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 실제 파일이 존재하지 않을 경우 아래 예외가 발생한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 역시 위변조된 앱일 가능성이 크다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 물론 이 경우도 일반적인 안드로이드 폰에서는 설치조차 되지 않는다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(SecurityException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throw&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;ForgeryAPK&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;is.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;buffer&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(java.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;security&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;cert&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;Certificate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[])jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getCertificates&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;			
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(IOException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;err&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;Exception reading &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarEntry.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot; in &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
					&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;jarFile.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * 서명 깂을 SHA1 해쉬로 변경하여 Base64 로 만든 String 값으로 반환한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @param cert&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @throws CertificateEncodingException &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;certToSHA1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(Certificate&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;throws&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;CertificateEncodingException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;byte&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;[]&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certWith&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// X509 인증 정보를 ASN.1 DER 구조의 byte 배열로 반환한다. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;certWith&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;cert.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getEncoded&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;MessageDigest&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;md&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;// 인증 정보를 SHA1 해쉬로 변경. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;md&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;MessageDigest.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;SHA1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;md.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(certWith);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(NoSuchAlgorithmException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;DatatypeConverter.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;printBase64Binary&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(md.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;digest&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;());&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;

	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * 인증서 추출 예외상황.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 * @author ice3x2&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;	 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;extends&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Exception&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;final&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;long&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;serialVersionUID&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 9pt;&quot;&gt;6796836839897143903L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ErrType&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;mError;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;protected&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;newInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;errType,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;path,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Throwable&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;throwable)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ErrType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;toMessage&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(errType)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot; (&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;)&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkCertExtractionException&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; 	
					&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(throwable&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;)?&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException(message):&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;APKCertExtractionException(message,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;throwable);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkCertExtractionException.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;mError&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;errType;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;apkCertExtractionException;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;message,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;Throwable&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;throwable)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(message,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;throwable);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;APKCertExtractionException&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;message)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(message);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;		 * 에러 타입을 반환한다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;		 * @return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;		 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ErrType&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;getError&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;mError;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;enum&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ErrType&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 * 잘못된 APK 파일 포맷.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;WrongAPKFormat(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;Wrong APK file format.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 * APK 파일을 읽을 수 없음. &lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ReadFail(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;APK file read failed.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 * 잘못된 인증서. 파일에 대한 인증 정보가 존재하지 않는다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;WrongCert(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;Wrong certificate. Certificate verified failed.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;),&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 * 위변조가 의심되는 APK. 인증 정보 검증에 문제가 있다.&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 9pt;&quot;&gt;			 */&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;ForgeryAPK(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 9pt;&quot;&gt;&quot;Wrong certificate. This package is suspected with forgery apk.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;message;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;ErrType&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;value)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;value;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;protected&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 9pt;&quot;&gt;toMessage&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;(ErrType&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;errType)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 9pt;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;errType.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 9pt;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 9pt;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>Signaiture</category>
      <category>시그니처</category>
      <category>안드로이드</category>
      <category>안드로이드 보안</category>
      <category>앱 위변조</category>
      <category>인증</category>
      <category>인증정보</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/70</guid>
      <comments>https://yagnu.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 25 Mar 2015 06:20:36 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 바이너리 XML 의 구조.</title>
      <link>https://yagnu.tistory.com/69</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: 10pt;&quot;&gt; APK 파일의 압축을 풀면 classes.dex 파일과 그리고 String 과 drawable 과 같은 리소스 맵핑 정보를 담고 있는&amp;nbsp;&lt;b&gt;resources.arsc &lt;/b&gt;파일등과 AndroidManifest.xml 파일 외에 res 폴더 내에 여러 XML 파일등이 존재한다. 하지만 이 XML 파일은 우리가 흔히 아는 형식으로 되어있지 않다&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 왜 APK 파일 내부에 있는&amp;nbsp;AndroidManifast.xml 을 비롯한 XML 파일들은 우리가 알고 있는 XML 형식이 아닌걸까? 아마도 공간을 정약하고 런타임 환경에서 빨리 리소스 정보를 읽어들일 수 있도록 바이너리 타입으로 만들었을 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 안드로이드에서 사용하는 바이너리 타입의 XML 포맷에 대하여 아래 사이트에서 자세하게 설명하고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://justanapplication.wordpress.com/category/android/android-binary-xml/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; https://justanapplication.wordpress.com/category/android/android-binary-xml/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 위의 링크를 타고 들어가서 언급되는 내용을 보면 알겠지만, 안드로이드 바이너리 XML 의 구조는 잘 들여다보면 이해하기 쉽고 단순한 구조로 되어있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2509964455118E8B1B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2509964455118E8B1B&quot; width=&quot;320&quot; height=&quot;707&quot; filename=&quot;xml_chunk.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 위 그림에서 나온 구조를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;정리해 보자면...&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; &lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;1. Header&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 2byte. xml 바이너리의 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;사이즈를 &amp;nbsp;담고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2. StringPool&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 0x08 위치부터 시작한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;nbsp;XML 내부의 String 값들&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;에 대한 배열&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;을 갖고 있다. 외부에서 이 String 배열의 인덱스 값을 참고하여 접근한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3. XMLResouceMap&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 리소스 맵에 대한 정보를 갖고 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Namespace &amp;nbsp;- EndNamesapce&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- Start 와 end 타입으로 분류된다&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- Start 와 End 사이에 있는 Element 들은 자식 노드(Element)가 된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;5&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Element&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 엘리먼트. 내부에 Attribute 에 대한 배열을 갖고 있다. &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- NameSpace 와 마찬가지로 Start 와 End 타입으로 분류되고 그 사이에는 자식 노드(Element)가 들어간다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 와 같은 구조로 간단하게 되어있다.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 중요한 점은 Namespace 와&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;Element 에 대한 Chunk 는 Start 와 End 값을 갖고 있으며 그 사이에 들어가는 값들은 자식 노드가 된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 또, 각 data 들의 String 값은 integer 타입으로 되어 있는데,&amp;nbsp;StringPool 내부의 String 배열에 대한&amp;nbsp;인덱스 값을 나타내기 때문이다.&amp;nbsp;즉 StringPool 의 배열로부터 인덱스 값을 이용하여 실제 String 데이터를 찾을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 구조를 좀 더 확실하게 이해하기 위하여&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;a href=&quot;https://justanapplication.wordpress.com/category/android/android-binary-xml/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; https://justanapplication.wordpress.com/category/android/android-binary-xml/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 에 나온 설명을 이용하여 파서를 만들어 보았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 코드 주소 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;a href=&quot;https://github.com/ice3x2/AndroidXMLReader&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;https://github.com/ice3x2/AndroidXMLReader&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;b&gt; 퍼포먼스는 전~~~혀 고려하지 않고, 그냥 구조를 확인하기 위하여 코드만 작성했는데 정신차려보니 파서가 완성되어 있었다. ㅡ , , ㅡ;;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 애초에 실제 구조만 확인하려고 만든 것이기 때문에&amp;nbsp;테스트 케이스 같은 것은 안중에도 없었다. 혹시나 버그가 있을지도 모르니&amp;nbsp;참고하기 바란다... &amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;물론 앞으로 계속 개선하여 좀 쓸만한 모듈로 만들 생각이다;;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 어쨌든 이 코드는 안드로이드 APK 내부의 바이너리 타입&amp;nbsp;XML &amp;nbsp;구조를 확인하는데 여러분들께 큰 도움이 될 것 이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;이 것을 이용하여 JAVA 코드 상에서 APK 내부의 AndroidManifest.XML &amp;nbsp;내용을 읽어오는 방법은 다음과 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;AndroidXML&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;androidXML&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;AndroidXMLReader.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;readAndroidManifest&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;test.apk&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Element&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;rootElement&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;androidXML.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getRootElement&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;rootElement.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;findAttribute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;package&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;versionName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;rootElement.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;findAttribute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;versionName&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;versionCode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;rootElement.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;findAttribute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;versionCode&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Element[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;userPermissions&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;rootElement.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;findElements&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;uses-permission&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Package : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;packageName);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Version name : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;versionName);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Version code : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;versionCode);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;uses-permission&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Element&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;element&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;userPermissions)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Attribute&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;attribute&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;element.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getAttribute&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;\t&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;attribute.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot; : &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;attribute.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이 시리즈의 다음 포스팅에선&amp;nbsp;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;resources.arsc &amp;nbsp;의 내부 구조와 파싱 방법에 대하여 알아보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/69</guid>
      <comments>https://yagnu.tistory.com/69#entry69comment</comments>
      <pubDate>Mon, 23 Mar 2015 00:12:46 +0900</pubDate>
    </item>
    <item>
      <title>Android NDK, JNI 내부에서 HTTP 통신 사용하기.</title>
      <link>https://yagnu.tistory.com/67</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;지난 포스팅 :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.dev.re.kr/65&quot; style=&quot;font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(0, 85, 255);&quot;&gt;안드로이드 스튜디오에서 NDK 로 C++ 빌드하기 (Hello World 예제)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;이번시간에는 NDK 를 이용하여 HTTP 통신하는 법을 알아보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;C/C++ 에서 HTTP 를 통신하기 위한 가장 흔한(?) 방법은 curl 을 사용하는 것이다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 그러기 위해서 curl 라이브러리를 android 에서 동작 하도록 컴파일 해야 하는데, 이는 삽질을 동반한&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;작업들을 해야만 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 그래서 이미 빌드된 정적 라이브러리를 사용하는 효율적이고 빠른 방법에 대하여 알아보겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 우선 android 용으로 각각의 CPU 별로 깔끔하게&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;빌드된 정적 라이브러리(.a) 파일을 구해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 빌드된 curl 을 구하기 위하여&amp;nbsp;github 와 구글을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;한참 검색해 보다가 문득 cocos2d-x 에서 curl 을 사용하던 것을 떠올렸다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 그리하여&amp;nbsp;cocos2d-x 의&amp;nbsp;최신버전 패키지를 다운 받고, 아주 이쁘게 빌드된 정적 라이브러리를 얻는데 성공 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 그 과정은 다음과 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(153, 0, 76);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(153, 0, 76);&quot;&gt;&amp;nbsp;cocos2d-x 다운로드. &amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.cocos2d-x.org/download&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(153, 0, 76);&quot;&gt;http://www.cocos2d-x.org/download&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(153, 0, 76);&quot;&gt;- 압축을 풀고 external/curl/prebuilt/android 폴더에 있는 디렉토리와&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(153, 0, 76);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(153, 0, 76);&quot;&gt;external/curl/include 에 있는 파일들을 한 곳에 모은다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(153, 0, 76);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(153, 0, 76);&quot;&gt;external/curl/prebuilt/ 의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(153, 0, 76);&quot;&gt;Android.mk 파일의 내용을 현재 프로잭트의 경로에 맞게 수정하여 프로젝트 jni 폴더의 Android.mk 에 복사한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;731&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; font-size: 12px; width: 731px; background: rgb(136, 0, 0);&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 730px; height: 24px; border: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;주의!&amp;nbsp;현재까지는 cocos2d-x 내부에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;armeabi, armeabi-v7a, x86,&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;이 세가지만&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 9pt;&quot;&gt;&amp;nbsp;빌드되어 있다&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;. 만약 x86_64 옵션을 사용하여&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;NDK 를 빌드한다면 오류가 발생한다. 너무 당연한 이야기지만 64 비트 호환&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 9pt;&quot;&gt;CPU 를 쓰는 안드로이드 디바이스 에서도 x86 이나&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(255, 255, 255);&quot;&gt;armeabi 옵션만 주고 빌드한 라이브러리 파일도 모두 읽을 수 있으니 안심하자.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 여기까지가 cocos2d-x 에서 미리 빌드된 curl 정적 라이브러리를 얻는 과정이다. 이렇게만 써 놓으면 다소 복잡해 보일 수 있으니 이제부터 예제와 함께 설명하겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;1. &amp;nbsp;우선 cocos2d-x 에서 가져온 미리 빌드된 curl 정적 라이브러리와 헤더를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;압축한 아래의 파일을 다운로드 받는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/250D9A4F550AF03D2E&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;curl.zip&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;(위 아이콘을 클릭하여 다운받는다,)&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2. &amp;nbsp;jni 폴더 내부에 curl 폴더를 만들고 그 안에 방금 다운 받은 파일을 압축 풀어서 붙여넣는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 213px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/274FEF4C550AF0F50F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F274FEF4C550AF0F50F&quot; width=&quot;213&quot; height=&quot;187&quot; filename=&quot;스크린샷 2015-03-20 오전 12.51.59.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;. &amp;nbsp;Android.mk 파일 상단에 다음과 같은 라인을 추가한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_PATH := $(call my-dir)                &lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;# --------------- crypto ---------------&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;include $(CLEAR_VARS)&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE := crypto&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE_FILENAME := crypto&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_SRC_FILES := curl/$(TARGET_ARCH_ABI)/libcrypto.a&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_EXPORT_LDLIBS := -lz&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;include $(PREBUILT_STATIC_LIBRARY)&lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;# --------------- ssl ---------------&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE := ssl&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE_FILENAME := ssl&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_SRC_FILES := curl/$(TARGET_ARCH_ABI)/libssl.a&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;include $(PREBUILT_STATIC_LIBRARY)&lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;# --------------- libcurl ---------------&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;include $(CLEAR_VARS)&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE := curl&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_MODULE_FILENAME := curl&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_SRC_FILES := curl/$(TARGET_ARCH_ABI)/libcurl.a&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/curl/include&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_STATIC_LIBRARIES += ssl&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;LOCAL_STATIC_LIBRARIES += crypto&lt;/span&gt;
&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;include $(PREBUILT_STATIC_LIBRARY)&lt;/span&gt;

&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;# --------------- your options ---------------&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;# ...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(204, 204, 204);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;font color=&quot;#cccccc&quot;&gt;LOCAL_STATIC_LIBRARIES := curl&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#cccccc&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#cccccc&quot;&gt;# ...&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0);&quot;&gt;. &amp;nbsp;마지막으로 curl 을 사용하려는 C/C++&amp;nbsp;소스파일에 &amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;#include &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&amp;lt;curl/curl.h&amp;gt;&lt;/span&gt;&lt;/b&gt; 으로 include&amp;nbsp;해주면 된다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; http 통신을 하기 위한 libcurl 의 사용법은 예제 페이지(&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;a href=&quot;http://curl.haxx.se/libcurl/c/example.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;http://curl.haxx.se/libcurl/c/example.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;)를 참고하거나&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;, 구글링으로&amp;nbsp;쉽게 찾을 수 있다. (이 것은 시간이 나면 따로 정리하겠다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;아래는 http 통신 예제 코드이며, &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;예제 프로젝트를 다운받으면 직접 실행해 볼 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;curl/curl.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Curl 의 Response 처리.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;responseWriter&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*data,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;length,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;size_t&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bytes,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;std::string&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*writerData)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(writerData&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(36, 144, 157);&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;size&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;length&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;bytes;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;writerData-&amp;gt;append(data,size);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;size;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;JNIEXPORT&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;JNICALL&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;Java_kr_re_dev_NdkHttpExample_MainActivity_getHTML&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(JNIEnv&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*env,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;obj,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;url)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURL&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*curl;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLcode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;res;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;std::string&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;response;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*addr&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;GetStringUTFChars(url,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_init();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(curl)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_URL,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;addr);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 웹서버에서 모바일 접속으로 인식할 수 있도록 임의의 User Agent 값을 넣었다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_USERAGENT,&lt;/span&gt;
        &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Mozilla/5.0 (Linux; Android 4.4.2; Nexus 5 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// SSL 관련 옵션.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 3번째 인자값이 0일 경우 인증서 진위 여부에 상관 없이 접속. 기본값 1.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_SSL_VERIFYPEER,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 3번째 인자 값이 0일 경우 인증서 이름에 상관없이 접속. 기본값 2.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_SSL_VERIFYHOST,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// redirecte 사용.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_FOLLOWLOCATION,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// post 전송시 사용.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//curl_easy_setopt(curl, CURLOPT_POSTFIELDS, &quot;name=daniel&amp;amp;project=curl&quot;);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// response 의 response 를 처리하는 함수 설정.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_WRITEFUNCTION,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;responseWriter);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 세 번째 인자에는 responseWriter 함수로 처리될 response 객체의 레퍼런스가 들어간다.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_setopt(curl,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLOPT_WRITEDATA,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;response);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;res&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_perform(curl);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 실패할 경우 메세지 출력.&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(res&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CURLE_OK)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;response&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_strerror(res);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;curl_easy_cleanup(curl);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;env-&amp;gt;NewStringUTF(response.c_str());&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;참고용 예제 프로젝트.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/244F4E41550B099825&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;NDKHttpExample.zip&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/275FBC46550B09B023&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F275FBC46550B09B023&quot; width=&quot;640&quot; height=&quot;1117&quot; filename=&quot;device-2015-03-20-023151.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>Android</category>
      <category>HTTP</category>
      <category>libcurl</category>
      <category>ndk</category>
      <category>ndk http</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/67</guid>
      <comments>https://yagnu.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 20 Mar 2015 01:11:54 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 스튜디오에서 NDK 로 C++ 빌드하기 (Hello World 예제)</title>
      <link>https://yagnu.tistory.com/65</link>
      <description>&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;아래 내용은 mac 기준으로 작성 되었습니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;1. &lt;/b&gt;안드로이드 개발자 사이트에서 NDK 를 받아야 하지만, STL 과 Boost 를 사용하기 위해서 별도의 작업을 더 해야한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 하지만, &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;CrystaX&lt;/span&gt; 를 사용하면 쉽게 적용할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;아래 사이트에서 최신 버전의&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;CrystaX&lt;/span&gt; 를 다운받고 압축을 푼다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 용량이 큰 것으로 받는다. 압축을 풀면 5GB 가 넘는다...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;https://www.crystax.net/en/download&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.crystax.net/en/download&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/256E9742550A12FC05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F256E9742550A12FC05&quot; width=&quot;723&quot; height=&quot;462&quot; filename=&quot;스크린샷 2015-03-19 오전 9.05.28.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;2. &lt;/b&gt;프로젝트를 생성한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23204C41550A133C23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23204C41550A133C23&quot; width=&quot;723&quot; height=&quot;434&quot; filename=&quot;스크린샷 2015-03-19 오전 8.57.22.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;3.&lt;/b&gt; 프로젝트의 app/src/main 폴더 안에 jni 폴더를 생성한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;4.&lt;/b&gt; 아래&amp;nbsp;과정은 최초 한 번만 진행하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(아래 내용은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;a href=&quot;http://blog.burt.pe.kr/javah%EB%A5%BC-androidstudio%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;http://blog.burt.pe.kr/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;에서 참고하였습니다&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- javah 설정하기.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; (1) &amp;nbsp;AndroidStudio -&amp;gt; Preferences 에서 External Tools 를 검색.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;(2) &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;External Tools 메뉴&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;좌측 하단의 + 버튼을 누른다. Edit Tool &amp;nbsp;다이얼로그 창이 출력된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; (3) &amp;nbsp;모든 체크 박스를 체크하고,&amp;nbsp;각 입력창에 다음과 같이 적는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; Name : javah &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;Group : NDK &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; Description : javah&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;(모든 체크박스 체크)&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Program : /usr/bin/javah (javah 의 실행 경로를 넣는다.)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; Parameters : &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;-classpath $Classpath$ -v -jni $FileClass$ &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; Working directory :&amp;nbsp;$SourcepathEntry$/../jni&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; OK 버튼 클릭.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- ndk-build&amp;nbsp;설정하기. &amp;nbsp;마찬가지로 위 과정의 (1)(2)(3) 번을 반복하고, 출력되는 Edit Tool 다이얼로그 창에 다음과 같이 적는다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;Name :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;Group : NDK &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; Description :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;(모든 체크박스 체크)&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Program : &amp;nbsp;(1번 과정에서 받은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;crystax 의 경로)/ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; Parameters :&amp;nbsp; (공란)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; Working directory :&amp;nbsp;$ProjectFileDir$/app/src/main&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; OK 버튼 클릭.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;ndk-build 는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;AndroidStudio -&amp;gt; Preferences 의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;keymap 에서 단축키를 설정하면 편하게 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;- &amp;nbsp;위와 똑같은 방법으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build clean 을 만들어 준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;Name&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;항목을&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build clean ,&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;Parameters &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;항목에 &lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;clean&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;을 추가해 주고 나머지는 위&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 설정과 동일하게 입력.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;Name :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; clean &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;Group : NDK &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; Description :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp;clean&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;(모든 체크박스 체크)&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Program : &amp;nbsp;(1번 과정에서 받은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;crystax 의 경로)/ndk-build&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Parameters : &amp;nbsp;clean&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; Working directory :&amp;nbsp;$ProjectFileDir$/app/src/main&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; OK 버튼 클릭.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;5.&lt;/b&gt; 다음과 같은 클래스를 생성한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;HelloNDK.java :&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;HelloNDK&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;loadLibrary&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;native&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;getHelloNDKString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;안드로이드 자바코드에서&amp;nbsp;NDK 라이브러리&amp;nbsp;사용을 위하여&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;build.gradle&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;파일을 다음과 같이 편집한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;HelloNDK 클래스에 &amp;nbsp;System.loadLibrary 메소드를 통하여 입력한 모듈 이름을&amp;nbsp;&amp;nbsp;moduleName 에&amp;nbsp;동일하게 입력해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;build.gradle:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;android&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//...생략&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;defaultConfig&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
       &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//...생략&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ndk&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;moduleName&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;hello&quot;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sourceSets.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;main&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jni.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;srcDirs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; 
            &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jniLibs.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;srcDir&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'src/main/libs'&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; clean 또는&amp;nbsp;cmd + F9 (윈도우에서는 control + F9) 를 통하여 빌드한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;6.&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;앞의&amp;nbsp;4번의 과정을 정상적으로 진행하였다면 HelloNDK 클래스를 선택하고 마우스 오른쪽 버튼을 눌렀을 때 아래와 같이 나온다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 9pt; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt; (아래 스샷에서는&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 9pt;&quot;&gt;ndk-build clean 항목이&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 9pt;&quot;&gt;&amp;nbsp;실수에 의해서 빠져있다. 참고바람)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; 메뉴 박스에서 NDK-&amp;gt;javah 를 선택한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2703FA50550A1B7132&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2703FA50550A1B7132&quot; width=&quot;723&quot; height=&quot;739&quot; filename=&quot;스크린샷 2015-03-19 오전 9.35.45.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Run 콘솔 창에 다음과 같은 결과가 출력된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;만약 5번 과정에서 빌드를 하지 않았다면 에러가 출력될 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 655px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2778E148550A1BA710&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2778E148550A1BA710&quot; width=&quot;655&quot; height=&quot;305&quot; filename=&quot;스크린샷 2015-03-19 오전 9.42.54.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;src/main/jni 폴더에&amp;nbsp;JNI 인터페이스 파일이 생성된 것을 확인할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2470494C550A1C2B1D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2470494C550A1C2B1D&quot; width=&quot;723&quot; height=&quot;306&quot; filename=&quot;스크린샷 2015-03-19 오전 9.44.13.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;7.&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; jni 폴더에 HelloNDK.cpp , Android.mk, Application.mk 파일을 만들어 준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 258px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25154F38550A28670B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25154F38550A28670B&quot; width=&quot;258&quot; height=&quot;94&quot; filename=&quot;스크린샷 2015-03-19 오전 10.37.16.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;9. HelloNDK.cpp&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;파일을 다음과 같이 편집 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; javah 를 통하여 자동으로 생성되었던 kr_re_dev_hellondk_HellpNDK.h 파일을 &amp;nbsp;include 하고,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; 그 곳에 정의된 함수를 구현한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; JNIEnv 클래스에 대한 설명은 다음 포스팅에서 자세히 다루겠다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;HelloNDK.cpp:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &quot;kr_re_dev_hellondk_HelloNDK.h&quot;&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;JNIEXPORT&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;JNICALL&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;Java_kr_re_dev_hellondk_HelloNDK_getHelloNDKString&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(JNIEnv&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*env,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jobject&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;obj)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;     &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;jstring&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(*env).NewStringUTF(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Hello World!!!&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
     &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;str;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;9. Android.mk&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;파일을 다음과 같이 편집. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; LOCAL_SRC_FILES 변수를 통하여 컴파일될 파일의 경로를 정해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Android.mk:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;LOCAL_PATH&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(call&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;my-dir)&lt;/span&gt;                   &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 현재 파일의 설정된 경로.&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;include&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(CLEAR_VARS)&lt;/span&gt;                          &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# LOCAL 관련 변수를 clear&lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;LOCAL_MODULE&lt;/span&gt;        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;hello&lt;/span&gt;                   &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 모듈 이름, 생성되는 파일 이름을 결정.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;LOCAL_CFLAGS&lt;/span&gt;        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-std=c++&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;14&lt;/span&gt;              &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 컴파일 플래그. 여기서는 c++14 사용.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;LOCAL_SRC_FILES&lt;/span&gt;     &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HelloNDK&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;cpp&lt;/span&gt;            &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 컴파일 되는 파일 리스트.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;include&lt;/span&gt; &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(BUILD_SHARED_LIBRARY)&lt;/span&gt;                &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 동적 라이브러리로 사용.&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 현재 사용하지 않는 것들은 주석처리.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#LOCAL_CPP_EXTENSION  := .cpp&lt;/span&gt;                  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# c++ 소스의 확장자 정의, 기본 cpp.  &lt;/span&gt;
                                               &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 임의 변경 가능&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#LOCAL_C_INCLUDES :=                           &lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 헤더 파일의 include 경로.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#LOCAL_LDLIBS     :=                           # 연결하고자 하는 링크 옵션&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#LOCAL_STATIC_LIBRARIES                        # 링크할 정적 라이브러리&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#LOCAL_SHARED_LIBRARIES                        # 링크할 정적 라이브러리&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#include $(BUILD_STATIC_LIBRARY)               # 정적 라이브러리로 사용&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Application.mk:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 12pt; line-height: 16.25px;&quot;&gt;
&lt;/span&gt;&lt;/font&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 모듈 이름.&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;APP_MODULES&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;hello&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;font-size: 12px; line-height: 18px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 플랫폼 설정&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# ANDROID_PLATFORM := android-9&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# all 로 설정하면 안드로이드에서 사용되는 모든 종류의 cpu 로 빌드.&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;# 앱과 디바이스 특성별로 설정해 주는 것이 좋다. &lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;APP_ABI&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;all&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;#arm64-v8a armeabi armeabi-v7a mips x86 x86_64&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt; line-height: 16.25px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;b&gt;10.&lt;/b&gt; 이제 NDK 파일을 빌드한다. &amp;nbsp;앞서 4번 항목에서 정의한 ndk-build 기능에 단축키를 정의해 놓으면 필요한 순간마다&amp;nbsp;편리하게 빌드할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 648px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/261FEC3F550A30FC20&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F261FEC3F550A30FC20&quot; width=&quot;648&quot; height=&quot;877&quot; filename=&quot;스크린샷 2015-03-19 오전 11.12.55.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;정상적으로 빌드 되었을 때 콘솔에 출력되는 결과는 다음과 같다.&lt;/span&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21334945550A315A0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21334945550A315A0C&quot; width=&quot;723&quot; height=&quot;520&quot; filename=&quot;스크린샷 2015-03-19 오전 11.15.01.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;또한 /src/main/libs 경로에 각 cpu 타입별로 빌드된 동적 라이브러리가 생성된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;c++14 로 빌드할 경우 gnu stl 라이브러리가 기본적으로 포함되는데 용량이 1.1Mb 로 후덜덜 하다. (boost까지 추가한다면.... )&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;그렇기 때문에 실제 배포시&amp;nbsp;Application.mk 파일에서 안드로이드 디바이스에서 주로 사용되는 CPU로 빌드하도록 설정하여 용량을 줄이자.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;특별한 기능 없다면 아래와 같이&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 9pt; color: rgb(0, 0, 0);&quot;&gt;APP_ABI&lt;/span&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 9pt; color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 9pt; color: rgb(0, 0, 0);&quot;&gt;:=&lt;/span&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 9pt; color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;line-height: 16.25px; font-size: 9pt; color: rgb(0, 0, 0); font-style: italic;&quot;&gt;armeabi-v7a &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); line-height: 16.25px; font-size: 10pt;&quot;&gt;만&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;사용 하거나, x86 애뮬레이터 사용시 자신의 PC 환경에 따라서 x86 이나 x86_64 를 추가할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 314px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2347B742550A31D934&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2347B742550A31D934&quot; width=&quot;314&quot; height=&quot;415&quot; filename=&quot;스크린샷 2015-03-19 오전 11.16.28.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;11.&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp;이제 빌드된 NDK &amp;nbsp;라이브러리인 hello 모듈을&amp;nbsp;사용해보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 지금까지의 여러 단계의 설정 방법에 비하여 사용방법은 매우 간단하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; native 로 선언되고&amp;nbsp;&amp;nbsp;c++ 함수와 연결된 메소드만 호출해주면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;지금까지 만든 NDK 모듈의 동작 여부를 간단하게 확인하기 위하여 Activity 클래스의 onCreate 이벤트 메소드에 다음과 같은 코드를 추가하였다. getHelloNDKString 으로 부터 가져온 스트링 값을 토스트로 출력하도록 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;  &lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Bundle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;savedInstanceState)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(savedInstanceState);&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setContentView(R.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;layout&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;activity_main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;

        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Context&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;context&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getApplicationContext();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HelloNDK&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloNDK&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HelloNDK();&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Toast.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;makeText&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(context,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;helloNDK.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getHelloNDKString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(),&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Toast.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;LENGTH_LONG&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;결과&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 714px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2112AC4A550A34AE21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2112AC4A550A34AE21&quot; width=&quot;714&quot; height=&quot;1236&quot; filename=&quot;device-2015-03-19-111108.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>Android</category>
      <category>androidstudio</category>
      <category>ndk</category>
      <category>ndk stl</category>
      <category>개발</category>
      <category>안드로이드 스튜디오</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/65</guid>
      <comments>https://yagnu.tistory.com/65#entry65comment</comments>
      <pubDate>Thu, 19 Mar 2015 11:30:14 +0900</pubDate>
    </item>
    <item>
      <title>맥미니 쿨러 직접 교체하기.</title>
      <link>https://yagnu.tistory.com/64</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp; 컴퓨터를 거의 24시간 내내 틀어놓고 살아가는데, 얼마 전부터 조용하던 팬이&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;공사장 중장비와 닮은 소리를 내기 시작했다. 낮에는 그러려니 하고 소리를 참을 수 있었지만, 밤에는 무시무시한 쿨러 소음 덕분에 좀처럼 잠을 이룰 수 없었다. 슬립 모드로 해놓아도 이따금 돌아가는 쿨러 소리에 잠을 깰때가 많았고, 결국 잠들기 전에 컴퓨터를 끄고 아침에 일어나서 다시 켜야 하는 귀찮은 작업을 반복하다가 결국 수리를 맡기려다 생각보다 비싼 비용에 질겁하여 직접 수리를 하기로 하였다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 맥미니용 쿨러를 구해야 하는데, 국내에서 구하기란 쉽지 않고 역시 우리의 '알리 익스프레스' 를 이용하기로 했다. 배송은 운이 좋아 2주&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;밖에 안 걸렸다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/220AE63454E155B928&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F220AE63454E155B928&quot; width=&quot;723&quot; height=&quot;295&quot; filename=&quot;스크린샷 2015-02-16 오전 11.27.23.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이 정도면 칭찬해줘도 괜찮을듯한 가격이다. &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;(주의할 점은 너무 싸거나 판매자 등급이 낮으면 짭퉁이나 불량을 판매하는 것일 수도 있으니 주의할 것!! 비상식적으로 싼 물건은 피하자.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/243FD35054E153DF13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F243FD35054E153DF13&quot; width=&quot;700&quot; height=&quot;524&quot; filename=&quot;IMG_20150215_081437.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;바다 건너 2주만에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;도착한 쿨러. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2324273C54E1592F0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2324273C54E1592F0A&quot; width=&quot;700&quot; height=&quot;524&quot; filename=&quot;IMG_20150215_081425.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;맥 미니 뚜껑을 열어보았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;저 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;빨간색 동그라미&lt;/span&gt;가 되어 있는 나사만 제거하면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;우선 나사를 제거하기 전에 고무 캡을 빼야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;연두색 동그라미 부분의 나사는 제거할 필요 없다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;이 부분은 나사로&amp;nbsp;완전히 고정된&amp;nbsp;것이 아니라&amp;nbsp;고무링으로만 쉽게 빠지지 않게만 되어 있는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;아마도 진동 방지를 위하여 이렇게 하지 않았을까 하는 생각이 든다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2302C84954E153310A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2302C84954E153310A&quot; width=&quot;700&quot; height=&quot;524&quot; filename=&quot;IMG_20150215_081950.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;특이하게도 별 모양의 렌치를 사용하여 나사를 풀 수 있도록 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;별 모양의 렌치는 없으므로 롱노우즈 플라이어를 이용하여 나사를 풀었다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;머리 부분을 있는 힘껏 잡은 다음에 돌리면 쉽게 풀린다. 단, 너무 힘을 줘서 실수로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;주변 부품을 망가뜨리지 않도록 주의하자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;(롱노우즈 플라이어가 없으면 니&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;퍼나 비슷한 것도 괜찮다.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;이렇게 나사 두 개를 제거하고 나머지 풀지 않은 나사 부분에 힘을 살짝 줘서&amp;nbsp;쿨러를 위로 들면 빠진다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2477555054E1534334&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2477555054E1534334&quot; width=&quot;700&quot; height=&quot;524&quot; filename=&quot;IMG_20150215_082305.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;케이블을 제거한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;그냥 위로 들면 쑥~ 빠진다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;케이블 연결도 마찬가지로 방향과 모양 맞춰서 위로&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;넣으면 들어간다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25419E4E54E1535007&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25419E4E54E1535007&quot; width=&quot;700&quot; height=&quot;524&quot; filename=&quot;IMG_20150215_082901.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;쿨러가 완전히 제거된 모습.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;그동안 쌓인 먼지들을 깔끔하게 제거하였다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2304213754E15B1C04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2304213754E15B1C04&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20150215_090041.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;새 쿨러로 교체한 모습. 조립은 분해의 역순으로 하면 된다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;먼저 케이블을 결합한다. 커넥터는&amp;nbsp;방향과 모양을 맞춰서 그냥 위에서 누르면&amp;nbsp;들어간다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;(이 과정에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;혹시 조립 도중에&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;케이블이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;빠질까 봐 마스킹 테잎을 작게 잘라서 커넥터 위에 붙였다. 쿨러 우측 상단에 흰색 종이 같이 보이는 부분.)&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;그리고 쿨러를 제 위치에 놓아야 하는데 위 사진의&amp;nbsp;연두색 동그라미 친 부분에 튀어나온 나사 머리에 구멍을 잘 맞춰서 끼운다. 마지막으로 나사를 꽉 조여주고 나사를 풀어주기 전에 제거했었던 고무캡을 다시 끼워주면 완료!&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;이제 전원을 넣어주고 쿨러가 돌아가는 것을 확인해 보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24743F3854E15A5E32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24743F3854E15A5E32&quot; width=&quot;723&quot; height=&quot;395&quot; filename=&quot;스크린샷 2015-02-15 오전 9.29.42.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;쿨러를 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;교체하고나서 아무 소리도 안 나길래 불안한 마음에 Macs Fan Control 이라는 앱을 이용하여 현재 RPM 을 확인해 보았다. 2000~3000RPM 대에서는 마치 쿨러가 고장난 것 처럼 아무 소리가 나지 않다가 임의로 5500RPM 으로 올려주면 이제야 좀 시끄러운 소리가 났다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;소음도 잡고 돈도 굳고 대만족.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13.3333330154419px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>기타 취미/DIY</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/64</guid>
      <comments>https://yagnu.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 16 Feb 2015 12:01:59 +0900</pubDate>
    </item>
    <item>
      <title>프루사 멘델 i3 3D 프린터 구입, 조립기.</title>
      <link>https://yagnu.tistory.com/63</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2473AF375468D1E30B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2473AF375468D1E30B&quot; width=&quot;723&quot; height=&quot;448&quot; filename=&quot;스크린샷 2014-11-17 오전 1.31.48.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;알리 익스프레스에서 &amp;nbsp;3D 프린터를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;구매하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 처음에는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;옥션에서 판매하는 프린터봇을 구매하려고 했는데, 아무래도 수리를 하거나 업그레이드를 위한&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;파트를 교체하는 데 어려움이 있을 것 같고&amp;nbsp;인쇄물 크기가 만족스럽지 않아서 이런 험난한 길- 푸르사 멘델 조립&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;을 선택하게 되었다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 우선 제품의 신뢰성&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;을 검증하기 위하여 상품평을 찾아보는데,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;여러 나라에서 구매한 사용자들이 꽤 많은 피드백을 남겨 놓았고 그 것들을 종합해보면 다음과 같았다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;- 배송 빠르다&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;- 베어링이 뻑뻑하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;- 안 맞는 부폼이 조금&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;- 같이 제공되는 조립 설명 동영상은 중국어다. 하지만 보면서 쉽게 따라 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;- 그래도 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 전반적인 상품 피드백을 보면 프린터 조립에 어느 정도 수준 이상의&amp;nbsp;난이도가 필요하다는 것을 알 수 있었지만, 전반적으로 평이 좋으므로&amp;nbsp;의심 없이 구매하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 배송은 Fedex 를 통해서 이루어졌는데, 물품 구입후 5일만에 받을 수 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 하지만 세금이...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 571px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2144BE345468DC7302&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2144BE345468DC7302&quot; width=&quot;571&quot; height=&quot;559&quot; filename=&quot;스크린샷 2014-11-17 오전 2.16.39.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 14pt;&quot;&gt;아... 앙대....&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 169px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2430CE385468DBAF05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2430CE385468DBAF05&quot; width=&quot;300&quot; height=&quot;169&quot; filename=&quot;b0134627_50fc05448d5b9.gif&quot; filemime=&quot;image/gif&quot; style=&quot;width: 300px; height: 169px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp;결국 우리돈으로 총&amp;nbsp;47만 5천원정도를 쓰게 되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214CAA505468E06727&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214CAA505468E06727&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_192101.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; Fedex 를 통하여&amp;nbsp;회사로 배달시킨 3D 프린터. 무게는 대략 15kg 되는 것 같았다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;line-height: 24px; color: rgb(0, 0, 0); font-size:12pt; background-color: transparent;&quot;&gt;회사는 강남에 있고 집은 광명에 있는데, 이것을 들고 오기 위하여 계단이 많은 지하철 대신 2시간 동안&amp;nbsp;버스를 타고 왔다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2657B2505468E06918&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2657B2505468E06918&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_220334.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 박사를 개봉한모습.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;나름 완충재가 잘 되어있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 좌측의 두 개의 박스에&amp;nbsp;PLA 필라멘트가 들어있다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/265E96505468E06F10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F265E96505468E06F10&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_222857.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;번들 PLA 필라멘트.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;내 기준에서&amp;nbsp;가장 촌스러운 색 두 개로 잘 골라줬다.ㅎㅎㅎ&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226001505468E06A0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226001505468E06A0F&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_220558.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 첫 번째 부품 박스 개봉!!&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 많은 부품들을&amp;nbsp;접한 순간 나도 모르게 '헉!'하는 나지막한 탄성이 입 밖으로 새어나왔다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 배송하는 과정에서 이 무거운 것이 이리저리 굴러다닌 듯하다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 그래도 완충재의 두께가&amp;nbsp;빵빵한 편이라서 다친 부품은 없었다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/234FFB505468E06C22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F234FFB505468E06C22&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_220606.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;첫 번째 부품박스를 꺼내면&amp;nbsp;두 번째 부품 박스가 등장한다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;이것을&amp;nbsp;열면 이렇게 에어캡으로 포장되어있는 볼트 너트와 함께&amp;nbsp;육각렌치와 같은&amp;nbsp;공구류 등이 등장한다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/216679505468E07108&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F216679505468E07108&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_223215.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 가장 아래 부품박스에는&amp;nbsp;아크릴 프레임 부품과&amp;nbsp;히트베드, 그리고 히트베드 위에 올려서 사용하는 유리판이&amp;nbsp;들어있다. 참고로 저 히트베드는 온도가 그다지&amp;nbsp;높이 올라가지 않는다. 온도를 최대로 올렸을 때 70도에서 80도 사이를 왔다 갔다 한다.아크릴 파트들은&amp;nbsp;조립 시 분홍색으로 된 반투명 보호지를 뜯어야 하므로 불편하다. (심지어 히트베드에 케이블을 연결할 때는 납땜질을&amp;nbsp;해야 한다.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/224FFC505468E07222&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F224FFC505468E07222&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141104_224408.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 같이 들어있는 조립 공구들.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 육각렌치가 가장 많이 쓰이며 줄자는 거의 쓰이지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 핀셋은 인쇄하는 과정에서 많이 쓰인다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;이제, 동봉된&amp;nbsp;DVD 의 동영상 자료와 PDF 파일과 그림 등을 보며 조립을 시작하는데, 동영상과 Repretier Host 설정 관련 메뉴얼만 중국어로 되어있다. 그나마 동영상은 보고 따라만 하면 되기 때문에 언어가 중국어라도 이해하는 데는 문제없다. 다만, Y 축(히트베드가 올라는 곳) 에 벨트를 연결하는 것에 대한 설명과 일부 순서가 바뀌었는데 이는 PDF로 되어있는 조립 설명서를 참고하면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2468DA505468E07406&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2468DA505468E07406&quot; width=&quot;723&quot; height=&quot;964&quot; filename=&quot;IMG_20141105_004449.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;조립 첫째 날. 퇴근 후 밥을 먹으면 취침시간까지 남은 시간은 거의 3시간밖에 없으므로 조립 진도가 매우 더디었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24500A505468E08424&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24500A505468E08424&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141105_081214.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;아크릴 부품은 이런 식으로 연결한다. 나름대로 튼튼해 보인다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/254368505468E07634&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F254368505468E07634&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141105_074745.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;X좌표 우측을 담당하는 부품이다. Z 축 이동을 위한 볼 베어링이 포함되어 있는데, 레일 역할을 하는 쇠막대기가 들어간다. 이 녀석은 뽑기 운이 상당히 필요한 놈으로 본인&amp;nbsp;같은 경우에는 레일(쇠막대기) 를 베어링의 구멍에&amp;nbsp;끼우는 과정에서 3개의 볼이 빠져버렸다. ㅡ , ㅡa 게다가 많이 뻑뻑해서 기름칠을 여러번 해줘야만 했다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/234AEA505468E0892A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F234AEA505468E0892A&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141106_215427.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;조립 둘째 날. Z 축을 담당하는 모터를 달고, Y 축이 완성되었다. 그리고&amp;nbsp;노즐이 달린 모듈이 완성되었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;노즐 모듈에서 부품 나사 구멍이 조금 어긋나는 곳이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;한 곳&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;있어서 고생 좀 했다. 힘으로 해결했다가 아크릴이 &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;뒤틀리는 것을 보고 억지로 끼워맞춘 나사를&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;제거해 버리고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;나머지 구멍의 나사들을 육각렌치로 있는 힘껏&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;조여서 안정적으로 고정시켰다&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;. 참, 나사를 유각렌치로 있는 힘껏 조이면 렌치가 들어가는 육각형 모양의 홈이&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;원으로 바뀐다;;;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 그리고, 위 사진에서 Z 축의 모터가 잘못 연결 되었는데, (나중에 다시 연결하였다.) 모터 한쪽은 역방향 모터(케이블 색상 배치가 다르다.) 를 연결 해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/275F21505468E08B10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F275F21505468E08B10&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141107_010409.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;조립 세째날. 이제 어느정도 3D 프린터의 모습을 갖추기 시작했다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;다만...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/216D4C505468E08D02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F216D4C505468E08D02&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141107_010414.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;Z축&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;레일 봉을 볼트 너트와&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;육각렌치로 고정하는데 힘을 너무주면 위 사진과 같이 아크릴이 부러져 버린다. ㅡ,ㅡ&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;그렇다고 살살 조이면 구리스가&amp;nbsp;잘 발라져 있는 레일 봉이 불완전하게 고정된다. 결국 부러진 곳과 위태위태하게 고정된 Z축 레일 봉을 글루건으로 붙여버렸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp; 이제 마지막으로 제어 모듈을 연결할 차례다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/245F2E505468E07A0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F245F2E505468E07A0F&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141105_080612.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;제어 모듈은 atm&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;ega2560 을 사용한다. Z 축 모터 두 개중에 한 개는 외부 드라이버 모듈을 통하여 연결해야 한다.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;참고로 설명서에는 이미 테스트가 끝난상태니, + 와 - 를&amp;nbsp;잘못 연결해서 망가지면 소비자 책임이라 한다.(돈 내고&amp;nbsp;메인보드 바꿔야 한다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24595C505468E08116&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24595C505468E08116&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141105_080901.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; text-align: start;&quot;&gt;&amp;nbsp; 크고 아름다운&amp;nbsp;LCD 모듈. 여기에는 SD 카드 사용률과 히트베드와 노즐의 온도, 현재 작업등이 표시된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; text-align: start;&quot;&gt;&amp;nbsp; 껍데기 없이 케이블 두 개에 대롱대롱 매달려 있는 형태기 때문에 나중에 케이스나 거치대를 따로 뽑아서 붙이는 것이 좋을 것 같다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/245F02505468E09110&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F245F02505468E09110&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141107_010855.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;380W 파워 서플라이 연결 단자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px; background-color: transparent;&quot;&gt;전선의 피복을 벗겨서 이 곳에 연결해야 한다. - 같이 동봉된 DVD 내의 설명서에 연결 방법이 잘 나와 있다 -&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;폭탄 같은 전기세를 생각하면 좀 어질어질.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/21590D505468E09717&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F21590D505468E09717&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141107_012651.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 연결중.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 복잡한 케이블을 정리할 수 있는 도구들도 같이 제공된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 마지막으로 Home 위치를 인식하기 위한 스위치를 붙임으로써 조립을 완료하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2761B8505468E0990D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2761B8505468E0990D&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141110_013408.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp;케이블 연결을 완료한 뒤에 Repetier Host 를 설치한 모습.&amp;nbsp;아쉽게도 MAC 버전은 최신 업데이트가 안 된다. 윈도우와 리눅스 버전만 제대로&amp;nbsp;제공되는 듯. ㅠ_ㅠ&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;/p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/-ypLizhYJ1Y&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p style=&quot;text-align: center;&quot;&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 다 완성된 상태에서 PC 와 연결후 Home 위치를 맞추는 과정.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; 첫 번째로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;thingiverse.com 에서 다운받은 핸드폰 거치대를 뽑고 있다.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&amp;nbsp; 하지만, 서포트를 설정하지 않았다.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/GqbKkYQJA40&quot; width=&quot;720&quot; height=&quot;420&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&amp;nbsp; &amp;nbsp;결국....&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/213F40435469875213&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F213F40435469875213&quot; width=&quot;700&quot; height=&quot;525&quot; filename=&quot;IMG_20141112_011611.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp; 서포트 기능을 사용하지 않고 인쇄를 시도하다 위 사진과&amp;nbsp;같이 망했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp; 혹시나 했는데, 역시나...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size:12pt; line-height: 24px;&quot;&gt;&amp;nbsp; &amp;nbsp;두 번째로 아이패드 거치대를 뽑아보았다. (바닥에는 마스킹테잎 + 양면테잎 신공을 사용하여 PLA 출력물이 잘 고정될 수 있도록 하였다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: center; background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/0iDa4PYp6XE&quot; width=&quot;720&quot; height=&quot;420&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp;무려 3시간 30분이 걸렸다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2772514554698D7F3C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2772514554698D7F3C&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141113_013124.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;아직은&amp;nbsp;문제가 많지만, 점점 만족스러워지고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;도 3D 프린터의 최대 단점 중에 하나가 후처리가 번거롭다는 점이다. 이 결과물도 마찬가지로 지저분한 부분을 정리해주고 서포트를 제거한 다음 사포로 문질러야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;아래 사진은 가장 최근에 뽑은 네스프레소 디스펜서.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/221EB94254698E3038&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F221EB94254698E3038&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141117_074127.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp; 총 6시간이 걸렸다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp; 비교적 깔끔하게 출력된 것 같으나 정리해야 될 부분이 많이 보인다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/275E473E54698E4036&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F275E473E54698E4036&quot; width=&quot;723&quot; height=&quot;964&quot; filename=&quot;IMG_20141117_074157.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2166EA4454698E5014&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2166EA4454698E5014&quot; width=&quot;723&quot; height=&quot;964&quot; filename=&quot;IMG_20141117_074207.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/262E2C49546B1B7433&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F262E2C49546B1B7433&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141118_101850.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;정리가 끝난 뒤에 회사 사무실 탕비실에 바로 설치해 보았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp; 3D 프린터 Prusa i3 를 사용하기 전에는 정교한 결과물에 대한&amp;nbsp;기대감이 높았는데, 출력&amp;nbsp;시간도 매우 오래 걸리고 인쇄 속도를 조금만이라도 빠르게 한다면 출력물의 질을 장담할 수 없다.(시간이&amp;nbsp;많다면 높은 퀄리티의 결과물을 기대할 수 있다.)&amp;nbsp;그리고 가장 귀찮은 후처리가 문제다. 하지만 직접 모델링을 할 수 있다는 전제하에&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp;3D 프린터를 잘 이용한다면 세상에 없는 어떤 것을&amp;nbsp;만들 수 있지 않을까?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 24pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 14pt;&quot;&gt;추가 :&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 24pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot; size=&quot;6&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 14pt;&quot;&gt;&amp;nbsp; 내용물을 뽑기 전에&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;6&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Slic3R 에서 레이어의 높이를 0.25 로 조정하고 인쇄속도를 조금 낮춰보았다. 또, Z 축의 기준 위치(Home) 을 정할 때, 노즐이 베드에 최대한 가까이 붙게 하였다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://www.youtube.com/embed/-apYJko9a1c&quot; width=&quot;720&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 19px; line-height: 24px; background-color: transparent;&quot;&gt;결과는...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 19px; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27152847546B1D693E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27152847546B1D693E&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141118_073221.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2255634D546B1D7425&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2255634D546B1D7425&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141118_074200.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/227FE64B546B1D812E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F227FE64B546B1D812E&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20141118_074229.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 19px; line-height: 24px;&quot;&gt;&amp;nbsp;바닥까지 정말 깔끔하게 잘 나왔다. 느림의 미학이란 바로 이런 것인가보다...;;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 19px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 19px; line-height: 24px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>기타 취미/DIY</category>
      <category>3D 프린터</category>
      <category>i3</category>
      <category>prusa</category>
      <category>렙랩</category>
      <category>알리익스프레스</category>
      <category>프루사</category>
      <category>프루사 i3</category>
      <category>프루사 멘델</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/63</guid>
      <comments>https://yagnu.tistory.com/63#entry63comment</comments>
      <pubDate>Mon, 17 Nov 2014 15:16:59 +0900</pubDate>
    </item>
    <item>
      <title>[API] 안드로이드 디렉토리와 파일 모니터링(감시) 를 위한 FileObserver.</title>
      <link>https://yagnu.tistory.com/62</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;b&gt;FileObserver&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px; font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;안드로이드에서 제공하는 파일 모니터링을 위한 API 인&amp;nbsp;FileObserver 에 대하여 알아보겠다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; line-height: 1.5;&quot;&gt;&amp;nbsp; FileObserver 는 안드로이드 내부에 접근할 수 있는 각각의 파일과 디렉토리의 접근이나 변경에 대한 이벤트를 비동기적으로 받아올 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이 클래스는 리눅스 커널에서 제공하는 파일 감시 모듈인 &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/Inotify&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;inotify&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;(클릭시 위키로 이동)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;의 네이티브 API 들을&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;JNI 를 통해서 호출한다. FileObserver 를 사용하면 내부적으로 쓰레드 하나가&amp;nbsp;(s&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 22px; background-color: transparent;&quot;&gt;tatic 으로)&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent; line-height: 1.5;&quot;&gt;생성된다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 22px; background-color: transparent;&quot;&gt;&amp;nbsp; 우선 기본 사용법에 대하여 알아보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px; background-color: transparent;&quot;&gt;&amp;nbsp; &lt;span style=&quot;font-size: 10pt;&quot;&gt;(참고 페이지 - 안드로이드 레퍼런스&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 22px;&quot;&gt;http://developer.android.com/reference/android/os/FileObserver.html)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;기본 사용법:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;  * FileObserver 는 추상 클래스로 선언되어 있으므로 반드시 상속받아 사용해야 한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;  */&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver(&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/* 감시할 디렉토리 또는 파일 경로, 예 :&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;                                                                   Environment.getExternalStorageDirectory().getAbsolutePath()*/&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onEvent&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;event,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// event 값. 아래서 다루겠습니다.&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// path : 이 fileObserver 에 등록된 Path 와 관계있는 파일 또는 폴더의 path 값.  &lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 예를 들어 특정 디렉토리를 감시하는 경우에서&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;                //  그 내부의 파일 또는 디렉토리가 변경되었을때 path 값이 온다. &lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 이 FileObserver에 등록된 파일에 대한 이벤트가 발생하였을 때, null 을 반환한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;              // 즉, 이 곳에 등록된 path 에대한 이벤트가 발생했을 때 path 값이 null 로 반환.   &lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * 이 메소드를 호출하면 파일 또는 디렉토리 감시를 시작하며 이벤트를 받는다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * 만약 이미 감시중이거나 파일 또는 디렉토리가 존재하지 않을경우 이 메소드 호출은 무효가 된다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;startWatching&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * 파일 또는 디렉토리의 감시를 종료하고 이벤트를 받고 싶지 않을 때, 다음 메소드를 호출한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * fileObserver.stopWatching(); &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; */&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;FileObserver 를 사용하면서 주의해야 할 점은,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;FileObserver 가 GC 가 된다면 모든 파일 감시 이벤트를 보내는 것을 종료한다. 이벤트 수신을 보장받게&amp;nbsp;하려면 반드시&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;FileObserver 를 항상 살아있도록 만들어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp; FileObserver 로 받을 수 있는 이벤트 타입들은 다음과 같다. - 이 값들은 onEvent() 메소드의 인자값으로 받는다 -&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table id=&quot;constants&quot; class=&quot;jd-sumtable&quot; style=&quot;font-size: 14px; margin: 0.5em 1em 1em 0px; border-collapse: collapse; border-spacing: 0px; border: 0px; width: 728px; background-color: rgb(247, 247, 247); color: rgb(34, 34, 34); font-family: Roboto, sans-serif; line-height: 19px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan=&quot;12&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: rgb(153, 153, 153); color: rgb(255, 255, 255); border: 1px solid rgb(221, 221, 221);&quot;&gt;Constants&lt;/th&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#ACCESS&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;ACCESS&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;파일로 부터 데이터를 읽었을 때 발생하는&amp;nbsp;이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#ALL_EVENTS&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;ALL_EVENTS&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;&lt;p&gt;모든 이벤트 타입이 포함되어 있다.&lt;/p&gt;&lt;p&gt;모든 이벤트 타입은 각각 2진수의 각 자리수 하나씩을 차지하고 있고, ALL_EVENTS 는&amp;nbsp;마스크 역할을&amp;nbsp;한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;예를들어&amp;nbsp;FileObserver 를 생성할 때, 두 번째 인자값으로 이벤트 타입 값을 넣어서 원하는 이벤트만 받을 수 있도록 필터링을 할 수 있는데, 이때 ATTRIB 이벤트를 제외한 모든 이벤트를 받고 싶다면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&amp;nbsp; &amp;nbsp; new FileObserver(&quot;path&quot;, ALL_EVENTS ^ ATTRIB)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&amp;nbsp; &amp;nbsp;와 같이 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#ATTRIB&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;ATTRIB&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;메타&amp;nbsp;데이터&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;(permissions, owner, timestamp&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;가 변경되었을 때 발생하는 이벤트 타입.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 26px;&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 26px;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#CLOSE_NOWRITE&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;CLOSE_NOWRITE&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 26px;&quot;&gt;&lt;p&gt;읽기 전용으로 열려있는 특정 파일 또는 디렉트로리를 닫았을 때 발생하는 이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#CLOSE_WRITE&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;CLOSE_WRITE&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;쓰기 모드로 열려있는 특정 파일 또는 디렉토리를 닫았을 때 발생하는 이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#CREATE&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;CREATE&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;FileObserver 으로&amp;nbsp;디렉토리를 감시할 때, 디렉토리 내부 파일 또는 서브디렉토리가 생성되었을때 발생하는 이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#DELETE&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;DELETE&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;감시되고 있는 디렉토리 내부에서 파일 또는 디렉토리가 삭제 되었을때 발생하는 이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#DELETE_SELF&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;DELETE_SELF&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;&lt;p&gt;감시되고 있는 디렉토리 또는 파일이 삭제 되었을때 발생하는 이벤트 타입. 이 이벤트가 발생하면 대상 파일이나 디렉토리에 대한&amp;nbsp;감시는 종료된다.&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#MODIFY&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;MODIFY&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 27px;&quot;&gt;&lt;p&gt;파일이 감시되고 있을경우,&amp;nbsp;&amp;nbsp;파일에 데이터가 쓰여질때 발생하는 이벤트 타입.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#MOVED_FROM&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;MOVED_FROM&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;감시되고 있는 디렉토리 &lt;b&gt;내부로부터&lt;/b&gt;&amp;nbsp;파일 또는 디렉토리가 이동했을때 발생.&amp;nbsp;&lt;/p&gt;&lt;p&gt;(물론 이름이 변경되어도 발생한다.) &amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#MOVED_TO&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;MOVED_TO&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;감시되고 있는 디렉토리 &lt;b&gt;내부로&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;파일 또는 디렉토리가 이동했을때 발생.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: inherit;&quot;&gt;(마찬가지로&amp;nbsp;이름이 변경되어도 발생한다.) &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#MOVE_SELF&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;MOVE_SELF&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221); height: 45px;&quot;&gt;&lt;p&gt;감시되고 있는 디렉토리 또는 파일이&amp;nbsp;이동했을때 발생하는 이벤트 타입. 이 이벤트가 발생하여도 대상 파일에 대한 감시는 종료되지 않는다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;alt-color api apilevel-1&quot;&gt;&lt;td class=&quot;jd-typecol&quot; style=&quot;padding: 4px 12px; vertical-align: top; text-align: right; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;int&lt;/td&gt;&lt;td class=&quot;jd-linkcol&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/os/FileObserver.html#OPEN&quot; style=&quot;color: rgb(37, 138, 175); margin-bottom: 0px;&quot;&gt;OPEN&lt;/a&gt;&lt;/td&gt;&lt;td class=&quot;jd-descrcol&quot; width=&quot;100%&quot; style=&quot;padding: 4px 12px; vertical-align: top; background-color: inherit; border: 1px solid rgb(221, 221, 221);&quot;&gt;&lt;p&gt;파일 또는 디렉토리가 열렸을때 발생한다.&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 만약 특정 디렉토리를 감시하고 있는 상태에서는 그 내부 자식들의 파일 또는 디렉토리가 변경 되었을때만 이벤트가 발생한다. 즉, 감시 대상이 되는 디렉토리 내부의 어떤 디렉토리의 자식 디렉토리 상태가 변경되었을때는 이벤트가 발생하지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;이렇게&amp;nbsp;구구절절 설명하는 것 보다 한 번 돌려보고 눈으로 직접 확인해 보는 것이&amp;nbsp;최고다. 그래서 아래와 같은 예제 코드를 마련해 놓았다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;이 코드는 접근 가능한 영역의 모든 파일 또는 폴더를 대상으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 22px; background-color: transparent;&quot;&gt;FileObserver 를 생성하여 감시할 수 있도록 하였으며 이벤트를 로그로 출력하도록 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: transparent;&quot;&gt;MainActivity.java:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;MainActivity&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ArrayList&amp;lt;TestFileObserver&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sListFileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ArrayList&amp;lt;TestFileObserver&amp;gt;();&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;TestFileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mPath;&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;eventValue&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;ACCESS&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;ALL_EVENTS&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;ATTRIB&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;CLOSE_NOWRITE&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;CLOSE_WRITE&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;DELETE&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;DELETE_SELF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;MODIFY&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;MOVED_FROM&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;MOVED_TO&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;MOVE_SELF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;OPEN&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;eventName&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;ACCESS&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;ALL_EVENTS&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;ATTRIB&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;CLOSE_NOWRITE&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;CLOSE_WRITE&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;CREATE&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
				&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;DELETE&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;DELETE_SELF&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;MODIFY&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;MOVED_FROM&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;MOVED_TO&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;MOVE_SELF&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;OPEN&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
		
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;TestFileObserver&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(path);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mPath&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sListFileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;TestFileObserver&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mask)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(path,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mask);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mPath&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sListFileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onEvent&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;event,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;path)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuilder&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;strEvents&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;StringBuilder();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;strEvents.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Event : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'('&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(event).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;')'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;eventValue.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((eventValue[i]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;event)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;eventValue[i])&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;strEvents.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(eventName[i]);&lt;/span&gt;
					&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;strEvents.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;','&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((event&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;DELETE_SELF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;DELETE_SELF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sListFileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;strEvents.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;\tPath : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(path).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'('&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(mPath).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;')'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Log.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;TestFileObserverTestFileObserver&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,strEvents.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Bundle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;savedInstanceState)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(savedInstanceState);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;monitorAllFiles(Environment.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getExternalStorageDirectory&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;monitorAllFiles&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;root)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;File[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;files&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;root.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;listFiles&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(File&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;file&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;files)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;TestFileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fileObserver&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;TestFileObserver(file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getAbsolutePath&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;fileObserver.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;startWatching&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(file.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isDirectory&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;monitorAllFiles(file);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent; line-height: 1.5;&quot;&gt;이 코드를 실행하기 위하여 AndroidManifest.xml 파일 상단에&amp;nbsp;다음과 같은 권한을 추가해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;   &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;uses-permission&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android.permission.READ_EXTERNAL_STORAGE&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>Android</category>
      <category>FileObserver</category>
      <category>안드로이드</category>
      <category>파일 감시</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/62</guid>
      <comments>https://yagnu.tistory.com/62#entry62comment</comments>
      <pubDate>Wed, 29 Oct 2014 19:21:47 +0900</pubDate>
    </item>
    <item>
      <title>아두이노 남아있는 메모리 (메모리 사용량) 확인하기 - 메모리 공포에서 벗어나자.</title>
      <link>https://yagnu.tistory.com/60</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 아두이노 에서 사용하는 마이크로 컨트롤러는 작은 양의 RAM 공간을 갖고 있습니다. 아두이노 우노 에서 사용하는 ATmega328 계열은 고작2Kbyte 의 공간을 갖고 있으며 기본적으로&amp;nbsp;200에서 300byte 정도의 메모리가 소비되는 것을 볼 수 있었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;스케치 코드를 짜면서 무분별한 변수 선언이나 지나친 메모리 할당은&amp;nbsp;아두이노 스케치가&amp;nbsp;오동작 할 수 있는 상황을 야기시킬 수 있기 때문에 코딩중&amp;nbsp;고심하게 만드는 부분중에 하나입니다.&amp;nbsp;심지어 메모리 누수(Memory leak)&amp;nbsp;버그가 발생하면 코딱지 만한 메모리 공간은 쓰레기로 가득 찰 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 484px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/251AD634543C789B08&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F251AD634543C789B08&quot; width=&quot;484&quot; height=&quot;293&quot; filename=&quot;malloc-std (1).png&quot; filemime=&quot;image/png&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;lt;Atmega 의 메모리. 출처 :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.nongnu.org/avr-libc/user-manual/malloc.html&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: 15px; font-family: Georgia, serif; vertical-align: baseline; color: rgb(153, 0, 0); text-decoration: underline; line-height: 21.486080169677734px;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;avr-libc&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Georgia, serif; font-size: 10pt; line-height: 21.486080169677734px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 다행히도 아두이노에 남아있는 메모리 사용량을 실시간으로 체크할 수 있는 방법이 존재합니다. 그리고 그것을 라이브러리로 쓰기 편하게 만들어 주신 분도 있습니다. 우선 마음속으로 라이브러리 제작자분에게 '감사합니다' 를 한 번 외친후에 아래 링크에서 라이브러리 파일을 다운받아 아두이노 툴에 추가시켜줍니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;u&gt;&lt;a href=&quot;https://github.com/maniacbug/MemoryFree&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;https://github.com/maniacbug/MemoryFree&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0); font-family: Dotum, 돋움;&quot;&gt;&amp;nbsp; 사용방법은 무지 간단한데, &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움;&quot;&gt;라이브러리 include&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Dotum, 돋움;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 'Roboto Slab', 'Times New Roman', serif; font-size: 10pt; line-height: normal; white-space: pre-wrap; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-family: Dotum, 돋움;&quot;&gt;#include&lt;/span&gt;&lt;span style=&quot;font-family: Dotum, 돋움;&quot;&gt; &amp;lt;MemoryFree.h&amp;gt;) 한  다음으로 loop() 내에서  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Dotum, 돋움; font-size: 10pt; line-height: normal; white-space: pre-wrap; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 14pt;&quot;&gt;freeMemory()&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt; &lt;/span&gt;호출 하면 그 결과값을 통하여 현재 남아있는 메모리 사용량을 Kbyte 단위로 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 저는 라이브러리에 포함된 예제 코드에 아주 간단한 리스트를 만들고 노드를 계속 추가하면서 메모리 사용량을 살펴보는 코드를 작성해 보았습니다. 만약 노드를 추가하다가 남아있는 메모리가 얼마 없다면 리스트를 전부 제거시켜줍니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;b&gt;Memory&lt;/b&gt;&lt;b&gt;Free&lt;/b&gt;&lt;b style=&quot;background-color: transparent;&quot;&gt;Test.ino::&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;MemoryFree.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;115200&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;Node&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 다음 경로. &lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;next;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 메모리 사용을 지켜보기 위하여 100byte 의 배열 생성. &lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;byte&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buf[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;];&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 시작 경로. 이 것은 제거되지 않는다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;beginNode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;topNode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;beginNode;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;freeMemory()=&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(freeMemory());&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/* 남아있는 메모리가 500byte 이상이면&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;        노드를 생성하여 추가.*/&lt;/span&gt;
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(freeMemory()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;     &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;addNode();&lt;/span&gt;
     &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;     &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;     {&lt;/span&gt;
         &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/*모든 노드를 제거하여 메모리 공간을 &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;            확보한다.*/&lt;/span&gt;
          &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;clearNode();&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;addNode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;topNode-&amp;gt;next&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node();&lt;/span&gt;  
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;topNode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;topNode-&amp;gt;next;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;clearNode&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;itor&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;beginNode-&amp;gt;next;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(itor)&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;    {&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Node*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;next&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;itor-&amp;gt;next;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;delete&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;itor;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;itor&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;next;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;topNode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;beginNode;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Clear!&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: transparent;&quot;&gt;결과::&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/255DAF48543C7CF203&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F255DAF48543C7CF203&quot; width=&quot;723&quot; height=&quot;555&quot; filename=&quot;media-20141013.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;좀 더 테스트 하면서 정확성을 확인해 봐야겠지만, 일단은 위와 같이 잘 동작합니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;만약 메모리 릭이 발생했을때의 상황도 재현해 보았습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;방법은 위 코드에서 Node 클래스의 buf 배열의 사이즈를 500으로 늘려서 한 번에 504 바이트씩 할당 하도록 하고, clear 하는 부분은&amp;nbsp;제거하였습니다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;그 결과는 아래와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2155B53C543C7D6907&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2155B53C543C7D6907&quot; width=&quot;723&quot; height=&quot;555&quot; filename=&quot;media-20141013 (1).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;마치 수치 상으로는 메모리 공간이 없으면 더이상 할당이 안 되는 것처럼 보이지만, 사실 내부적으로 무슨 일이 일어나고 있는지도 모릅니다.&amp;nbsp;저도 아직까지는 정확히는 확인할 길이 없어서 확인을 안 했지만&amp;nbsp;혹시나 아두이노의 &lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;메모리를 실시간으로 들여다 볼 수 있는 방법이 있으면 이 포스팅을 업데이트 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>leak</category>
      <category>memory</category>
      <category>아두이노</category>
      <category>아두이노 메모리 릭</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/60</guid>
      <comments>https://yagnu.tistory.com/60#entry60comment</comments>
      <pubDate>Tue, 14 Oct 2014 10:40:15 +0900</pubDate>
    </item>
    <item>
      <title>Attiny85 에 아두이노 부트로더 올리기 + 삽질기.</title>
      <link>https://yagnu.tistory.com/59</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;우선 해외 사이트 중에 Attiny85 에 아두이노를 올리는 것에 대해 자세히 나와있는 아주 좋은 포스팅이 하나 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;http://highlowtech.org/?p=1695&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 하지만, 이 포스팅을 보고 순서대로 따라해 보았지만 동작하지 않았다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 대략 원인은 위 포스팅에 나와있는 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아두이노 우노 R2&lt;/span&gt;&amp;nbsp;에서는 잘 올라가지만&amp;nbsp;직접 테스트 해본&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아두이노 우노 R3&lt;/span&gt;&amp;nbsp;에서는 문제가 발생하는 것으로 예상하고 있다. 물론 아두이노 (호환)나노, 아두이노 (호환)미니 에서도 동작하지 않았다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 위에 링크로 올린&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;http://highlowtech.org/?p=1695 에서는 아주 간단한 방법으로 부트로더도 올리고 Blink 예제도 올리고 있지만, 앞서 언급한대로&amp;nbsp;잘 되지 않으므로&amp;nbsp;&lt;b&gt;정공법으로 부트로더를 올리고 스케치 프로그램을&amp;nbsp;올리는 방법에 대하여 설명하겠다&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;(이 포스팅은 아두이노 IDE 버전 1.0.x 기준입니다.&amp;nbsp;&lt;/span&gt;아두이노&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;IDE 버전&lt;/span&gt;&amp;nbsp;1.6.4 이상&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;쓰시는 분들은&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;http://www.dev.re.kr/81&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;http://www.dev.re.kr/81&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;이 주소로 이동 바랍니다&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;첫 번째로 라이브러리 설치 방법에 대하여 소개하겠다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;b&gt;이 부분은 매우 간단하다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;1.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp;우선 Attiny85, 84, 44 를 지원하는 라이브러리를 다운받아야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; 라이브러리는 이 곳에서 받을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://github.com/damellis/attiny/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/damellis/attiny/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 아두이노 IDE 1.6.x 버전은 아래&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;링크에서 받아야 한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://github.com/damellis/attiny/tree/ide-1.6.x/attiny/avr&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/damellis/attiny/tree/ide-1.6.x/attiny/avr&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp;또는 아래 링크를 클릭하여 압축된 master 브런치 파일을 바로 받을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://github.com/damellis/attiny/archive/master.zip&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/damellis/attiny/archive/master.zip&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 아두이노 IDE 1.6.x 버전 이상&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://github.com/damellis/attiny/archive/ide-1.6.x.zip&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/damellis/attiny/archive/ide-1.6.x.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; 그냥 위 링크를 선택하여 받으면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;2. 두 번째로 받은 라이브러리 파일 압축을 풀고 그 내부에 있는&amp;nbsp;attiny 폴더를 아두이노 툴의 hardware 폴더에 옮긴다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;만약 윈도우의 경우 hardware 폴더는 다음과 같은 경로에 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; 아래 스크린 샷은 hardware 폴더 내에 attiny 폴더를 이동시킨 것 까지 보여주고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 508px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/25041E405432D57A04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F25041E405432D57A04&quot; width=&quot;508&quot; height=&quot;25&quot; filename=&quot;스크린샷 2014-10-06 오후 10.39.45.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; 맥의 경우 아래처럼 실행 파일에서 마우스 커서를 대고 오른쪽 버튼을 누른다음 패키지 내용 보기를 선택한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp; 파인더가 열리면서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;내부를 들여다 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 335px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/220406405432D57904&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F220406405432D57904&quot; width=&quot;335&quot; height=&quot;481&quot; filename=&quot;스크린샷 2014-10-06 오후 10.01.57.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp; 그럼 윈도우와 마찬가지로 hardware &amp;nbsp;경로에 접근하여 그 곳에 attiny 폴더를 이동시키도록하자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 504px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/275D643A5432D6730F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F275D643A5432D6730F&quot; width=&quot;504&quot; height=&quot;18&quot; filename=&quot;스크린샷 2014-10-06 오후 11.04.29.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;아두이노 IDE 1.6.x 버전은 경로가 조금 다른데, &amp;nbsp;Contents -&amp;gt; Java -&amp;gt; hardware 폴더에 attiny 폴더를 붙여넣으면 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp; 이제 아두이노 툴(IDE) 를 재시작 시키고 상단 메뉴의 &lt;b&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;도구(tools)-&amp;gt;보드(board)&lt;/span&gt;&lt;/b&gt; 에 들어가면 ATtiny 가 지원되는 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 577px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/277D0E385432D6A119&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F277D0E385432D6A119&quot; width=&quot;577&quot; height=&quot;319&quot; filename=&quot;스크린샷 2014-10-06 오후 10.05.14.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 여담이지만&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;, Attiny85 는 펌웨어를 올릴 수 있는 프로그램 메모리를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;8kbyte 를 지원하고 Attiny44 는 4kbyte 를 지원한다. 참고로 Attiny 에 올라가는 부트로더의 크기는 대략 2kbyte 정도다.ㅎㄷㄷ&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;아두이노 IDE 1.6.x 버전에서는 보드 : Attiny 를 선택,&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;&amp;nbsp;프로세서 : Attiny85 선택,&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;&amp;nbsp;Clock : 8Mhz (internal) 을 선택한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;이제부터가 중요하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;ATmega&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;328 에 부트로더를 올려본 경험이 있는 분들은&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;쉬울 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;먼저 여러분이 갖고 있는 아두이노에 ArduinoISP 를 올려야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;아래 그림과 같이 &lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;&lt;b&gt;파일-&amp;gt;예제-&amp;gt;ArduinoISP&lt;/b&gt;&lt;/span&gt; 를 선택하여 나온 코드를 &lt;span style=&quot;color: rgb(242, 150, 97);&quot;&gt;아두이노에 업로드&lt;/span&gt; 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 450px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/267E9E385432D77619&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F267E9E385432D77619&quot; width=&quot;450&quot; height=&quot;302&quot; filename=&quot;스크린샷 2014-10-07 오전 2.53.21.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;그리고 나서 &lt;span style=&quot;color: rgb(242, 150, 97);&quot;&gt;도구-&amp;gt;프로그래머-&amp;gt;Arduino as ISP &lt;/span&gt;를 선택한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 361px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217DBD385432D77614&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217DBD385432D77614&quot; width=&quot;361&quot; height=&quot;140&quot; filename=&quot;스크린샷 2014-10-07 오전 2.53.39.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 이 과정은 PC 로부터 시리얼 통신으로&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;명령을&amp;nbsp;받은 아두이노가 다른 장치로 프로그램을&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp;올릴수&lt;/span&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;ISP, &lt;u&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/In-system_programming&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;In-System &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;Programing&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;&lt;/span&gt;)&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 20px; font-size: 10pt; background-color: transparent;&quot;&gt;&amp;nbsp;있도록&lt;/span&gt;&lt;span style=&quot;line-height: 20px; font-size: 10pt; background-color: transparent;&quot;&gt;&amp;nbsp;해주는 과정이다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;방금 아두이노 위에 올린 ArduinoISP 는 일종의 릴레이를 하게 된다. 물론 USB ISP 장치가 있으면 이런 삽질 할 필요 없이&lt;span style=&quot;font-size: 10pt;&quot;&gt;, &lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;도구 -&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;프로그래머 -&amp;gt; USBtinyISP&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;/span&gt;&amp;nbsp;를 선택하고 바로 부트로더를 구우면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 다만 그게 없으면 이렇게 번거로운 과정을 해야 하는데, 더 안습한 사실은 Attiny85 는 시리얼 통신을 지원하지 않으니&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;그것을 통하여 프로그램을 올릴수도 없다. USB ISP 장치가 없다면 오로지 다른 아두이노를 거쳐서 프로그램을 업로드 해야한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 물론 USB ISP 장치도 우리의 알리익스프레스에서 단돈 5천원 미만에 팔고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; (http://www.aliexpress.com/wholesale?SearchText=USB+ISP&amp;amp;catId=0&amp;amp;initiative_id=SB_20141006100947)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/274DC7395433DD5410&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F274DC7395433DD5410&quot; width=&quot;723&quot; height=&quot;180&quot; filename=&quot;스크린샷 2014-10-07 오후 9.31.54.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;이제 &amp;nbsp;다음 과정으로 넘어가겠다. ISP &amp;nbsp;를 통하여 ATtiny 에 부트로더를 올리기 위하여 다음과 같이 선을 연결한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아두이노 우노&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;R2&amp;nbsp;이하&lt;/span&gt;에서는 아래 링크의 페이지에 나와있는 방법대로 연결한다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;(R2, R3 구분방법은&amp;nbsp;링크 사이트의&amp;nbsp;그림과 아래&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;2)&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;의&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;&amp;nbsp;그림&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;에서 &lt;span style=&quot;color: rgb(103, 0, 0);&quot;&gt;Reset&lt;/span&gt; 버튼&amp;nbsp;위치 확인)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;font-size: 12pt;&quot;&gt;Reset 포트와 GND 포트 사이에 10uF 콘덴서를 연결하는 것이 포인트다. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 콘덴서의 '-'&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;가 표시된 줄무늬 쪽이 GND다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://highlowtech.org/?p=1706&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt; http://highlowtech.org/?p=1706 &amp;nbsp;&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;2) &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;아두이노 우노 R3 이상&lt;/span&gt;.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 720px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2309AC3D5433E1E632&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2309AC3D5433E1E632&quot; width=&quot;720&quot; height=&quot;800&quot; filename=&quot;ATtiny85.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 458px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/222423435433E24319&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F222423435433E24319&quot; width=&quot;458&quot; height=&quot;164&quot; filename=&quot;ATtiny45-85.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;(Pin0 은 D0 , Pin2 는 D1 이다.)&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이해를 돕기 위하여 좀 더 자세히 설명하면,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&amp;nbsp; 다음 표와 같다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;table class=&quot;txc-table&quot; width=&quot;352&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; font-family: 돋움; font-size: 12px; width: 352px;&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; background-color: transparent;&quot;&gt;ATtiny Reset&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;------&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(0, 130, 153); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(0, 130, 153); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(0, 130, 153);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;--&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;Arduino 10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b style=&quot;color: rgb(102, 0, 255);&quot;&gt;------&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; text-align: left; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(102, 0, 255); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; color: rgb(102, 0, 255); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5; color: rgb(102, 0, 255); background-color: transparent;&quot;&gt;--&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 25px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;ATtiny GND&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;--------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;---&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;----&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino GND&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 0px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny VCC&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(255, 0, 0); background-color: transparent;&quot;&gt;-------------&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 5v&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 187, 0);&quot;&gt;----------------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(255, 187, 0); background-color: transparent;&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 187, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 13&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(47, 157, 39); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 12&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 104px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;ATtiny Pin0&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 138px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; color: rgb(9, 0, 255); background-color: transparent;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;text-align: left; font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;-------------------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 109px; height: 24px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-right-style: solid; border-right-color: rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 20px; background-color: transparent;&quot;&gt;Arduino 11&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 선 연결이 완료되면&amp;nbsp;ArduinoISP 가 올라간 아두이노 보드가 PC 에 연결된 상태에서 상단 메뉴의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(255, 94, 0); background-color: transparent;&quot;&gt;도구 -&amp;gt; 시리얼 모니터&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;' 를 선택하면 나오는 창에서 우측 하단의 baud rate 를 '&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;19200baud&lt;/span&gt;'&lt;/b&gt; 로 변경한다. 만약 상단 메뉴의 &lt;span style=&quot;color: rgb(242, 150, 97);&quot;&gt;'&lt;span style=&quot;color: rgb(204, 114, 61); background-color: rgb(255, 255, 255);&quot;&gt;도구&lt;/span&gt;' &lt;/span&gt;에서 시리얼 모니터가 비활성화 되어있다면 아두이노와 연결이 제대로 되지 않은 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 513px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/257A51395433E7BE01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F257A51395433E7BE01&quot; width=&quot;513&quot; height=&quot;428&quot; filename=&quot;스크린샷 2014-10-07 오후 10.15.53.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&amp;nbsp; 그 다음은,&amp;nbsp;상단 메뉴의 '&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;도구 -&amp;gt; 보드&lt;/span&gt;' &amp;nbsp;에서 자신이 갖고 있는 ATtiny 를 선택한다. 실제로 올려보면서&amp;nbsp;처음에는&amp;nbsp;안전하게&amp;nbsp;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;ATtiny 1Mhz&lt;/span&gt;&amp;nbsp;를 선택한다. (이 과정이 성공한&amp;nbsp;이후에는 같은 방법으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; color: rgb(255, 94, 0);&quot;&gt;ATiny 8Mhz&lt;/span&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp;도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;올려보자.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 그리고 '&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(255, 94, 0); background-color: transparent;&quot;&gt;도구 -&amp;gt; 부트로더 굽기&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;' 를 선택한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 하지만, 에러가 날 것이다. (에러가 나지 않는다면 축하한다. 부트로더가 올라간 것이다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 필자는&amp;nbsp;국내 온라인 전자 부품 쇼핑몰에서 가장&amp;nbsp;구하기 쉬운&amp;nbsp;ATtiny85-20pu&amp;nbsp;를 구입했는데, 이 것이 이전 버전들과 호환이 안 되어서&amp;nbsp;그런지 몰라도 아래 그림과 같이 에러가 난다. (아래는 삽질하는 과정에서 Baud Rate 를 일부러 57600으로 바꿔본 스샷이다.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 494px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27115E335433E63229&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27115E335433E63229&quot; width=&quot;494&quot; height=&quot;291&quot; filename=&quot;스크린샷 2014-07-13 오후 4.45.45.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이 것의 해결책을 찾으러 여러군데를 뒤져보고&lt;a href=&quot;http://electronics.stackexchange.com/questions/64978/attiny2313-refuses-to-be-programmed-after-setting-cpu-clock-to-500khz/65183#65183&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&amp;nbsp;http://electronics.stackexchange.com/questions/64978/attiny2313-refuses-to-be-programmed-after-setting-cpu-clock-to-500khz/65183#65183&lt;/a&gt; 이 페이지에서 해답을 찾았다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 그리고 아래 링크에 있는 어떤 아주 고마운&amp;nbsp;분께서 수정한 ArduinoISP 코드를 다시 아두이노에 올린다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;a href=&quot;https://github.com/sylvandb/ArduinoISP/blob/7e5359a44baccac956d8623d3d8629f4a48efe79/ArduinoISP/ArduinoISP.ino&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(255, 255, 255); background-color: rgb(70, 115, 255);&quot;&gt;https://github.com/sylvandb/ArduinoISP/blob/7e5359a44baccac956d8623d3d8629f4a48efe79/ArduinoISP/ArduinoISP.ino&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 다시&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;&lt;b&gt;도구 -&amp;gt; 보드&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;에서 자신이 갖고 있는 AT&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;tiny 를 선택한 뒤에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;도구 -&amp;gt; 부트로더 굽기&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 를 실행하며 이제 잘 올라갈 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 이제 실제로 테스트 해보기 위해 Blink 예제를 올려볼 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 방금 올린 수정된&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;ArduinoISP 으로 부트로더를 무사히 올릴 수 있었지만, 스케치 프로그램은&amp;nbsp;올릴 수 없으므로 다시 메뉴에서 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(255, 94, 0); background-color: transparent;&quot;&gt;파일-&amp;gt;예제-&amp;gt;ArduinoISP&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;를 선택하고 아두이노에 업데이트한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;이미 구성한 회로에 &amp;nbsp;다음과 같이 LED 와 저항을 붙여준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 482px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2609423F5433F62231&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2609423F5433F62231&quot; width=&quot;482&quot; height=&quot;366&quot; filename=&quot;스크린샷 2014-10-07 오후 11.16.00.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;파일-&amp;gt;예제-&amp;gt;01.Basics-&amp;gt;Blink&lt;/span&gt;&amp;nbsp;를 선택한다. 파일이 열리면 1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;3번 포트로 설정되어 있는 부분을 모두 0 으로 고쳐준다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 마지막으로 업로드를 실행하면 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;PC---&amp;gt; 아두이노 (ISP) ---&amp;gt; ATtiny85 &lt;/span&gt;과정을 거쳐서 프로그램이 업로드가 될 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&amp;nbsp;아래는 ATtiny85 에서 실행하는&amp;nbsp;Blink 예제 구동영상이다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;font size=&quot;2&quot; style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/hjXP2BTv7RM&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;PWM 도 테스트 해보았다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/JEICRrf78uA&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>ATtiny85</category>
      <category>부트로더</category>
      <category>아두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/59</guid>
      <comments>https://yagnu.tistory.com/59#entry59comment</comments>
      <pubDate>Tue, 7 Oct 2014 03:13:44 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA:병렬 프로그래밍 - 3] Exchanger 사용하기.</title>
      <link>https://yagnu.tistory.com/58</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;Exchanger 는 뜻 그대로 &amp;nbsp;쓰레드상에서 두 개의 인스턴스를&amp;nbsp;교환해주는 역할을 한다. 만약 한쪽의 쓰레드에서만 교환 메소드를 호출한다면 다른쪽에서 교환 메소드를 호출하기 전까지 대기하고 있는데.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이 클래스는 java 의&amp;nbsp;gc 와 같은 동작에서 사용할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 예를 들어 설명하면 다음과 같다. (이해를 돕기 위하여 '요청' 이라는 표현을 사용하였다. 정확히는 교환 대상이 되는 인스턴스 값을 인자로 하는 교환 메소드 호출이다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;1. 데이터를 '스택에 쌓는 쓰레드' 와, '스택을 비우는 쓰레드' 가 있다. &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 11pt; background-color: transparent; line-height: 1.5;&quot;&gt;이 두 개의 쓰레드에는 각각의 '스택' 이 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;2. 데이터를 '스택에 쌓는 쓰레드' 는 계속해서 데이터를 자신의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 15px; line-height: 22px; background-color: transparent;&quot;&gt;'스택' 에 추가한다. 이 동작을 반복하다 스택이&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;&amp;nbsp;가득차면 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;'스택' 교환을 요청하고&amp;nbsp;3번 과정이 끝날 때 까지 모든 동작을 대기한다. 즉, 다른쪽에서도 교환 요청이 일어날 때까지 대기하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;3.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;'스택을 비우는 쓰레드' 에서 스택을 모두 비운다. 스택을 모두 비우면 가득찬 스택을 가져오기 위하여 데이터를 '스택에 쌓는 쓰레드' 의 '스택'과 교환 요청을 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 15px; line-height: 22px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 15px; line-height: 22px;&quot;&gt;4. 한 쌍의 '스택' 에 대하여 교환 요청이 이루어졌으므로 '스택에 쌓는 쓰레드' 의 가득찬 '스택'은 '스택을 비우는 쓰레드' 로 이동하여 가득찬 '스택'을 비울 수 있도록 한다. 또, '스택을 비우는 쓰레드' 의 비어있는 '스택'은 '스택에 쌓는 쓰레드' 로 이동하여 비어있는 '스택' 에 데이터를 다시 쌓을 수 있도록 한다. 그리고 1번 과정을 반복한다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 이를 예제코드로 표현하면 아래와 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;예제코드:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt; * 스택의 최대 크기.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt; */&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;final&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;static&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;STACK_CAPACITY&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-size: 10pt;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Exchanger&amp;lt;LinkedList&amp;lt;Integer&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;mExchanger&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Exchanger&amp;lt;LinkedList&amp;lt;Integer&amp;gt;&amp;gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 10pt;&quot;&gt;PushLoop&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;implements&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Runnable&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	
	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;/** int 값을 넣는데 사용하는 스택. */&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;LinkedList&amp;lt;Integer&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;LinkedList&amp;lt;Integer&amp;gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	
	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;/** 키 입력을 받는다. */&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Scanner&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;keyScanner&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Scanner(System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 10pt;&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(!Thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;interrupted&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 스택의 최대 크기를 넘기지 않는 범위내에서 입력받은 값들을 스택에 넣는다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(integerStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;STACK_CAPACITY)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
					&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;keyScanner.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;nextInt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
					&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;addLast&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(value);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 스택이 가득차면 메세지를 출력하고, 비어있는 스택(integerStack)과 교환한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 만약 교환될(비어있는) 스택이 없다면 대기한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 10pt;&quot;&gt;&quot;PushLoop : Full Stack.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;mExchanger.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;exchange&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(integerStack);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(InterruptedException&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline; font-size: 10pt;&quot;&gt;EmptyLoop&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;implements&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;Runnable&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;/**&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;	 * 값을 비우는 스택.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;	 */&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;LinkedList&amp;lt;Integer&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;LinkedList&amp;lt;Integer&amp;gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 10pt;&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(!Thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;interrupted&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 스택내에 값이 비어있지 않으면 계속 비운다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(!integerStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;isEmpty&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
					&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;removeLast&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
					&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(value);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 스택이 비어지면 메세지를 출력하고, 가득찬 스택(integerStack)과 교환한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic; font-size: 10pt;&quot;&gt;// 만약 교환될(가득찬) 스택이 없다면 대기한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19); font-size: 10pt;&quot;&gt;&quot;EmptyLoop : Empty Stack.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;integerStack&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;mExchanger.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;exchange&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(integerStack);&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(InterruptedException&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;e)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 
				&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
			&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
		&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 10pt;&quot;&gt;runThread&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 10pt;&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;PushLoop()).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
	&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(68, 127, 207); font-size: 10pt;&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold; font-size: 10pt;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;EmptyLoop()).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187); font-size: 10pt;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;();&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 위 예제 코드에서 runThread() 를 호출하면 값을 입력 받아서 stack 에 쌓는 쓰레드와 동시에 비우는 쓰레드가 작동한다. 결과는 다음과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;실행 결과(초록색 폰트가 입력된 값이다.):&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;EmptyLoop&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Empty&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Stack.&lt;/span&gt;
&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;400&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;600&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;700&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(31, 218, 17);&quot;&gt;800&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;PushLoop&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Full&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Stack.&lt;/span&gt;
&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;800&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;700&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;600&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;400&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255);&quot;&gt;100&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;EmptyLoop&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Empty&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Stack.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <category>Exchanger</category>
      <category>Java</category>
      <category>병렬 프로그래밍</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/58</guid>
      <comments>https://yagnu.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 6 Oct 2014 13:53:16 +0900</pubDate>
    </item>
    <item>
      <title>WS2812B 사용하기 예제.</title>
      <link>https://yagnu.tistory.com/57</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;이전 포스팅&lt;/span&gt;&amp;nbsp;'&lt;/span&gt;&lt;u&gt;&lt;a href=&quot;http://www.dev.re.kr/46&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;저렴한 RGB&amp;nbsp;LED(&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.dev.re.kr/46&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;WS2812B) 구임/&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.dev.re.kr/46&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;사용기&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;라는 포스팅에서 WS2812B 에 대하여 잠깐 소개한적이 있다. &amp;nbsp;간&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;단한 사용 방법에 대하여 소개를 하지 않아서 본격적으로 사용법에 대하여 소개를 하려고 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp;우선 구입은 Aliexpress 와 같은 해외 사이트를 추천한다. 글을 올린 시간&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;기준으로 100개에 약 18달러정도 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;(&lt;u&gt;&lt;a href=&quot;http://www.aliexpress.com/premium/WS2812B-100pcs-Heatsink.html?ltype=wholesale&amp;amp;d=y&amp;amp;origin=y&amp;amp;SearchText=WS2812B+100pcs+Heatsink&amp;amp;isPremium=y&amp;amp;initiative_id=SB_20141005041503&amp;amp;isViewCP=y&amp;amp;catId=&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;http://www.aliexpress.com/premium/WS2812B-100pcs-Heatsink.html?ltype=wholesale&amp;amp;d=y&amp;amp;origin=y&amp;amp;SearchText=WS2812B+100pcs+Heatsink&amp;amp;isPremium=y&amp;amp;initiative_id=SB_20141005041503&amp;amp;isViewCP=y&amp;amp;catId=&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;뿐만 아니라 LED 매트릭스와 스트립도 검색하면 싼 값에 구입할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;color: rgb(51, 51, 51);&quot;&gt;WS2812B는&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;복잡한 배선과 코딩하기 어려운 일반적인 RGB LED 의 좋은 대안이 될 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;WS2812B 는 사실 Adafruit 의 Neopixel 에도 사용되는데 이는 Neopixel 의 라이브러리를 그대로 이용해도 사용 가능하다. &lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;(옵션 변경을 통하여&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;WS2811 도 가능하다, 아래 예제코드 참고.)&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 225px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2447014A543139002F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2447014A543139002F&quot; width=&quot;225&quot; height=&quot;225&quot; filename=&quot;neopixel.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;(Neopixel)&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 Neopixel &amp;nbsp;라이브러리 프로젝트(&lt;/span&gt;&lt;span style=&quot;line-height: 20px; font-size: 9pt; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;u&gt;&lt;a href=&quot;https://github.com/adafruit/Adafruit_NeoPixel&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;https://github.com/adafruit/Adafruit_NeoPixel&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;를 library 폴더에 다운받아 Arduino 툴에 라이브러리로 추가한다. &amp;nbsp;(스케치 -&amp;gt; 라이브러리 가져오기 -&amp;gt; add Library 를 선택한 뒤에 NeoPixel 라이브러리 폴더 선택) Neopixel 라이브러리 라이센스가 GPLv3 인 것에 유의하자. (사용/수정시 GPLv3 로 소스&amp;nbsp;배포, 상업적 사용 불가)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;우선 예제를 한 번 실행시켜보자. 상단 메뉴의 '파일 -&amp;gt; 예제 -&amp;gt; Neopixel -&amp;gt; Simple' 을 열면 간단한 사용 예제를 볼 수 있다. 만약 예제가&amp;nbsp;안 나온다면 아두이노툴을 재시작 하자.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;이 곳에서 여러분이 연결한&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px;&quot;&gt;WS2812B&lt;/span&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;의 개수를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;NUMPIXELS 에 설정하고&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;PIN 에 연결되는 디지털 핀을 설정할 수 있다.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size:10pt; line-height: 20px;&quot;&gt;&amp;nbsp; WS2812B 와 아두이노의 연결 회로는 다음과 같이 매우 간단하다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 587px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/270A293754315A0A09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F270A293754315A0A09&quot; width=&quot;587&quot; height=&quot;668&quot; filename=&quot;WS2812B 연결.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 자, 이제 아까 불러온 예제 파일을 조금 수정하여 Serial 콘솔을 통하여 읽어온 값을 기반으로 선택한 LED 의 색을 바꾸는 간단한 프로젝트를 만들어&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;보겠다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 우선&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0); background-color: transparent;&quot;&gt;WS2812B 10개를&amp;nbsp;다음과 같이 연결해 보았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0); background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24717C41543174E01B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24717C41543174E01B&quot; width=&quot;723&quot; height=&quot;143&quot; filename=&quot;IMG_20141005_215145.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0); background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0); background-color: transparent;&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 20px; color: rgb(0, 0, 0); background-color: transparent;&quot;&gt;&amp;nbsp; 그리고 다음과 같은 코드를 작성여 아두이노로 업로드 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;예제코드:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;Adafruit_NeoPixel.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 컨트롤 핀&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define PIN            6&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// WS2812B 의 연결된 개수&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define NUMPIXELS      10&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define READ_BUFFER_SIZE 6&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 만약 WS2811 를 사용할 경우 NEO_KHZ800 을 NEO_KHZ400 으로 변경해야 한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Adafruit_NeoPixel&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Adafruit_NeoPixel(NUMPIXELS,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NEO_GRB&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;NEO_KHZ800);&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int &lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;R&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;G&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;selectNum;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buffer[READ_BUFFER_SIZE];&lt;/span&gt; 

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;readNumber&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.begin();&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// This initializes the NeoPixel library.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9600&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;

  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 핀 번호 입력.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Select LED(0~&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(NUMPIXELS&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// Serial 에 값이 들어올 때 까지 대기하는 동안 지속적으로 업데이트 해준다.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!Serial.available())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.show();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 값을 입력 받는다.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;selectNum&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readNumber();&lt;/span&gt;


  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;R(0~255) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;   
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!Serial.available())&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.show();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;R&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readNumber();&lt;/span&gt;

  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;G(0~255) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;   
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!Serial.available())&lt;/span&gt;   &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.show();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;G&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readNumber();&lt;/span&gt;
  

  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;B(0~255) : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;   
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!Serial.available())&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.show();&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;B&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;readNumber();&lt;/span&gt;

 &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.setPixelColor(selectNum,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.Color(R,G,B));&lt;/span&gt;
 &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pixels.show();&lt;/span&gt;  
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// String 으로 입력받은 숫자를 integer 형태로 변환하여 반환한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;readNumber&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; 
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;index&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;number&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Serial.available())&lt;/span&gt;  
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buffer[index++]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.read();&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buffer[index]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;'\0'&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;         
      &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(index&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;READ_BUFFER_SIZE)&lt;/span&gt; 
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;      
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; 
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.flush();&lt;/span&gt; 
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;number&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;atoi(buffer);&lt;/span&gt;  
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(number);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;number;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;결과 :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp; 시리얼 콘솔을 통하여 LED 의 번호를 설정하고 RGB 값을 설정한다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 630px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/257C1542543175802A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F257C1542543175802A&quot; width=&quot;630&quot; height=&quot;542&quot; filename=&quot;스크린샷 2014-10-06 오전 1.41.46.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;색상을 설정한 LED 는 이렇게 불이 들어온다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2676FF44543175BF12&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2676FF44543175BF12&quot; width=&quot;723&quot; height=&quot;132&quot; filename=&quot;IMG_20141006_013145.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>NeoPixel</category>
      <category>WS2812</category>
      <category>WS2812B</category>
      <category>아두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/57</guid>
      <comments>https://yagnu.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 6 Oct 2014 01:46:58 +0900</pubDate>
    </item>
    <item>
      <title>CRC16-CITT - 아두이노에 올리기 위한 C 코드.</title>
      <link>https://yagnu.tistory.com/56</link>
      <description>&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;우선 CRC 와 CRC&amp;nbsp;CITT 에 대한 설명은 아래 두 사이트에서 볼 수 있다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;CRC(&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;color: rgb(51, 51, 51); font-family: sans-serif; font-size: 10pt; line-height: 22.3999996185303px; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(51, 51, 51);&quot;&gt;cyclic redundancy check)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;에 관한 설명, 위키&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://ko.wikipedia.org/wiki/%EC%88%9C%ED%99%98_%EC%A4%91%EB%B3%B5_%EA%B2%80%EC%82%AC&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;링크(클릭)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;a href=&quot;http://srecord.sourceforge.net/crc16-ccitt.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(51, 51, 51);&quot;&gt;CRC16-CITT 에 대한 설명과 코드 페이지 링크(클릭)&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://CRC16-CITT 에 대한 설명과 코드 페이지 링크(클릭)&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 보통 구글링을 하면 나오는 CRC 코드는 CRC 값 계산을 위한 테이블을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;미리 생성하거나 코드에 포함시키기 때문에&amp;nbsp;아두이노에 올리기에 부담스럽다. 아두이노 UNO 의 메모리 크기는 달랑 2K&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;byte 밖에 안 되는데 CRC 값 계산을 위한 테이블은 이론상&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;512byte 씩이나 되기 때문이다. (실제로는 좀 더&amp;nbsp;작은 크기를 점유하고 있다.&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; SRAM을 직접 연결하거나 메모리&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;쉴드를 달면 조금 나아지겠지만, 일단 그냥 올리기에는 부담스러운 것이 사실이다. 그래서 인터넷 이곳 저곳에서 긁어온 코드를 조금 느리더라도 아래 코드처럼 직접 계산하도록 하였다. (추후에 시간이 되면 좀 더 빠르게 개선해봐야겠다.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;CRC16 CITT&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// CRC16-CITT Polynomial&lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define POLY	0x1021&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//아래 주석을 해제하면, 미리 정의된 CRC Table 을 사용한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//#define USE_CRC_TABLE &lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;crc16Table[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;256&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;]=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1021&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2042&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3063&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4084&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x50a5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x60c6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x70e7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8108&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9129&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa14a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb16b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc18c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd1ad&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe1ce&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf1ef&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1231&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0210&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3273&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2252&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x52b5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4294&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x72f7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x62d6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9339&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8318&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb37b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa35a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd3bd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc39c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf3ff&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe3de&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2462&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3443&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0420&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1401&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x64e6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x74c7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x44a4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5485&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa56a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb54b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8528&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9509&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe5ee&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf5cf&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc5ac&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd58d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3653&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2672&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1611&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0630&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x76d7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x66f6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5695&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x46b4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb75b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa77a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9719&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8738&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf7df&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe7fe&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd79d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc7bc&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x48c4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x58e5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6886&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x78a7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0840&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1861&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2802&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3823&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc9cc&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd9ed&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe98e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf9af&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8948&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9969&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa90a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb92b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5af5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4ad4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7ab7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6a96&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1a71&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0a50&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3a33&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2a12&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xdbfd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcbdc&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xfbbf&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xeb9e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9b79&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8b58&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbb3b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xab1a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6ca6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7c87&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4ce4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5cc5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2c22&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3c03&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0c60&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1c41&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xedae&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xfd8f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcdec&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xddcd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xad2a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbd0b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8d68&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9d49&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7e97&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6eb6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5ed5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4ef4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3e13&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2e32&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1e51&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0e70&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xff9f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xefbe&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xdfdd&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcffc&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbf1b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xaf3a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9f59&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8f78&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9188&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x81a9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb1ca&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa1eb&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd10c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc12d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf14e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe16f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1080&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x00a1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x30c2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x20e3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5004&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4025&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7046&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6067&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x83b9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9398&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa3fb&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb3da&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc33d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd31c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe37f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf35e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x02b1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1290&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x22f3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x32d2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4235&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5214&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6277&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7256&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb5ea&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa5cb&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x95a8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8589&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf56e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe54f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd52c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc50d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x34e2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x24c3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x14a0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0481&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7466&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6447&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5424&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4405&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa7db&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb7fa&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8799&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x97b8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe75f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf77e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc71d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd73c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x26d3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x36f2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0691&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x16b0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6657&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7676&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4615&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5634&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xd94c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xc96d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xf90e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xe92f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x99c8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x89e9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xb98a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xa9ab&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5844&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4865&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7806&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6827&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x18c0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x08e1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3882&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x28a3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcb7d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xdb5c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xeb3f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xfb1e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8bf9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9bd8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xabbb&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbb9a&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4a75&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5a54&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6a37&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7a16&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0af1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1ad0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2ab3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3a92&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xfd2e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xed0f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xdd6c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcd4d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbdaa&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xad8b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9de8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8dc9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7c26&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6c07&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5c64&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4c45&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3ca2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2c83&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1ce0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0cc1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xef1f&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xff3e&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xcf5d&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xdf7c&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xaf9b&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xbfba&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8fd9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x9ff8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;
	&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x6e17&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x7e36&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x4e55&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x5e74&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x2e93&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x3eb2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x0ed1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x1ef0&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
  
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;* CRC Table 의 값을 계산하여 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;*  만약 USE_CRC_TABLE 이 #define 으로 정의되어 있다면 &lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;* 미리 생성된 CRC 테이블에서 값을 즉시 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * @param index CRC Table 의 인덱스.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * @return 값.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;getCRCTableEle&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;index)&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ifdef&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;USE_CRC_TABLE&lt;/span&gt;
       &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;crc16Table[index];&lt;/span&gt;
    &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;else&lt;/span&gt;
       &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;tableEle&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)index&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
       &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i=&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++)&lt;/span&gt;
       &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;tableEle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(tableEle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x8000L&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)?(tableEle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;POLY:(tableEle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
       &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;tableEle;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(166, 23, 23); background-color: rgb(227, 210, 210);&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;endif&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * 버퍼를 입력 받아 CRC 값을 생성한다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * @param buf 버퍼&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * @param len 버퍼의 길이&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * @return CRC 값.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;genCRC&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*buf,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;len)&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;crc&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;len;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;counter++)&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;crc&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(crc&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getCRCTableEle(((crc&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*buf++)&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x00FF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;crc;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;문득 이 방법이&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;CRC 테이블을 사용하는 것에 비하여 성능이 어느정도 떨어지는지 조금&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;궁금하여 아래 테스트 코드를&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;추가하여 간략하게 테스트를 해보았다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;CRC16 성능&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;테스트 (Arduino)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;updateCRC&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*updateCRC,&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;value)&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(*updateCRC)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(*updateCRC&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getCRCTableEle(((*updateCRC&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;^&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;value)&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x00FF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; * 0을 반환하면 값이 정상이다.&lt;/span&gt;
&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;acceptedCRC,&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;checkCRC)&lt;/span&gt; 
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;updateCRC(&amp;amp;checkCRC,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(acceptedCRC&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xFF00&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;updateCRC(&amp;amp;checkCRC,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;acceptedCRC&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0x00FF&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;checkCRC;&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;long&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;total&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;startMs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;endMs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sendPayload[BUFFER_SIZE];&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedPayload[BUFFER_SIZE];&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;                
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9600&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;srand(analogRead(0));&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 랜덤한 값을 넣는다&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BUFFER_SIZE;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sendPayload[i]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)rand()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xff&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sendCRC,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedCRC;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sendCRC&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;genCRC(sendPayload,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BUFFER_SIZE);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BUFFER_SIZE;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; 
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedPayload[i]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;sendPayload[i];&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 값을 랜덤하게 다르게 한다.&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(sendPayload[&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; 
        &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedPayload[rand()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BUFFER_SIZE]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)rand()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0xff&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt; 
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;startMs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;millis();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedCRC&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;genCRC(receivedPayload,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;BUFFER_SIZE);&lt;/span&gt;    
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;endMs&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;millis()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;startMs;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++count;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;total&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;endMs;&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;unsigned&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;short&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;errorCode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;error(sendCRC,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;receivedCRC);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// if(count == 1000) 을 제거하면 값들이 출력되는 것을 볼 수 있다.&lt;/span&gt;
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(count&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;\nBuffer length  : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(BUFFER_SIZE);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Latency average : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println(&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)total&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)count),&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Last send CRC : 0x&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)String(sendCRC,HEX).c_str());&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Last received CRC : 0x&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)String(receivedCRC,HEX).c_str());&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.print(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Last received CRC error : &quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
      &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Serial.println((&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*)((errorCode&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)?&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;OK&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:(String(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;error - 0x&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;String(errorCode,HEX))).c_str());&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; 
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt; CRC 값을 생성하는 함수에&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt;32, 64, 128, 256, 512 바이트 버퍼&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt;값을 넣어서 실행 시간을 확인하도록 하였다&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 하지만, 이 테스트 방법에는 두 가지의 큰 문제점이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(51, 51, 51);&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &amp;nbsp;첫 번째로&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;32byte 부터 64&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;byte 크기의&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;버퍼를 넣었을 때, CRC 생성 함수 실행 시간이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;0ms 가 나올수도 있고 1ms 가 나올수도 있다는 것이다. 아두이노에서 micro 나&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;nano 시간을 구하기도 어렵다.&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;그래서 genCRC 함수를 1000번 실행시켜서 그 평균을 구하도록 하였다(...) genCRC 함수 호출이&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;1ms 미만으로&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 이루어지는 경우가 많다면 평균 시간이 점점 낮아질 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;두 번째 문제는 결과의&amp;nbsp;정확도와&amp;nbsp;신뢰성이다. 이 것을 위해서 CRC 테이블의 모든 값을 훑는 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;테스트를 하&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;는 것이 가장 좋지만&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;, 대충 성능을 비교하도록 하는 것이기 때문에 간단하게 테스트를 돌려 보았다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp; 결과는 아래와 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 433px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2360EF3F5430D96727&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2360EF3F5430D96727&quot; width=&quot;433&quot; height=&quot;315&quot; filename=&quot;차트.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;A 는 미리 생성된 CRC 테이블을 사용하지 않은 것이고,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51);&quot;&gt;B 는 미리 생성된 CRC 테이블을 사용한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;A의 바이너리 스케치 사이즈 :&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 20px; background-color: transparent;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;7,478 바이트 (최대 32,256 바이트)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;font-size: 11pt; color: rgb(51, 51, 51);&quot;&gt;B 의 바이너리 스케치 사이즈 : 7,880 바이트 (최대 32,256 바이트)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 20px; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;402byte 차이가 난다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;예상대로 성능차이가 꽤 많이 생긴다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;하지만&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;CRC 테이블을 사용하면 그&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; color: rgb(51, 51, 51); background-color: transparent;&quot;&gt;만큼의 메모리를 점유한다는 것도 잊지 말자.&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/기타,연구</category>
      <category>CITT</category>
      <category>CRC16</category>
      <category>아두이노 CRC</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/56</guid>
      <comments>https://yagnu.tistory.com/56#entry56comment</comments>
      <pubDate>Sun, 5 Oct 2014 14:47:46 +0900</pubDate>
    </item>
    <item>
      <title>[TIP] Activity 활성화 및 비활성화.</title>
      <link>https://yagnu.tistory.com/54</link>
      <description>&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 우선 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;AndroidManifest.xml &lt;/span&gt;에서 액티비티를 설정할 때, 속성값으로 액티비티 활성화/비활성화 값을 줄 수 있다. 만약 액티비티 비활성화를 한다면, &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;Context&lt;/span&gt; 내의 &lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;startActivity&lt;/span&gt; 메소드를 이용하여 비활성화 된 액티비티를 호출시 앱은 &lt;span style=&quot;color: rgb(103, 0, 0);&quot;&gt;ActivityNotFoundException&lt;/span&gt; 을 발생시키고 크래쉬가 발생하게 된다. &amp;nbsp;또&lt;span style=&quot;color: rgb(34, 116, 28);&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;런처에서 실행시키기 위하여&amp;nbsp;&lt;/span&gt;&amp;lt;activity&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;내부의 설정 앨리먼트&lt;/span&gt;&amp;nbsp;&amp;lt;intent-filter&amp;gt;&lt;/span&gt; 로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(34, 116, 28);&quot;&gt;&amp;nbsp;&amp;lt;action android:name=&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&quot;android.intent.action.MAIN&quot;&lt;/span&gt;/&amp;gt; &lt;/span&gt;과&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255);&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(34, 116, 28);&quot;&gt;&amp;lt;category android:name=&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;android.intent.category.LAUNCHER&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt; 옵션을 지정해줬다고 해도 런처내에 액티비티의 아이콘이 표시되지 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;그리고, 이 것을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;Manifest 파일에서만이 아닌 코드상에서도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;PackageManager&lt;/span&gt; 의 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;setComponentEnabledSetting&lt;/span&gt; 으로&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: rgb(0, 0, 0); font-size: 10pt; line-height: 1.5;&quot;&gt;제어할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 사용법은 무지 간단한데, 만약 Activity 내부에서 호출한다면 다음과 같은 코드를 사용하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: 1.5;&quot;&gt;&lt;b&gt;액티비티 비활성화:&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: 1.5; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;PackageManager&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pm&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageManager();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pm.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;setComponentEnabledSetting&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ComponentName(getApplicationContext(),&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HiddenActivity.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;),&lt;/span&gt; 
						 &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;PackageManager.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;COMPONENT_ENABLED_STATE_DISABLED&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 만약 두 번째 인자를&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&amp;nbsp;COMPONENT_ENABLED_STATE_ENABLED&lt;/span&gt; 로 준다면 비활성화된 액티비티는 다시 활성화가 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 세 번째 인자를 0으로 준다면 이 설정이 종료된 시점에서 액티비티가 강제 종료되게 되는데, 만약 이 인자값을 &lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt;&quot;&gt;PackageManager.DONT_KILL_APP&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 를 주게 된다면 앱은 종료되지 않은 상태로 설정값만 바뀌게 된다. 다만 어떻게 동작할지 모르니 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;주의하여 사용하여야 한다. (&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;안드로이드&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;API&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;레퍼런스 바로가기 링크&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;) &amp;nbsp;또 한가지 주의할 점은, 만약&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 10pt; line-height: 20px; background-color: transparent;&quot;&gt;setComponentEnabledSetting &lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;메소드의 세&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;번째 인자값을 0으로 줬을 때 이 메소드의 호출이 종료되는 시점에 앱이 종료된다는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 이 메소드를 통하여 설정한 액티비티의 활성화/비활성화 속성은 저장되어, &amp;nbsp;앱을 강제종료하거나&amp;nbsp;재부팅을 하여도 계속 유지된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 다음 예제를 통하여 어떻게 동작하는지 한 번 살펴보자.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt; background-color: transparent; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; 우선 액티비티를 두 개를 만들고, 액티비티에 서로 다른 아이콘을 붙여놓았다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5; text-align: center;&quot;&gt;&lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 207px;&quot;&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 100px; width: 100px; height: 100px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/22447034541687193E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F22447034541687193E&quot; width=&quot;100&quot; height=&quot;100&quot; filename=&quot;ic_launcher_1.png&quot; filemime=&quot;image/png&quot; style=&quot;width: 100px; height: 100px;&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 100px; width: 100px; height: 100px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26698F37541686FB2D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26698F37541686FB2D&quot; width=&quot;100&quot; height=&quot;100&quot; filename=&quot;ic_launcher_2.png&quot; filemime=&quot;image/png&quot; style=&quot;width: 100px; height: 100px;&quot;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;좌측&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;의 아이콘 이름은 ic_launcher_1&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;우측의 아이콘 이름은 &amp;nbsp;ic_launcher_2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 1px;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;b style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px;&quot;&gt;AndroidManifest.xml:&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;... 생략&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;activity&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;MainActivity&quot;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:icon=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;@drawable/ic_launcher_1&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;intent-filter&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;action&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android.intent.action.MAIN&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;category&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android.intent.category.LAUNCHER&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;
        
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;activity&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;HiddenActivity&quot;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:icon=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;@drawable/ic_launcher_2&quot;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:label=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Hidden&quot;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:enabled=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;intent-filter&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;action&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android.intent.action.MAIN&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;category&lt;/span&gt; &lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;android:name=&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;android.intent.category.LAUNCHER&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;HiddenActivity.java:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;HiddenActivity&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;MainActivity{&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;MainActivity.java:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;MainActivity&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(Bundle&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;savedInstanceState)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(savedInstanceState);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 프레임 레이아웃을 만들고, &lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 여기에 버튼을 하나 생성한다.&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 그리고 프레임 레이아웃을 Context View 로 정의한다.&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FrameLayout&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;layout&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FrameLayout(getApplicationContext());&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Button&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buttonHiddenActivityEnable&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Button(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buttonHiddenActivityEnable.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;setText&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(isThisHiddenActivity()?&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Disable this Activity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Enable HiddenActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FrameLayout.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;LayoutParams&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;params&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FrameLayout.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(FrameLayout.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;WRAP_CONTENT&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;FrameLayout.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;WRAP_CONTENT&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;params.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;gravity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Gravity.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;CENTER&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buttonHiddenActivityEnable.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;setLayoutParams&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(params);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;layout.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;addView&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(buttonHiddenActivityEnable);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;buttonHiddenActivityEnable.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;setOnClickListener&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(mOnClickListener);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setContentView(layout);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;setTitle((isThisHiddenActivity()?&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Hidden Activity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Main Activity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;));&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OnClickListener&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;mOnClickListener&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OnClickListener()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(View&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;v)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;finish();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;PackageManager&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pm&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;getPackageManager();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pm.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;setComponentEnabledSetting&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ComponentName(getApplicationContext(),&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HiddenActivity.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;),&lt;/span&gt; 
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(isThisHiddenActivity()?PackageManager.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;COMPONENT_ENABLED_STATE_DISABLED&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:PackageManager.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;COMPONENT_ENABLED_STATE_ENABLED&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;),&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;isThisHiddenActivity&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;instanceof&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HiddenActivity;&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp; 좀 귀찮아서 하나의 액티비티에 구현 코드를 몰아넣었다. 어쨌든 액티비티는 두개다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp; 이 코드를 실행하면 액티비티 실행 아이콘이 하나만 존재한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp; 매니페스트 파일에서 android:enable 값을 false 로 준&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;HiddenActivity 는 런처에 아이콘조차 표시되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 703px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2340D54F54168F0F34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2340D54F54168F0F34&quot; width=&quot;703&quot; height=&quot;316&quot; filename=&quot;1.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; 만약 앱을 실행시켜서 다음 스샷에 있는 버튼을 누른다면 앱이 완전히 종료되고, HiddenActivity 를 띄울수 있는 아이콘이 표시된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 572px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2239764B54168F3714&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2239764B54168F3714&quot; width=&quot;572&quot; height=&quot;762&quot; filename=&quot;2.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;이 버튼은 누르면 앱이 종료되고, HiddenActivity 를 띄울 수 있게 된다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 710px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/241AAD4854168F761B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241AAD4854168F761B&quot; width=&quot;710&quot; height=&quot;343&quot; filename=&quot;3.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;이제 HiddenActivity 를 띄워서&amp;nbsp;버튼을 누르면 다시 HiddenActivity 는 disabled 되고 버튼은 감춰진다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;font color=&quot;#000000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;(다시 enable 하기전 까지는&amp;nbsp;사용할 수 없게 된다.)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 690px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2144065054168F9624&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2144065054168F9624&quot; width=&quot;690&quot; height=&quot;710&quot; filename=&quot;4.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 13px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/Android</category>
      <category>activity</category>
      <category>Android</category>
      <category>안드로이드</category>
      <category>안드로이드 개발</category>
      <category>액티비티</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/54</guid>
      <comments>https://yagnu.tistory.com/54#entry54comment</comments>
      <pubDate>Mon, 15 Sep 2014 16:06:06 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA:병렬 프로그래밍 - 2] CyclicBarrier 사용하기.</title>
      <link>https://yagnu.tistory.com/53</link>
      <description>&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt;&quot;&gt;CyclicBarrier 를 사용하면 동시에 실행되는&amp;nbsp;쓰레드 내부 원하는 지점에서 대기를 걸어주고 모든 쓰레드가 대기 상태에 들어갔을때, 대기를 풀어주는 동작을 할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;nbsp; 예를들어&amp;nbsp;설명하면 N 개의 쓰레드가 돌고 있다고 가정하고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;CyclicBarrier 를 생성할 때 인자값으로 N 을 준다. 각각의 쓰레드 내에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;CyclicBarrier 의 await() 를 호출하고&amp;nbsp;호출 횟수가 N번에 도달했을 때, N개의 모든&amp;nbsp;쓰레드의 대기 상태가 해제된다. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;아래 그림 참고. 설명이 조금 애매한데, 그냥 대충 보고&amp;nbsp;눈치것 이해하는 것이 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 461px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2548383C540527B416&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2548383C540527B416&quot; width=&quot;461&quot; height=&quot;516&quot; filename=&quot;제목 없는 그림 (6).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: normal;&quot;&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: normal;&quot;&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;CyclicBarrier를 활용한 예제코드&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;strong style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;main&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	 
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;THREADS&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; 
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CyclicBarrier&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;cyclicBarrier&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CyclicBarrier(THREADS&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt; 
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;RandomSleepRunnable&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;implements&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Runnable&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Random&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;random&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Random(System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;currentTimeMillis&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;RandomSleepRunnable&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
		&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : Start.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 1000ms 에서 2000ms 사이의 딜레이 값을 랜덤하게 생성.&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;random.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;nextInt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1001&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : Sleep &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;ms&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 랜덤하게 주어진 값을 이용하여 딜레이를 준다.&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(delay);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : End Sleep&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
				
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 대기. cyclicBarrier 를 생성할 때, 인자값으로 준 count 개수만큼&lt;/span&gt;
				&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// await를 호출한다면 모든 쓰레드의 wait 상태가 종료된다.  &lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;cyclicBarrier.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(BrokenBarrierException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : End.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 쓰레드를 10개 생성.&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;THREADS;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;RandomSleepRunnable(i)).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;결과:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1128&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1205&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1968&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1834&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1020&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/53</guid>
      <comments>https://yagnu.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 2 Sep 2014 11:13:30 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA:병렬 프로그래밍 - 1] CountDownLatch 사용하기.</title>
      <link>https://yagnu.tistory.com/52</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 만약 백그라운드에서 실행되고 있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;싱글 쓰레드가 종료되기를 기다리는 코드를 작성해야 한다면 당장 Thread 클래스의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;join() 메소드&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;부터 떠올리게 될 것이다. 아래와 같이 말이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;간단한 join() 사용예:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;thread&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;start trhead.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;end trhead.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;};&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 스레드가 끝날때 까지 대기한다.&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread terminated.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 하지만, 멀티 쓰레드에서 모든 동작이 끝나기를 기다려야 하는 상황이라면&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;join 을 사용하기 조금 난감하다. 이럴 땐&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html,&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;CountDownLatch&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;를 사용하면 참 편리하다. (안드로이드 API 설명 페이지로 링크합니다. 이 곳이 오라클 페이지보다 보기 좋아서;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 20px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; background-color: transparent; line-height: 1.5;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; background-color: transparent; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;CountDownLatch 는&amp;nbsp;생성할 때 1 이상의 카운트를 인자값으로 받는다. 그리고 특정 메소드 내부에서 await() 메소드로 대기 상태를 만들어주고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;CountDownLatch 를 생성할 때 설정한 count 가 0이 되기만들 기다렸다가 0이 되는 순간 대기 상태를 해제한다. 원리는 아래 그림과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 462px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2255A741540409FF21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2255A741540409FF21&quot; width=&quot;462&quot; height=&quot;597&quot; filename=&quot;제목 없는 그림 (5).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 13px; line-height: 20px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;예제코드를 살펴보면 아래와 같다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;CountDownLatch 를 활용한 예제코드:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;main&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;THREADS&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; 
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CountDownLatch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lacth&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;CountDownLatch(THREADS);&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207); text-decoration: underline;&quot;&gt;RandomSleepRunnable&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;implements&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Runnable&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Random&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;random&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Random(System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;currentTimeMillis&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;());&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;RandomSleepRunnable&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id;&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(255, 165, 0);&quot;&gt;@Override&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : Start.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 1000ms 에서 2000ms 사이의 딜레이 값을 랜덤하게 생성.&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;random.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;nextInt&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1001&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : Sleep &quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;ms&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;sleep&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(delay);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;Thread(&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;) : End.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// lacth 의 카운터에서 -1. &lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lacth.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;countDown&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;main&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(String[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;args)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 쓰레드를 10개 생성.&lt;/span&gt;
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;THREADS;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;Thread&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;RandomSleepRunnable(i)).&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		
		&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// lacth 의 카운트가 0이 될 때 까지 대기한다.&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;lacth.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 아래와 같이 TimeOut 을 설정할 수 있다.&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 아래의 경우는, 만약 2000ms 동안 latch 의 카운트가 0 되지 않는다면&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// wait 상태를 해제하고 다음 동작으로 넘어간다.&lt;/span&gt;
			&lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;//lacth.await(2000, TimeUnit.MILLISECONDS);&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(InterruptedException&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;e.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;System.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;out&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(237, 157, 19);&quot;&gt;&quot;All threads terminated.&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;결과:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; background-color: rgb(32, 32, 32); overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1267&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1168&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1085&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1573&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1868&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1552&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1869&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1001&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1636&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Start.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Sleep&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1573&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ms&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Thread(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;End.&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;All&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;threads&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;terminated.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;매우 간단하고 사용하기도 편리하다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/Java</category>
      <category>CountDownLatch</category>
      <category>Java</category>
      <category>병렬 프로그래밍</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/52</guid>
      <comments>https://yagnu.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 19 Aug 2014 13:41:13 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 OLED 제어하기.</title>
      <link>https://yagnu.tistory.com/51</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이전에 알리 익스프레스에서 구입한 OLED 사용기(&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 15px; line-height: 22px;&quot;&gt;&lt;a href=&quot;http://dev.re.kr/47&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://dev.re.kr/47&lt;/a&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; background-color: transparent;&quot;&gt;에서 OLED 제어에&amp;nbsp;대하여 간략하게 올린적이 있습니다만 그것보다&amp;nbsp;더 편리한 u8glib 사용에&amp;nbsp;대하여 정리해 보도록 하겠습니다. &amp;nbsp;좀 더 자세한 튜토리얼과 레퍼런스는 이 곳&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 15px; line-height: 22px;&quot;&gt;&lt;a href=&quot;https://code.google.com/p/u8glib/wiki/u8glib?tm=6&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://code.google.com/p/u8glib/wiki/u8glib?tm=6&lt;/a&gt;&amp;nbsp;페이지 에서 확인 할&amp;nbsp;수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 제어하려고 하는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;OLED 가 SPI 로 통신하는지 I2C 로 통신하는지부터 알아야 하며, 내장 컨트롤러에 대한 정보도 알아야 한다. &amp;nbsp;OLED 를 판매하는&amp;nbsp;인터넷 쇼핑몰&amp;nbsp;페이지의 상세 정보나 데이터시트를&amp;nbsp;참고하거나, 모델명으로 구글링해보면 OLED&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 13px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러&lt;/span&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;에 대한 정보를 얻을 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 지금 테스트 해보려는 OLED 는 아래 사진과 같이&amp;nbsp;두 가지 종류이며 모두 알리 익스프레스에서 구매하였다. 아래 왼쪽&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 사진의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;것은 &lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(255, 0, 0);&quot;&gt;I2C&lt;/span&gt; 를 이용하여 통신을 하고 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;SSD1306&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 13px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러를&lt;/span&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;사용하며&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;128x64&lt;/span&gt; 의 해상도를&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;갖고 있고&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;, 오른쪽 사진의 것은 0.5&quot; 에&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;SPI&lt;/span&gt; 를 이용하여 통신을 하고&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 13px; line-height: normal; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;LD7032&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 13px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러를&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 13px; line-height: normal; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;사용하며&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;60x32&lt;/span&gt; 의 해상도를 사용하고 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 223px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/226E793F53F23FF514&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F226E793F53F23FF514&quot; width=&quot;223&quot; height=&quot;216&quot; filename=&quot;스크린샷 2014-08-19 오전 2.58.06.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 294px; font-size: 9pt; line-height: 1.5; width: 294px; height: 215px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/276CE83F53F23FF416&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F276CE83F53F23FF416&quot; width=&quot;294&quot; height=&quot;215&quot; filename=&quot;스크린샷 2014-08-19 오전 2.54.40.png&quot; filemime=&quot;image/png&quot; style=&quot;font-size: 9pt; line-height: 1.5; width: 294px; height: 215px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;&lt;a href=&quot;http://www.aliexpress.com/item/0-5-inch-OLED-display-shield-for-Arduino-OCELL/1944014364.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.aliexpress.com/item/0-5-inch-OLED-display-shield-for-Arduino-OCELL/1944014364.html&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;&lt;a href=&quot;http://www.aliexpress.com/item/White-0-96-I2C-IIC-Serial-128X64-OLED-LCD-LED-Display-Module-for-Arduino-51-Series/1669363955.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.aliexpress.com/item/White-0-96-I2C-IIC-Serial-128X64-OLED-LCD-LED-Display-Module-for-Arduino-51-Series/1669363955.html&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;(판매가 종료되면 링크가 잘릴수도 있습니다.)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;연결 방법은 다음과 같다.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;b&gt;I2C 의 경우 -&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;OLED&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;&amp;nbsp; -&amp;nbsp;아두이노(UNO&amp;nbsp;기준)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;VCC - 5v 혹은 3.3v&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;GND - GND 단자&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;SCL - A5&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;SDA - A4&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;와 같은 순서로 연결하고,&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;b&gt;SPI 일 경우는&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size:10pt; line-height: 16.5px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;OLED&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;&amp;nbsp; - &amp;nbsp; 아두이노&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size:10pt; line-height: 16.5px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 221);&quot;&gt;(UNO&amp;nbsp;기준)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt;VCC &amp;nbsp;- &amp;nbsp;3.3v &amp;nbsp;(OLED 종류에 따라 혹은 5v)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;GND &amp;nbsp;- &amp;nbsp;GND 단자&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;SCK (Clock) - 13&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;MOSI (Data in) - 11&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;CS (Chip select) - 10 또는 다른 임의의 포트.&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;A0 &amp;nbsp;- 9 또는 다른&amp;nbsp;&amp;nbsp;임의의 포트.&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font color=&quot;#ff0000&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;b&gt;Reset - 임의의 포트.&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;와 같은 순서로 연결한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size:10pt;&quot;&gt;&amp;nbsp; 이제 OLED 를 u8glib 라는 라이브러리에 포함되어 있는&amp;nbsp;간단한&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;예제 코드를 돌려보도록 하겠다.&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;a href=&quot;https://code.google.com/p/u8glib/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;https://code.google.com/p/u8glib/&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 으로 들어가서 메인 페이지 중간쯤에 있는&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 10pt; line-height: normal; background-color: transparent;&quot;&gt;U8glib for Arduino 라는 글씨 오른쪽에 있는 다운로드 버튼을 눌러 라이브러리 파일을 다운 받는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 13px; line-height: normal; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;다운로드가 완료되면 압축을 풀어서 아두이노 라이브러리 폴더 내부에&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;압축을 푼 라이브러리 파일이 들어있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;폴더를 통째로 아두이노의 라이브러리 폴더로 복사하고 아두이노툴&amp;nbsp;상단 메뉴에서 &lt;/span&gt;&lt;span style=&quot;color: rgb(246, 246, 246); font-size: 10pt; background-color: rgb(47, 157, 39);&quot;&gt;스케치 -&amp;gt; 라이브러리 가져오기 -&amp;gt; Add Library &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;를 통하여 방금 아두이도 라이브러리 폴더 내에 복사한 U8glib 라이브러리의 폴더를 선택하여 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; 그리고 라이브러이와 같이 포함된 예제 코드(&lt;span style=&quot;background-color: rgb(0, 153, 153); color: rgb(255, 255, 255);&quot;&gt;파일 -&amp;gt; 예제&lt;/span&gt; 를 통하여 불러올 수 있음)&amp;nbsp;중에 HelloWorld를 &lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;한 번 실행시켜보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; 아마 컴파일시에 error 가 떨어질 것이다. 포함된 예제 코드에서는&amp;nbsp;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;u8g 라는 변수가&amp;nbsp;선언되지 않았기 때문이다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(153, 76, 76); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(155, 85, 85); font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(155, 85, 85); font-size: 10pt;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 16.5px; background-color: transparent;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;color: rgb(155, 85, 85); background-color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;sketch_aug19a:133: error: 'u8g' was not declared in this scope&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;(위와 같은 에러가 발생한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(155, 85, 85); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(155, 85, 85); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;예제 코드에서 u8g 라는 변수의 메소드(함수)등을 통하여 OLED 를 제어하는 것을 확인할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; &amp;nbsp;이 변수를 선언하기&amp;nbsp;위하여 아래와 같이 조금 번거롭지만 중요한 과정이 필요하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; 우선 다음&amp;nbsp;페이지에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 16.5px; background-color: transparent;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;a href=&quot;https://code.google.com/p/u8glib/wiki/device&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;https://code.google.com/p/u8glib/wiki/device&lt;/span&gt;&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; 제어&amp;nbsp;하려는 OLED 의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp;이름과 해상도를 이용하여&amp;nbsp;거기에 맞는&amp;nbsp;생성자를 찾아야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; &amp;nbsp;예를 들어 위에 OLED 사진중에 왼쪽에 있는 기기의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러는&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;SSD1306&lt;/span&gt;&amp;nbsp;이며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: arial, sans-serif; font-size: 10pt; line-height: normal; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;128x64 &lt;/span&gt;해상도, 그리고 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;I2C&lt;/span&gt; 를 사용하므로 디바이스 이름은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;u8g_dev_ssd1306_128x64_i2c&lt;/span&gt; 가 되고 따라서 생성자는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent;&quot;&gt;&lt;b&gt;U8GLIB_SSD1306_128X64(U8G_I2C_OPT_NONE)&lt;/b&gt; 가 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent;&quot;&gt;그리고 표의 가장 우측&amp;nbsp;부분에 나와있는 아두이노의 지원 여부에 대하여 확인 해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23061C4853F24BE629&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23061C4853F24BE629&quot; width=&quot;723&quot; height=&quot;96&quot; filename=&quot;스크린샷 2014-08-19 오전 3.53.48.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(35, 35, 35); font-family: verdana; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;(위 표를 통하여 드라이버&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;컨트롤러&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(35, 35, 35); font-family: verdana; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp;이름과 해상도를 통하여 지원되는 OLED 기기와 생성자를 확인해야 한다. )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 10pt;&quot;&gt;U8GLIB_SSD1306_128X64(U8G_I2C_OPT_NONE)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(35, 35, 35); font-family: verdana; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp;이제 생성자를 알았으니 예제 코드 윗 부분 전역 변수 선언부에&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(35, 35, 35); font-family: verdana; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(35, 35, 35); font-family: verdana; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 9pt; background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 9pt; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 10pt; background-color: transparent;&quot;&gt;를 추가시켜 주면 된다. 그리고 예제를 실행 시키면 아래 사진처럼 잘 동작하는 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2411854B53F2A56231&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2411854B53F2A56231&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20140819_011957.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 10pt; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Monaco, DejaVu Sans Mono, Bitstream Vera Sans Mono, Lucida Console, monospace&quot;&gt;&lt;span style=&quot;line-height: normal; font-size: 10pt;&quot;&gt;&amp;nbsp;위 OLED 사진의 오른쪽에 있는 기기는&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-family: arial, sans-serif; font-size: 13px; line-height: normal; background-color: transparent;&quot;&gt;LD7032 &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; font-size: 13px; line-height: normal; background-color: transparent;&quot;&gt;컨트롤러와&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: normal; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; color: rgb(255, 0, 0);&quot;&gt;SPI&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: normal; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;&quot;&gt; 를 사용하고 &lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: normal; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; color: rgb(255, 0, 0);&quot;&gt;60x32&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: normal; color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;&quot;&gt; 픽셀을 사용하며&amp;nbsp;기본(하드웨어) SPI포트를 사용하므로 아래와 같은 생성자를 사용하면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;Monaco, DejaVu Sans Mono, Bitstream Vera Sans Mono, Lucida Console, monospace&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/263C3F3353F28C5405&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F263C3F3353F28C5405&quot; width=&quot;723&quot; height=&quot;35&quot; filename=&quot;스크린샷 2014-08-19 오전 8.26.38.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 10pt; background-color: transparent;&quot;&gt;U8GLIB_LD7032_60x32(cs, a0 [, reset])&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; font-size: 9pt; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp; 이 생성자에 첫 번째 인자값은 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;SPI&lt;/span&gt; 로 통신하는 &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;OLED&lt;/span&gt; 에 연결한&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;cs 의 포트 번호를 입력하면 되고, 두 번째 인자로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;a0 에 연결한 포&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;트 번호, 세 번째 인자로 reset 에 연결한 포트 번호를 입력하면 된다. reset은&amp;nbsp;옵션이다. 사용하는 환경에 따라서 넣지 않아도 된다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; 만약 점퍼 케이블을&amp;nbsp;이용하여 OLED 의 cs 단자를 아두이노의 10 포트에, a0 을 9번 포트에, 그리고 reset 을 2번 포트에 연결할 경우 다음과 같이 사용하여 변수를 생성할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt; background-color: transparent; line-height: 1.5;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); font-size: 11px; line-height: 16.5px;&quot;&gt;&lt;font color=&quot;#232323&quot; face=&quot;verdana&quot;&gt;&lt;span style=&quot;font-size: 10pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;U8GLIB_LD7032_60x32 u8g(10, 9 , 2);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&amp;nbsp;마찬가지로 위의 코드를&amp;nbsp;전역변수 선언부에 추가한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&amp;nbsp;업로드 하면&amp;nbsp;예제 코드가 정상적으로 실행되는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/241D244B53F2A56521&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241D244B53F2A56521&quot; width=&quot;723&quot; height=&quot;542&quot; filename=&quot;IMG_20140819_024655.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; line-height: normal; background-color: transparent; font-size: 10pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;만약 여러분이 이 포스팅에서 언급한 OLED 와 다른 기기를 갖고 있어도&amp;nbsp;컨트롤러 이름과 해상도등 몇 가지 사양을 알고 있다면&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana; font-size: 10pt; line-height: 16.5px; color: rgb(0, 0, 0);&quot;&gt;이 곳&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://code.google.com/p/u8glib/wiki/device&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-family: verdana; font-size:10pt; line-height: 16.5px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;https://code.google.com/p/u8glib/wiki/device&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: transparent; color: rgb(0, 0, 0);&quot;&gt;에서 지원 디바이스 목록을 확인한 뒤에 제공되는 생성자를 이용하여 언제든지 활용할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana; font-size: 10pt; line-height: 16.5px; background-color: transparent; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#000000&quot; face=&quot;verdana&quot; size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 16.5px;&quot;&gt;아래는 테스트 영상. u8glib 에 들어있는 예제 코드 일부를 돌려본 영상이다.&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;background-color: rgb(253, 253, 253); color: rgb(35, 35, 35); font-family: verdana; font-size: 10pt; line-height: 16.5px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: rgb(35, 35, 35); font-family: verdana; font-size: 11px; line-height: 16.5px; background-color: rgb(253, 253, 253);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://www.youtube.com/embed/Yy-F9oyejqU&quot; width=&quot;800&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/-zvAcjMo300&quot; width=&quot;800&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/6EXU2wy9SGk&quot; width=&quot;800&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;초점이 잘 안 맞는다;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>oled</category>
      <category>U8glib</category>
      <category>아두이노</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/51</guid>
      <comments>https://yagnu.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 19 Aug 2014 10:17:47 +0900</pubDate>
    </item>
    <item>
      <title>아두이노에서 PWM 제어와 NPN 트랜지스터를 이용한 LED 밝기 및 모터 속도 조절.</title>
      <link>https://yagnu.tistory.com/50</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;3V 를 소비하는 LED 가 있다고 가정해 보자. 이 LED 의 밝기를 제어하기 위하여 전압을 변경할 수 있지만, 좀 더 간단한 방법으로 아두이노의 PWM 제어 기능을 이용하여 밝기를 조절할 수 있다. 만약 LED 에 전류를&amp;nbsp;1초간 공급했다가 다시 1초동안 끊고 또 다시 1초간 공급하는 과정을 반복한다면 우리 눈에는 LED 가 깜빡거리는 것으로 보인다. 하지만, &amp;nbsp;0.1 초 간격으로 신호를 끊고 다시 연결하고를 반복한다면 우리눈에는 LED 밝기가 원래 밝기에 비해 좀 어둡게 출력되는 것으로 보일 것이다. 이런 신호 폭을 조절하여 LED 의 밝기를 제어할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;PWM 제어에 대한 자세한 설명 :&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;http://www.hanbit.co.kr/network/view.html?bi_id=1087&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;http://www.hanbit.co.kr/network/view.html?bi_id=1087&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 아두이노 우노에서는 3,5,6,9,10,11 포트에서 이 PWM 제어를 사용할 수 있으며, &amp;nbsp;포트 번호 옆에&amp;nbsp;물결&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;(~) 모양이&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;인쇄되어 있어&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; PWM 사용 가능한 포트임을&amp;nbsp;알려주고 있다. 이 포트를 이용하여 PWM 제어를 사용하기 위해서는 &lt;span style=&quot;color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);&quot;&gt;analogWrite(핀번호, 0~255 값&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); background-color: rgb(255, 0, 0);&quot;&gt;)&lt;/span&gt; 함수를&amp;nbsp;&amp;nbsp;사용해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;PWM 으로 높은 전압이나 전류 제어를 위하여&amp;nbsp;NPN&amp;nbsp;트랜지스터가 필요하다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; (이 소자를 이용한다면&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 10pt; background-color: rgb(255, 0, 0);&quot;&gt;아두이노의 신호로 5v를 초과하는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 255, 255); font-size: 10pt; background-color: rgb(255, 0, 0);&quot;&gt;높은 전압을 제어할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 사실 LED 같은 경우에는 NPN 트랜지스터가 없어도 충분히 쓸 수 있지만 모터는 반드시 사용해야 한다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&amp;nbsp;아두이노의 디지털 신호의 전류는&amp;nbsp; 고작 40mA 밖에 내지 못 하기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; 디지털 회로에서 NPN 트랜지스터의 역할은 아래 그림과 같이 전류가 흐를 수 있도록 스위칭을 해준다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &lt;span style=&quot;font-size: 9pt;&quot;&gt;(반대로 PNP 트랜지스터는 전류가 흐르고 있을 때, Base 에 신호가 들어가면 스위치가 떨어진다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 274px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2227203F543B2ACF0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2227203F543B2ACF0A&quot; width=&quot;274&quot; height=&quot;277&quot; filename=&quot;제목 없는 그림 (8).png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; 만약 위 그림에서 아두이노의 디지털 포트에 연결된 Base 에 전류가 흐르게 되면 스위치는 닫히게 된다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&amp;nbsp;(Collector 와 Base 와 Emitter 의 위치는 각 소자의 데이터 시트를 참고.) 여기서 주의할 점은 아두이노의 디지털 포트와&amp;nbsp;Base 사이에 저&lt;span style=&quot;font-size: 10pt;&quot;&gt;항을 달아야 한다는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 아래 회로에서는 2N2222 를 사용하였다, 또 전압이나 전류의 특성에 따라서 TIP120 과 같은 다른 소자를 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2136FA4D53E6DDE72E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2136FA4D53E6DDE72E&quot; width=&quot;723&quot; height=&quot;578&quot; filename=&quot;ohm.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;위 그림에 있는 아두이노는 USB연결등 몇 가지를 제외하면&amp;nbsp;아두이노 uno 와 스펙이 거의 같은 아두이노 나노의 호환 보드이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13px; line-height: 20px; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;아두이노 &amp;nbsp;VCC 5v&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;--------&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(255, 0, 0);&quot;&gt;----&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(255, 0, 0);&quot;&gt;--------------&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;----&lt;/span&gt; LED +&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;아두이노 &amp;nbsp; GND &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;-------------------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(0, 0, 0);&quot;&gt;----&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(0, 0, 0);&quot;&gt;----&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;-----&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp;2N2222 &lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp;pin 3. (&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;emitter)&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;아두이노 &amp;nbsp;6 번 포트 &lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;2.2KOhm &lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;---------&lt;/span&gt; 2N2222&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;pin1 &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size:12pt; line-height: 24px;&quot;&gt;base)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;LED-&amp;nbsp;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;----------------------&lt;/span&gt; 680Ohm&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;-----------&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;2N2222 pin 2 (collector)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;680Ohm 은 LED 특성에 맞춰서 사용한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define CTR_PIN 6&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(){&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pinMode(CTR_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OUTPUT);&lt;/span&gt;  
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;


&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(){&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;180&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i++){&lt;/span&gt;&lt;/p&gt;&lt;p&gt;    // 점차 밝아졌다 낮아졌다를 반복하도록 한다.
    &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;int&lt;/span&gt; &lt;font color=&quot;#d0d0d0&quot;&gt;val&lt;/font&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(int)map((int)((sin(DEG_TO_RAD&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;i)&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;*&lt;/span&gt; &lt;font color=&quot;#3677a9&quot;&gt;1000.0f&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;)),&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt; &lt;font color=&quot;#3677a9&quot;&gt;1000&lt;/font&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;255&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208); font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: Verdana, Helvetica, Arial, sans-serif; color: rgb(208, 208, 208);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;analogWrite(CTR_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;val&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;이 코드에서는 PWM 의 제어 범위인 0~255 를 사용하지 않고, 0~128을 사용하였다. 128이상부터 255까지는 값이 차이가 무의미할 정도로 밝기가 비슷하므로 최대 값으로 128으로 주게 되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; font-family: Verdana;&quot;&gt;결과:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/wYPIOvwON7g&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아래 예제에서는 블루투스와 안드로이드폰을 이용하여 밝기를 제어해 보는 것을 구현해 보았다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 451px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/233E804753FA03150A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F233E804753FA03150A&quot; width=&quot;451&quot; height=&quot;542&quot; filename=&quot;2n2222_bt.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 우선 아두이노의 코드이다. 소프트웨어시리얼로부터 0부타 255 까지의 값을 받아 PWM 포트로 출력해주는 코드이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal;&quot;&gt;&lt;strong&gt;Code:&lt;/strong&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#include &amp;lt;SoftwareSerial.h&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define RX_PIN 3 &lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define TX_PIN 2 &lt;/span&gt;

&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define LED_PIN 13 &lt;/span&gt;
&lt;span style=&quot;color: rgb(205, 40, 40); font-weight: bold;&quot;&gt;#define PWM_PIN 6 &lt;/span&gt;

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;SoftwareSerial&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;swSerial&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(RX_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;TX_PIN); // 첫 번째 인자 : RX, 두 번째 인자 TX&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;uint8_t&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data;&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;swSerial.begin(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;9600&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
 &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pinMode(PWM_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OUTPUT);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;pinMode(LED_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;OUTPUT);&lt;/span&gt;
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;

&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(68, 127, 207);&quot;&gt;loop&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;digitalWrite(LED_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;LOW);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(153, 153, 153); font-style: italic;&quot;&gt;// 데이터가 들어올때 까지 대기.&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(!swSerial.available());&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;digitalWrite(LED_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;HIGH);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;(swSerial.available())&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;swSerial.read();&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;analogWrite(PWM_PIN,&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;/&lt;/span&gt; &lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;delay(&lt;/span&gt;&lt;span style=&quot;color: rgb(54, 119, 169);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;   

&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; data 는 0부터 255까지 받을 수 있는데, 일부러 5를 나누어 줬다. 낮은 값에서 값이 빛이 변할때는 변화가 커 보이고,&amp;nbsp;높은 값에서는 값의 변화에 따라 빛의 밝기가&amp;nbsp;별 차이가 없어보이기 때문이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 16px; line-height: normal;&quot;&gt;Android Project:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: normal;&quot;&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/ice3x2/HC-06_Arduino_Echo/tree/SlideControl&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/ice3x2/HC-06_Arduino_Echo/tree/SlideControl&lt;/a&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: transparent; line-height: normal;&quot;&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Verdana, Helvetica, Arial, sans-serif&quot; size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: normal;&quot;&gt;&lt;b&gt;이전에 만들었던 &lt;a href=&quot;http://dev.re.kr/38&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;블루투스 에코 예제&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;b style=&quot;line-height: normal; font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; background-color: transparent;&quot;&gt;를 수정하였다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 16px; line-height: normal;&quot;&gt;결과:&lt;/strong&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://www.youtube.com/embed/quwsSKJQwiE&quot; width=&quot;700&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Tip120 을 활용하여 PC 용 쿨링팬을 컨트롤.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;b&gt;아래 쿨링팬은 12v 로 동작하며 2N2222 대신 좀 더 높은 전압(max&amp;nbsp;60v) 과 높은 전류(max 8A)&amp;nbsp;를 스위칭 할 수 있는 &lt;strike&gt;&lt;span style=&quot;color: rgb(140, 140, 140);&quot;&gt;그리고 비싼&lt;/span&gt;&lt;/strike&gt;&amp;nbsp;TIP120 을 이용하여&amp;nbsp;다음과 같은 회로를 구성하였다. 물론 2N2222 나 기타 다른 NPN 트랜지스터를&amp;nbsp;사용하여도 상관 없다.&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;b&gt;(간혹 PWM 제어가 되지 않는 쿨링팬이 있다. 실제 예로 여러번 테스트 결과 싸구려 쿨러는 제어가 잘 되지만, 쿨러마스터 터빈 마스터는&amp;nbsp;제어가 안 된다.)&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;12v 아답터 +&amp;nbsp;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;--&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;-&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span style=&quot;line-height: 20px; font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;--------&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(255, 0, 0);&quot;&gt;----&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(255, 0, 0);&quot;&gt;---------------&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 20px;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;---&lt;/span&gt;&amp;nbsp;12v PC Fan +&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;GND&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 20px; background-color: transparent; color: rgb(0, 0, 0);&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;-----&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp;Tip120&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&amp;nbsp;pin 3. (&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: transparent; line-height: 24px;&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;emitter)&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;아두이노 &amp;nbsp;6 번 포트&amp;nbsp;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;------&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;2.2KOhm&amp;nbsp;&lt;span style=&quot;color: rgb(47, 157, 39);&quot;&gt;---------&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;Tip120&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;pin1 &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-size: 12pt; line-height: 24px;&quot;&gt;base)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 20px;&quot;&gt;12v PC Fan - &lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;------------&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;-----&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;-----&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;-----&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(255, 94, 0);&quot;&gt;--------&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: transparent; font-size: 12pt; line-height: 1.5;&quot;&gt;Tip120&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;background-color: transparent; font-size: 16px; line-height: 24px;&quot;&gt;&amp;nbsp;pin 2 (collector)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;b&gt;그 외의 블루투스 연결과&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size:12pt; background-color: transparent; line-height: 1.5;&quot;&gt;아두이노&amp;nbsp;코드와 안드로이드용 프로젝트는 위에서 소개한 것을 그대로 적용하면 된다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/ZV3O1tXfuKI&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>2N2222</category>
      <category>arduino</category>
      <category>HC-06</category>
      <category>NPN</category>
      <category>PWM</category>
      <category>블루투스</category>
      <category>아두이노</category>
      <category>아두이노 12v</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/50</guid>
      <comments>https://yagnu.tistory.com/50#entry50comment</comments>
      <pubDate>Sun, 10 Aug 2014 12:52:47 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드에서 현재 Task 에 있는 Activity 인스턴스 가져오기.</title>
      <link>https://yagnu.tistory.com/49</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 우선 가장 간단한 방법으로는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: AppleGothic; font-size: 11pt; line-height: 21.333332061767578px; background-color: transparent;&quot;&gt;ActivityManager 를 사용하는 방법이다. 그러나 이 것으로 현재 메모리상에 생성된 Activity 의 객체들을 가져올수도 없고 매니페스트에 퍼미션도 줘야 하는데 영 찜찜하다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: AppleGothic; font-size: 11pt; line-height: 21.333332061767578px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;다른 개발자들은 동적으로 ActivityStack 에 있는 액티비티의 인스턴스를 어떻게 가져오나 궁금하여 스택 오버플로우를 찾아봤는데, 많은 개발자들이 Application 클래스를 상속받아 이 곳에 Activity를 관리하는&amp;nbsp;별도의 리스트를 만들어 사용하고 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: AppleGothic; font-size: 11pt; line-height: 21.333332061767578px; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;하지만 프로젝트마다 이렇게 구현하면 여간 귀찮은 것이 아니라서,&amp;nbsp;그냥 각 Task 내의&amp;nbsp;Activity 의 래퍼런스들을 담고있는&amp;nbsp;리스트를 갖고 있는&amp;nbsp;싱글톤 객체를 이용하여 ActivityStack 을 구현해 보았다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: AppleGothic; font-size: 11pt; line-height: 21.333332061767578px; background-color: transparent;&quot;&gt;&amp;nbsp; 우선 코드는 다음과 같다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;
&lt;a onclick=&quot;layer_toggle(document.getElementById('A')); layer_toggle(document.getElementById('B')); return false;&quot; href=&quot;#&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;ActivityStack.java 코드 보기&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div id=&quot;B&quot; style=&quot;display: none;&quot;&gt;
&lt;a onclick=&quot;layer_toggle(document.getElementById('A')); layer_toggle(document.getElementById('B')); return false;&quot; href=&quot;#&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;ActivityStack.java 코드 감추기&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;package&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;kr.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;re&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;Dev&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ActivityStack&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;java.lang.ref.WeakReference&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;java.util.ArrayList&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;java.util.HashSet&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;java.util.Iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;java.util.Set&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;android.annotation.SuppressLint&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;android.app.Activity&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;android.util.Log&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; * ActivityStack&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; * Dev.re.kr&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; * @author ice3x2@gmail.com&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; */&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;

	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;sLastActivityNumber&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;mThis;&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList;&lt;/span&gt;
	 
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * Activity 등록 정보.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @author ice3x2&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;WeakReference&amp;lt;Activity&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;WeakReference&amp;lt;Activity&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;isResume&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;

	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;ActivityStack&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;// public :&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * ActivityStack 의 싱글 인스턴스를 가져온다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return ActivityStack 의 인스턴스.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(mThis&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;mThis&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;mThis;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 현재 프로세스 상에 존재하는 Task 의 ID 값들을 가져온다. 이 것은 Activity 내의 getTaskId 메소드로 얻을 수 있는 값과 일치한다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return TaskID TaskID 들의 리스트.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getAliveTaskIDs&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Set&amp;lt;Integer&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;HashSet&amp;lt;Integer&amp;gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;taskID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		 &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveTaskIds&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;toArray&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[&lt;/span&gt;&lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;]);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveTaskIds;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Activity 가 BaseActivity 로 있는 Task 의 ID 값들을 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param baseActivityClass BaseActivity 가 되는 Activity 의 클래스 정보.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return TaskID 들의 리스트.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getAliveTaskIDByBaseActvity&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Class&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;baseActivityClass)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList(baseActivityClass);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Set&amp;lt;Integer&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;HashSet&amp;lt;Integer&amp;gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;taskID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		 &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveTaskIds&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskSet.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;toArray&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[&lt;/span&gt;&lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;]);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveTaskIds;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Task 상에 있는 Activity 들의 AliveID 값들을 가져온다.&amp;lt;br/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * AliveID 값은 [임의의 식별 번호]:[Class name of Activity] 로 되어 있다. &amp;lt;br/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 배열 내의 순서는 stack 그대로라고 볼 수 있다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 모든 Activity가 ActivityStack 를 사용할 경우 0 번 인덱스에 있는 Activity 는 base activity 이고, 가장 마지막에 있는 Activity 는 top Activity 가 된다.    &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param taskID Task 의 id. Activity 의 getTaskId() 메소드를 이용하거나 ActivityManager 를 이용하여 가져온 task 값 입력. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return AliveID : 현재 ActivityStack 내에서 관리되는 각 Activity 들의 ID 값. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getAliveIDsInTask&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList(taskID);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String[size()];&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;n;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs[i]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(i).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 모든 Task 에 존재하는 Activity 들의 AliveID 값들을 가져온다.&amp;lt;br/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * AliveID 값은 [임의의 식별 번호]:[Class name of Activity] 로 되어 있다. &amp;lt;br/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 배열 내의 순서는 액티비티가 생성되고 종료된 순서와 일치한다. 만약 프로세스 내에 Task 가 하나만 존재한다면, 실제 안드로이드 내부에서 관리되는 Activity stack 과 일치한다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 가장 먼저 생성된 Activity 는 0 번 인덱스에 위치하게 되고 가장 마지막에 생성된 Activity 는 가장 마지막 인덱스에 위치하게 된다.    &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return AliveID : 현재 ActivityStack 내에서 관리되는 각 Activity 들의 ID 값.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getAliveIDs&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;String[]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String[size()];&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;n&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;size();&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;n;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;++i)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs[i]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(i).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveIDs;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * AliveID 를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param activity 만약 ActivityStack 에 등록된 Activity가 아니라면 빈 문자열을 반환한다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getAliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getActivityRef(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
		
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Task 상에 있는 Activity 중에 스택의 가장 위에 있는 (예를 들자면 화면에 보여지는) Activity instance 를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param taskID Task 의 id. Activity 의 getTaskId() 메소드를 이용하거나 ActivityManager 를 이용하여 가져온 task 값 입력.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return Activity instance&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getTopActivityInTask&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList(taskID);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;size&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt; 
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(size&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(size&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Task 상에 있는 Activity 중에 스택의 가장 아래에 있는 Activity 의 instance 를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return Activity instance&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getBaseActivityInTask&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList(taskID);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 *  Activity 를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param AliveID - getAliveIDsInTask() 또는 getAliveIDs() 을 통하여 가져온 Activity 의 getAliveID 값을 넣는다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return Activity instance&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getActivity&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(aliveID).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * ActivityStack에 등록된 모든 Activity 들이 현재 살아있는지 체크한다.  	&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 만약 false 를 리턴한다면 실행되고 있는 (등록된) Activity 는 하나도 없는 것이다.  &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;isRunning&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Task 내의 Activit 가 현재 살아있는지 체크한다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param task Task 의 id. Activity 의 getTaskId() 메소드를 이용하거나 ActivityManager 를 이용하여 가져온 task 값 입력.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 만약 false 를 리턴한다면 Task 내부에 실행되고 있는 (등록된) Activity 는 하나도 없는 것이다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;isTaskRunning&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;task)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;subList&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(task).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 특정 Task 내의 ActivityStack 의 크기를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param task Task 의 id. Activity 의 getTaskId() 메소드를 이용하거나 ActivityManager 를 이용하여 가져온 task 값 입력.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return ActivityStack 의 크기. 0을 반환할 경우 Task가 없거나 실행되고 있는 Activity 가 아직 없는 것이다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt; 
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;sizeInTask&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;task)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;subList&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(task).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * ActivityStack 의 크기를 가져온다. 즉, 모든 등록된 Activity 의 개수를 가져오는 것이다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return ActivityStack 의 크기. 0을 반환할 경우 Task가 없거나 실행되고 있는 Activity 가 아직 없는 것이다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * Foreground 상태인가? - 등록된 액티비티중 하나라도 화면에 가장 위에 보여지는 경우. 	&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return false 일 경우 background 상태. 다른 프로세스의 액티비티등에 의해서 일부만 가려져도 false 리턴. resume 상태인 activity 가 있다면 true.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;isForeground&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getForegroundActivity();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 *  특정 Task 가 Foreground 상태인가? - 등록된 액티비티중 하나라도 화면에 가장 위에 보여지는 경우.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 *  @param task Task 의 id. Activity 의 getTaskId() 메소드를 이용하거나 ActivityManager 를 이용하여 가져온 task 값 입력.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 *  @return false 일 경우 background 상태. 다른 프로세스의 액티비티등에 의해서 일부만 가려져도 false 리턴. resume 상태인 activity 가 있다면 true.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;isForeground&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskId)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getForegroundActivity();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getTaskId&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskId;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * Foreground 상태. 즉 화면에 출력되는 Activity 의 instance 를 가져온다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 만약 background 상태라면 null 을 리턴한다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getForegroundActivity&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getResumeActivityRef();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * resume 상태. 반드시 Activity 내부의 onResume() 에서 호출해야 한다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param activity 대상 activity &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 대상 Activity 가 등록되어 있지 않았다면 false. false 를 리턴하는 경우는 setCreateState 메소드를 이용하여 activity 를 등록하지 않았거나 destroy 된 activity 일 경우.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;regOnResumeState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getActivityRef(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;isResume&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;

	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * pause 상태. 반드시 Activity 내부의 onPause() 에서 호출해야 한다.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param activity 대상 activity &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 대상 Activity 가 등록되어 있지 않았다면 false. false 를 리턴하는 경우는 setCreateState 메소드를 이용하여 activity 를 등록하지 않았거나 destroy 된 activity 일 경우.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;regOnPauseState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;getActivityRef(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;isResume&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt; 
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * Activity 가 생성되어 시작되는 상태. 반드시 Activity 내부의 onCreate() 에서 호출해야한다. 이 메소드를 호출하면 ActivityStack 에 인자값으로 들어간 activity 가 등록된다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param activity 대상 activity &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 대상 Activity 가 등록되어 있지 않았다면 false. false 를 리턴하는 경우는 setCreateState 메소드를 이용하여 activity 를 등록하지 않았거나 destroy 된 activity 일 경우.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt;  &lt;span style=&quot;color: #447fcf&quot;&gt;regOnCreateState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;addActivityRef(activity);&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * Activity 가 제거되는 상태. 반드시 Activity 내부의 onDestroy() 에서 호출해야한다. 이 메소드를 호출하면 ActivityStack 에 인자값으로 들어간 activity 가 삭제된다. &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @param activity 대상 activity &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * @return 대상 Activity 가 등록되어 있지 않았다면 false. false 를 리턴하는 경우는 setCreateState 메소드를 이용하여 activity 를 등록하지 않았거나 destroy 된 activity 일 경우.&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;regOnDestroyState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
 		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;removeActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(activity);&lt;/span&gt;
		
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 예:) [{&quot;taskId&quot;:1,activityStack:[&quot;0:com.test.activity&quot;,&quot;1:com.test.activity&quot;...,]},&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 * 	    {&quot;taskId&quot;:2,activityStack:[&quot;10:com.test.activity&quot;,&quot;11:com.test.activity&quot;...,]},]  &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;	 */&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;cleanGarbageActivities();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;StringBuilder&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;StringBuilder();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;[&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskIDs&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;getAliveTaskIDs();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Integer&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskIDs)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;{\&quot;taskId\&quot;:&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(taskID).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;,\&quot;activityStack\&quot;:[&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList(taskID);&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;\&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(ref.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;\&quot;,&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;]},&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;]&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;strBuilder.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		
		
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;	
	
	
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;// private : &lt;/span&gt;
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;createActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;WeakReference&amp;lt;Activity&amp;gt;(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;makeAliveID(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;taskID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getTaskId&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;String&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;makeAliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;sLastActivityNumber++&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;:&quot;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getClass&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;addActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;createActivityRef(activity);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(activityRef);&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;removeActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;itemActivity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;itemActivity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
				&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(activityItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activity)&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(String&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;aliveID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(aliveID))&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;getResumeActivityRef&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(activityItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;isResume&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem;&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;subList&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;int&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;taskID&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;taskID)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;subList&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Class&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;activityClass)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;ArrayList&amp;lt;ActivityRef&amp;gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getClass&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(activityClass))&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;subList;&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #ffa500&quot;&gt;@SuppressLint&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;NewApi&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;)&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;cleanGarbageActivities&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;Iterator&amp;lt;ActivityRef&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: #d0d0d0&quot;&gt;mActivityAliveList.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityRef&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
			&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;||&lt;/span&gt; 
					&lt;span style=&quot;color: #d0d0d0&quot;&gt;(android.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;Build&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;VERSION&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;SDK_INT&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&quot;color: #3677a9&quot;&gt;17&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ref&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;isDestroyed&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()))&lt;/span&gt;    &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
				&lt;span style=&quot;color: #d0d0d0&quot;&gt;iter.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
				&lt;span style=&quot;color: #d0d0d0&quot;&gt;Log.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;remove&quot;&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ed9d13&quot;&gt;&quot;destroyed : &quot;&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;iterItem.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;aliveID&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
			&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt; 

&lt;p&gt;&lt;/p&gt;&lt;div id=&quot;Code2&quot; style=&quot;display: block;&quot;&gt;&lt;a onclick=&quot;layer_toggle(document.getElementById('Code2')); layer_toggle(document.getElementById('Code3')); return false;&quot; href=&quot;#&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;StackActivity.java 코드 보기&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div id=&quot;Code3&quot; style=&quot;display: none;&quot;&gt;
&lt;a onclick=&quot;layer_toggle(document.getElementById('Code2')); layer_toggle(document.getElementById('Code3')); return false;&quot; href=&quot;#&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;ItemActivity.java 코드 감추기&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style=&quot;background: #202020; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;&quot;&gt;&lt;pre style=&quot;margin: 0; line-height: 125%&quot;&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;package&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;kr.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;re&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;Dev&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;ActivityStack&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;android.app.Activity&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;android.os.Bundle&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt;/**&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; * &lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; * @author ice3x2&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; *&lt;/span&gt;
&lt;span style=&quot;color: #999999; font-style: italic&quot;&gt; */&lt;/span&gt;


&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #447fcf; text-decoration: underline&quot;&gt;StackActivity&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;Activity{&lt;/span&gt;
	
	&lt;span style=&quot;color: #ffa500&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(Bundle&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;savedInstanceState)&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;onCreate&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(savedInstanceState);&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;regOnCreateState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	
	&lt;span style=&quot;color: #ffa500&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;onDestroy&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;regOnDestroyState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;onDestroy&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #ffa500&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;onResume&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;onResume&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;regOnResumeState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
	&lt;span style=&quot;color: #ffa500&quot;&gt;@Override&lt;/span&gt;
	&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #447fcf&quot;&gt;onPause&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #d0d0d0&quot;&gt;{&lt;/span&gt;
		&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;onPause&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;();&lt;/span&gt;
		&lt;span style=&quot;color: #d0d0d0&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb&quot;&gt;regOnPauseState&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #6ab825; font-weight: bold&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #d0d0d0&quot;&gt;);&lt;/span&gt;
	
	&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
	
&lt;span style=&quot;color: #d0d0d0&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이 곳에서 최신 코드를 보거나 다운로드 받을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;a href=&quot;https://github.com/ice3x2/ActivityStack_ice3x2&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;https://github.com/ice3x2/ActivityStack_ice3x2&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; 사용법은 ItemActivity 를 사용 하려는 Activity 에서 상속받아 사용하거나, StackActivity 코드처럼 ActivityStack 클래스의 메소드를 호출하여 사용하면 된다. 다만, 각 이벤트 메소드에 맞는 ActivityStack 의 메소드&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;호출을 실수로 빠뜨리거나 잘못 호출하면 메모리 누수가 일어날 수도 있으니 주의하자.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&amp;nbsp;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 만약 아래 그림(?) 처럼 두 개의 Task 가 있고 이 곳에 Activity 가 실행되고 있다고 가정한다.&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 각 박스의 윗 부분은 Application 의 패키지 명을 타나내고 밑은 Activity 이름을 나타낸다. 그리고 com.xx.xx 패키지의 ActivityC 가 화면에 보여지는 상태다. (onResume 이 호출된 상태)&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;A&quot; style=&quot;display: block;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;TaskID:12 &amp;nbsp;| com.yy.yy &amp;nbsp; &amp;nbsp; &amp;nbsp; | com.yy.yy &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;| com.yy.yy &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;com.xx.xx &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ActivityA &amp;nbsp; &amp;nbsp; &amp;nbsp; | ActivityB &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ActivityC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ActivityC &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp;&lt;/div&gt;&lt;div id=&quot;A&quot;&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Foreground)&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div id=&quot;A&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&lt;span style=&quot;font-size: 12pt; background-color: transparent; line-height: 1.5;&quot;&gt;TaskID:13 &amp;nbsp;| com.xx.xx &amp;nbsp; &amp;nbsp;| com.xx.xx &amp;nbsp; &amp;nbsp; &amp;nbsp; | com.xx.xx &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;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;| ActivityA &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;| ActivityB &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| ActivityC &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;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div id=&quot;A&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;div&gt;&amp;nbsp; 우선 아까도 언급했지만, 사용하려는 대상 Activity 에서는 StackActivity &amp;nbsp;를 상속받거나 onCreate, onDestroy, onResume, onPause 에서 ActivityStack 의 각 메소드들을 호출해야 한다. (StackActivity 내부 코드 참고)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- com.xx.xx 패키지의 앱 내부에서 같은 패키지의 Activity 가 실행되고 있는 TaskID 들&amp;nbsp;가져오기.&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt; 
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Integer[]&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;taskIds&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getAliveTaskIDs&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;- 결과 : &amp;nbsp;[12,13]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;- 현재 화면에 보여지고 있는&amp;nbsp;Activity 인스턴스&amp;nbsp;가져오기&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt; 
&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;Activity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;foregroundActivity&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getForegroundActivity&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;- 결과 : task ID 12 에 올라간 ActivityC 의 인스턴스를 가져온다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; line-height: 24px;&quot;&gt;- 현재 어플리케이션이 실행중인지 알아보기&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size:12pt; line-height: normal; overflow: auto; width: auto; border-style: solid; border-color: gray; border-width: 0.1em 0.1em 0.1em 0.8em; padding: 0.2em 0.6em; background: rgb(32, 32, 32);&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; line-height: 16.25px;&quot;&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt;  &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;ActivityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;getInstance&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt; 
&lt;span style=&quot;color: rgb(106, 184, 37); font-weight: bold;&quot;&gt;boolean&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;isRun&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;activityStack.&lt;/span&gt;&lt;span style=&quot;color: rgb(187, 187, 187);&quot;&gt;isRunning&lt;/span&gt;&lt;span style=&quot;color: rgb(208, 208, 208);&quot;&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;- 결과 : true&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp; 나머지 사용법은 ActivityStack.java 파일의 주석을 참고하자.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;line-height: 24px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp; 마지막으로,&amp;nbsp;이 방법은 좋지 않은 방법이다. &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;잘못 사용하면 어떤 결과를 초래할지 모르고 메모리 누수의 위험도 있다.&amp;nbsp;게다가 이름만 ActivityStack 이다. 실제 Task 위에 있는 액티비티 스택과 혼동하면 안 된다.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size=&quot;3&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; Service 내부에서&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;유지보수 하기 귀찮은&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;Broadcastreceiver&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;와 &lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: AppleGothic; font-size: 12pt; line-height: 21.333332061767578px; background-color: transparent;&quot;&gt;ActivityManager 를 쓰지 않고 액티비티가 살았는지 죽었는지, 또는 Foreground 인지 확인할때와 Task 상에 쌓여있는 Activity 들을 정리할 때, 유용하게 사용할 수 있지만 그 외의 경우에는 조심해서 사용하자. 만약에 Activity 가 Background 에 있는 상태에서 Fragment 를 붙이거나 Dialog 를 띄운다면 Runtime Exception 이 발생하기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 관련/개인 자료</category>
      <category>activity</category>
      <category>Android</category>
      <category>안드로이드</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/49</guid>
      <comments>https://yagnu.tistory.com/49#entry49comment</comments>
      <pubDate>Sun, 13 Jul 2014 18:03:23 +0900</pubDate>
    </item>
    <item>
      <title>FTDI 사용하여 업로드시 avrdude: stk500_recv(): programmer is not responding 가 뜰때. - 아두이노 미니, 서드파티 아두이노 에서.</title>
      <link>https://yagnu.tistory.com/48</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;우선 아래 포스팅은 근본적인 해결책이 아니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;본인 같은 경우에는 드라이버 및&amp;nbsp;OS 업데이트를 통하여 이 문제를 해결하였다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 맥을 사용하고 OS는 매버릭스를 사용하는 환경에서&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;이와 같은 문제가 발생한다. (어쩌면 윈도우에서도 발생할지 모르겠다.) 구글링을 해보니 아두이노판 스텍 오버플로우에서 쉽게 찾을 수 있었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;먼저 이게 드라이버의 문제인지 뭐가 잘못된건지 잘 모르겠지만 FTDI 드라이버를 아두이노에 연결하여 컴파일된 코드를 올리면 다음과 같은 에러가 발생한다. (물론 드라이버는 최신 상태로 업데이트 하였다. 간혹 잘 되는 경우도 있다. ㅡ, ㅡ;;)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2427183A53C2379532&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2427183A53C2379532&quot; width=&quot;723&quot; height=&quot;254&quot; filename=&quot;스크린샷 2014-07-13 오후 4.35.38.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;아주 열받는 상황이다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 조금 귀찮은 트릭을 사용하여 이 문제를 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 우선 상단 메뉴에서&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(34, 116, 28); font-size: 11pt;&quot;&gt;Arduino-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(34, 116, 28); font-size: 11pt;&quot;&gt;환경 설정&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 을 열어서 다음과 같은 창을 띄운다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 599px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2377CB4353C238A521&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2377CB4353C238A521&quot; width=&quot;599&quot; height=&quot;388&quot; filename=&quot;스크린샷 2014-07-13 오후 4.35.59.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;그리고 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;다음 동작중 자세한 출력 보이기 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;메뉴에서 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;업로드&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 체크 박스에 &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;체크&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 하고 확인 버튼을 누른다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;그리고 업로드를 실행하여 아래 출력창을 보면&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;...&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 494px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/232C5C3E53C2396635&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F232C5C3E53C2396635&quot; width=&quot;494&quot; height=&quot;291&quot; filename=&quot;스크린샷 2014-07-13 오후 4.45.45.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;역시 마찬가지 결과다...&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위 스샷에서 보면 &lt;/span&gt;&lt;span style=&quot;color: rgb(204, 114, 61); font-size: 11pt;&quot;&gt;Overriding Baud Rete&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 114, 61); font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp; : 57600&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;이라고 표시된 줄이 중간쯤에 보인다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이 줄이 출력되자마자 &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;잽싸게 리셋 버튼을 눌러야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 561px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/23494A3E53C2396D05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F23494A3E53C2396D05&quot; width=&quot;561&quot; height=&quot;284&quot; filename=&quot;스크린샷 2014-07-13 오후 4.45.56.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;이 상태에서 바로 리셋버튼!!&lt;/span&gt; &lt;span style=&quot;font-size: 9pt;&quot;&gt;(연타하면 안 된다;;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 456px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2744033E53C2396D0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2744033E53C2396D0B&quot; width=&quot;456&quot; height=&quot;322&quot; filename=&quot;스크린샷 2014-07-13 오후 4.46.22.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;그럼 위 스샷처럼 데이터들이 줄줄줄 올라가는 것이 보이고 나서 정상적으로 업로드가 완료된다.&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;참, 불편하다.&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;업로드되는 로그를&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;보기 싫으면 환경 설정에서 다시 꺼도 되는데,&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 114, 61); font-size: 11pt;&quot;&gt;Overriding Baud Rete&lt;/span&gt;&lt;span style=&quot;color: rgb(204, 114, 61); font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp; : 57600&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;가 뜨는 시간을 계산하여 타이밍에 맞춰서&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;리셋 버튼을 눌러줘야 한다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>FTDI</category>
      <category>stk500_recv()</category>
      <category>아두이노</category>
      <category>업로드 에러</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/48</guid>
      <comments>https://yagnu.tistory.com/48#entry48comment</comments>
      <pubDate>Sun, 13 Jul 2014 16:52:28 +0900</pubDate>
    </item>
    <item>
      <title>아두이노와 호환되는 저렴한 OLED 모듈 사용기.</title>
      <link>https://yagnu.tistory.com/47</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;u8glib 라이브러리를&amp;nbsp;활용한&amp;nbsp;좀 더 쉬운 OLED 사용법은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; line-height: 1.5;&quot;&gt;&amp;nbsp;&lt;a href=&quot;http://www.dev.re.kr/51&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://www.dev.re.kr/51&lt;/a&gt; 에 포스팅 해 놓았습니다.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;hr style=&quot;display:block; border: black 0 none; border-top: black 1px solid; height: 1px&quot;&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;바로 이전 포스팅에 이어서 이번에도 알리 익스프레스에서 구매했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/267F3A4F53C22F1A17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F267F3A4F53C22F1A17&quot; width=&quot;723&quot; height=&quot;361&quot; filename=&quot;스크린샷 2014-07-13 오후 4.01.53.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp;6.66$ 나름대로 저렴한 가격이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;I2C 를 사용한다고 하는데, 이 통신 방법에 대해서는 다음 위키&amp;nbsp;페이지에서 요약된 정보를 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &amp;nbsp;http://ko.wikipedia.org/wiki/I%C2%B2C&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/217B364053C230A42E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F217B364053C230A42E&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140709_222235.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 앞 모습. 보호 필름이 발라져 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2106803D53C230D31E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2106803D53C230D31E&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140709_222305.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;뒷 모습. 핀헤더 아래를 보면 Address Select 라고 써져있는 부분이 보인다. 이 부분을 자세히 보자.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;주소가 0x78 으로 표시되어 있는데, 각 디바이스마다 고유의 주소 값을 갖고 있고, 이 것을 선택하여&amp;nbsp;여러대의 I2C 기기를 컨트롤 할 수 있다고한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 배선은 VCC&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; color: rgb(255, 0, 0); background-color: transparent;&quot;&gt;5V)&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;와&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;GND 를 각각&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;맞는 곳에 연결하고 Arduino uno 기준으로 (ATMega328) &lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(126, 65, 217); background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;SDA 는 A4&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt; 에&lt;/span&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; color: rgb(255, 0, 127); background-color: transparent;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; SCL 은 A5&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt; 에 연결한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이 제품의 스펙을 보면 SSD1306 이라는 LCD 드라이버 칩을 사용하는 것을 알 수 있다. 데이터 시트를 보고 구현 하려다 뭔가 복잡함에 멘붕먹고 라이브러리를 찾아보았다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;관련 라이브러리는 GPL 라이센스로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;Git Hub 에 MultiLCD 라는 이름으로 올라가 있다.&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;a href=&quot;https://github.com/stanleyhuangyc/MultiLCD&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;https://github.com/stanleyhuangyc/MultiLCD&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이 OLED 모듈을 사용하기 위해서는 &lt;/span&gt;&lt;a href=&quot;http://MicoroLCD&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;MicoroLCD&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 폴더에 있는 파일들이 필요하며 그 내부에 있는&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/stanleyhuangyc/MultiLCD/tree/master/MicroLCD/examples&quot; class=&quot;js-directory-link&quot; id=&quot;bfebe34154a0dfd9fc7b447fc9ed74e9-8a1d7e93f8619e03cc0c260ce1c54252d0b0606b&quot; title=&quot;examples&quot; style=&quot;box-sizing: border-box; color: rgb(65, 131, 196); font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; line-height: 20px; white-space: nowrap; background: rgb(248, 248, 248);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;examples&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;폴더에서 예제 파일을 통하여 동작을 확인해 볼 수 있다. 그리고 주소값을 입력해줘야 하는 중요한 작업이 필요한데,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/stanleyhuangyc/MultiLCD/blob/master/MicroLCD/SSD1306.h&quot; class=&quot;js-directory-link&quot; id=&quot;c3f1d3031280fc825eeff879f9e95aa1-ae7f339a4b40a2b1a2aba2e1e6384475b236214c&quot; title=&quot;SSD1306.h&quot; style=&quot;box-sizing: border-box; color: rgb(65, 131, 196); font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; line-height: 20px; white-space: nowrap; background: rgb(248, 248, 248);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;SSD1306.h&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;파일에서 위에서 세 번째 정도에 있는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-weight: bold; white-space: pre; font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;#define SSD1306_I2C_ADDRESS   0x3C &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;부분을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(153, 153, 153); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-weight: bold; white-space: pre; font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;#define SSD1306_I2C_ADDRESS   0x78 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;로 수정해 준다. 만약 주소가 0x78 이 아니라 다른 주소로 되어있을 경우에는 그 것으로 수정하면 된다. (바로 위 사진 참고.)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; 이제 예제를 돌려보면 다음과 같이 텍스트와 이미지가 출력되는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;text-align: left; font-size: 11pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/A-JCObLNsmo&quot; width=&quot;420&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/222F273853C2355C21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F222F273853C2355C21&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140710_232306.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px; font-size: 9pt; line-height: 1.5; background-color: transparent;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2642F53753C235670C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2642F53753C235670C&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140710_232202.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>oled</category>
      <category>아두이노</category>
      <category>알리 익스프레스</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/47</guid>
      <comments>https://yagnu.tistory.com/47#entry47comment</comments>
      <pubDate>Sun, 13 Jul 2014 16:30:03 +0900</pubDate>
    </item>
    <item>
      <title>저렴한 RGB LED (WS2812B) 구입/사용기.</title>
      <link>https://yagnu.tistory.com/46</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(255, 0, 0);&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; line-height: 36px;&quot;&gt;&lt;font size=&quot;5&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;WS2812B&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;사용법및 예제 소스는&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;다음 포스팅&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u style=&quot;font-size: 12pt; background-color: transparent; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&lt;a href=&quot;http://www.dev.re.kr/57&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 18pt;&quot;&gt;http://www.dev.re.kr/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 18pt;&quot;&gt;57&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;background-color: transparent; font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&amp;nbsp;에서 확인할 수 있습니다&lt;/span&gt;.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;span style=&quot;font-size: 11pt;&quot;&gt;뭐를 만드려고 하는데, RGB LED 개 열 개 정도 필요하게 되었다. 좋은 대안은 컨트롤하기 편한 Adafruit 에서 만든 NeoPixel 이 되겠다. 이 녀석은 디지털 출력 포트 하나로 여러 모듈을 동시에&amp;nbsp;컨트롤 할 수 있다는 것이 가장 큰 장점이다. 하지만,&amp;nbsp; 좀비싸다. ㅠㅠ&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 알리 익스프레스를 뒤져본 결과 NeoPixel 에 들어가는&amp;nbsp;WS2812B가 올라간 모듈을 아주 싼 가격에 팔고 있었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px; text-align: center; font-size: 9pt; line-height: 1.5; background-color: transparent;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/26622E4F53C225660E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F26622E4F53C225660E&quot; width=&quot;723&quot; height=&quot;526&quot; filename=&quot;스크린샷 2014-07-13 오후 3.20.33.png&quot; filemime=&quot;image/png&quot; style=&quot;text-align: center; font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;100개에 17.99달러!!&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 나는 10개만 필요하기 때문에 불량품이 있을 것을 감안하여 20개를 구입하였다. 무료 배송을 선택하고 2주 하고 5일 뒤에 상품이 왔다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/257B5F4953C229861C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F257B5F4953C229861C&quot; width=&quot;700&quot; height=&quot;518&quot; filename=&quot;IMG_20140709_222212.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이런식으로 붙어있긴 하지만, 각 모듈과 모듈 사이에 회로가 연결되어 있는 것은 아니다. 하나씩 뜯어서 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2122C13953C22A020E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2122C13953C22A020E&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140713_153134.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;뒷 모습. 땜질을 아주 잘 해야 한다. 인두가 흰색 부분을 스치기만 해도 검게 타버린다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;플럭스가 없으면 납이 잘 달라붙지도 않는다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/210C814D53C22E372C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F210C814D53C22E372C&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140710_003512.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;동전과의 크기 비교. 정말 작다. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 사용법은 GitHub 에 있는 NeoPixel 용 라이브러리를 사용하면 된다. (&lt;/span&gt;&lt;a href=&quot;https://github.com/adafruit/Adafruit_NeoPixel&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;https://github.com/adafruit/Adafruit_NeoPixel&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) 그 밖에 여러 사람들이 WS2812B 을 사용할 수 있는 아두이노용 라이브러리를 커밋하고 있으니 참고하자.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/U3a56cUC2Uk&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위 영상은 &lt;/span&gt;&lt;a href=&quot;https://github.com/adafruit/Adafruit_NeoPixel&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 9pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;https://github.com/adafruit/Adafruit_NeoPixel&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;의 예제 코드를 실행한 영상이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;예제 코드에서 LED개수를 3개로 수정해줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2240D24B53C22D4624&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2240D24B53C22D4624&quot; width=&quot;320&quot; height=&quot;236&quot; filename=&quot;IMG_20140710_010217.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 320px; font-size: 9pt; line-height: 1.5; background-color: transparent;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2652984B53C22D560B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2652984B53C22D560B&quot; width=&quot;320&quot; height=&quot;236&quot; filename=&quot;IMG_20140710_010213.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;a href=&quot;http://dev.re.kr/45&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255); font-size: 11pt;&quot;&gt;아두이노 프로 미니 호환 구입기&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;에서 소개한 모듈에&amp;nbsp;WS2812B 과 배터리를 연결한 모습.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;(P.s : 왕초보자라면 NeoPixel 을 추천한다. 땜하기도 어렵고 내구성이 조금 떨어지는 편이다.)&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start; background-color: transparent; line-height: 36px;&quot;&gt;&lt;font size=&quot;5&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;WS2812B&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start; background-color: transparent; font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;예제 &amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; text-align: start; font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u style=&quot;background-color: transparent; text-align: start; font-size: 12pt; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(9, 0, 255);&quot;&gt;&lt;a href=&quot;http://www.dev.re.kr/57&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 12pt;&quot;&gt;http://www.dev.re.kr/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 85, 255); font-size: 12pt;&quot;&gt;57&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;span style=&quot;background-color: transparent; text-align: start; font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>NeoPixel</category>
      <category>RGB Led</category>
      <category>WS2812B</category>
      <category>아두이노</category>
      <category>알리익스프레스</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/46</guid>
      <comments>https://yagnu.tistory.com/46#entry46comment</comments>
      <pubDate>Sun, 13 Jul 2014 15:56:53 +0900</pubDate>
    </item>
    <item>
      <title>알리 익스프레스로 구입한 호환 아두이노 프로 미니.</title>
      <link>https://yagnu.tistory.com/45</link>
      <description>&lt;p&gt;&amp;nbsp; &lt;span style=&quot;font-size: 10pt;&quot;&gt;약 한 달 전에 알리 익스프레스라는 곳을 알게 되었다. 이전에는 국내에서 구하기 힘든 물건들은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;이베이나 아아존 구매대행 사이트나 배송대행 업체를 이용하여 직구하기도 하였는데, 수수료와 배송비의 압박으로 부터 자유롭지 못 했다. &amp;nbsp;하지만 중국판 아마존인 알리 익스프레스는 달랐다. &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;중국 소포를 이용한 무료 배송을 해주는 상점이 많고, 제품들도 무척 저렴했다. - 당연히 구매 절차는 매우 간단하다. VISA 카드등 해외 결제가 가능한 체크카드나 신용 카드만 있으면 된다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;-&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;물론 가품이나 문제가 있는 제품도 많아서 마치 확률 높은 도박을 해야한다는 단점이 있다. 인터넷을 뒤져보면 풍부한 구매 후기등이 있는데, 많은 수가 사기를 당하거나 문제있는 제품을 구매했다고한다. - 아마도 물건 구매에 실패한 사람들이 속상한 심정을 토로하며 후기를 올렸을 것이다. - 그래서 항상 구매 보호 마크가 있거나 피드백등을 잘 보고 구입할 물건을 선택해야한다. 다행히도&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;내가 구입하려고 하는 여러 전자 부품들은&amp;nbsp;중국에서 생산되는 경우가 많아서 상품도 많고 가격도 저렴하고 피드백도 좋다. 그 중에 첫 번째로 구매한&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0); font-size: 10pt;&quot;&gt; 아두이노 프로 미니 호환 제품&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;에 대하여 소개할까 한다.&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/214C823D53C21BAA04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214C823D53C21BAA04&quot; width=&quot;723&quot; height=&quot;570&quot; filename=&quot;스크린샷 2014-07-13 오후 2.38.03.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &amp;nbsp;우선 위 스샷과 같이 Arduino pro mini 로 검색하면 다양한 제품들이 쏟아져 나오는데, 주로 모듈만 묶음으로 팔거나 시리얼 통신용 USB 변환 모듈과 같이 파는 경우가 있다. 국내에서 구매하면 각 모듈당 1만원이 넘는 가격을 지불해야 하는데 이 곳에서는 자체 생산하여 파는지 너무나 저렴하다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;나는 이미 FTDI 가상 시리얼 드라이버 모듈을 갖고있기 때문에 위 스샷에서 가장 첫 번째 제품을 구매하였다. 아두이노 프로 미니 호환 모듈 10개에 21.47$ 라는 내 눈을 의심하게 만드는 가격에 판매가 되고 있다. 10으로 나눠보면 모듈 하나당 2.147$ 이라는 가격인데, 대략 우리나라 돈으로 대략&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;2,200원 밖에 안 한다. 술 한 번 안 마신다 생각하고 과감히 배송 옵션에 EMS (15$) 을 선택하였다. 보통 China post mail &amp;nbsp;을 선택하면 배송료가 싸거나 무료인 대신에 2~3주 걸리고 물건을 분실할 수 있는 반면에 돈을 지불하고 EMS 같은 서비스를 이용하면 주문한지 3~6일만에 물건을 받을 수 있다. 나도 3일만에 물건을 받을 수 있었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2335EE4C53C2201C33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2335EE4C53C2201C33&quot; width=&quot;700&quot; height=&quot;518&quot; filename=&quot;IMG_20140709_174026.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;테이프가 엄청 꼼꼼하게 발라져 있어서 뜯는데 고생좀 했다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/27639B3E53C21FB416&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27639B3E53C21FB416&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;IMG_20140709_174429.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5; background-color: transparent;&quot;&gt;이렇게 10개가 들어있다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/234FD43E53C21FB536&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F234FD43E53C21FB536&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;IMG_20140709_222315.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;정전기 방지&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;봉투에 핀헤더와 모듈이 나누어져 담겨있다. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;납땜을 이용하여 핀헤더를 모듈에 붙어야 한다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2716614B53C2214B27&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2716614B53C2214B27&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140710_004248.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 700px; font-size: 9pt; line-height: 1.5; background-color: transparent;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/2565174D53C221581F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2565174D53C221581F&quot; width=&quot;700&quot; height=&quot;517&quot; filename=&quot;IMG_20140710_004335.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;납땜을하여 핀헤더 연결을&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;완료한 모습.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;아날로그 포트에 사용되는 핀헤더는 제공되지 않는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;브레드 보드에 사용하기에는 없는 편이 더 낫다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 723px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/224C473E53C21FB636&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F224C473E53C21FB636&quot; width=&quot;723&quot; height=&quot;535&quot; filename=&quot;IMG_20140710_004356.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;FTDI &amp;nbsp;모듈에 연결하여 Blink 예제를 올려본 모습이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;부품은 괜찮은 것을 썼는지등에 대하여, 또&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;10개 제품중에서 혹시나 불량품이 있지 않을까하는 의구심이 드는 것도 사실이지만 일단 상품 페이지의 피드백을 보면 여러 나라의&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;구매자들이 별점 다섯개를 쿨하게 날리는 것을 보고 안심하고 현재 진행하는 프로젝트에 적용하기로 하였다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 9pt; line-height: 1.5; background-color: transparent;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>개발 관련/아두이노,IOT</category>
      <category>arduino</category>
      <category>Arduino pro mini</category>
      <category>아두이노</category>
      <category>아두이노 프로 미니</category>
      <category>알리익스프레스</category>
      <author>snoworca</author>
      <guid isPermaLink="true">https://yagnu.tistory.com/45</guid>
      <comments>https://yagnu.tistory.com/45#entry45comment</comments>
      <pubDate>Sun, 13 Jul 2014 15:12:34 +0900</pubDate>
    </item>
  </channel>
</rss>