<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Taehee Jang Blog</title>
    <link>https://blog.thjang.net/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 6 Apr 2026 22:09:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>장태희</managingEditor>
    <item>
      <title>Maven으로 Spring Boot 2 세팅하기</title>
      <link>https://blog.thjang.net/36</link>
      <description>&lt;p&gt;- Spring Initializr에 접속하여 Spring Boot 프로젝트 생성하기&lt;/p&gt;&lt;p&gt;&amp;nbsp; 1. start.spring.io 에 접속하기&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Spring Initializr는&amp;nbsp;&lt;a href=&quot;https://github.com/spring-io/initializr&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/spring-io/initializr&lt;/a&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/99D697445C0507A80E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D697445C0507A80E&quot; width=&quot;700&quot; height=&quot;380&quot; filename=&quot;스크린샷, 2018-12-03 19-36-17.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;&amp;nbsp; 2. 원하는 Build 도구와 Spring Boot 버전을 선택한 뒤, 내게 필요한 dependency들을 선택한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;이미 많이 사용하는 의존성 목록을 추가해 놓았기 때문에, 일일히 mvnrepository에서 각 패키지들을 import 시킬 필요가 없고, start로 주어지는 묶음을 사용하면 매우 편리하다.&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/99C551435C0507B832&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C551435C0507B832&quot; width=&quot;700&quot; height=&quot;380&quot; filename=&quot;스크린샷, 2018-12-03 19-27-01.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;&amp;nbsp; 3. Generate Project를 눌러 Project 파일을 다운로드 받고, 압축을 푼다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; 4. IntelliJ나 eclipse에서 압축을 푼 프로젝트를 열어준다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; 5. 만약 Thymeleaf나 react 등이 아닌 JSP로 Frontend를 사용하고 싶다면, 아래와 같은 jasper와 jstl dependency를 추가 해주어야 한다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;jstl&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.tomcat.embed&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;tomcat-embed-jasper&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;6. 작성 중&lt;br /&gt;&lt;/p&gt;</description>
      <category>Java Programming</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/36</guid>
      <comments>https://blog.thjang.net/36#entry36comment</comments>
      <pubDate>Mon, 3 Dec 2018 19:24:46 +0900</pubDate>
    </item>
    <item>
      <title>Maven에서 Java Spring 세팅하기</title>
      <link>https://blog.thjang.net/34</link>
      <description>&lt;p&gt;※ 본 항목은 업데이트 중입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- pom.xml 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Spring Project를 개발하기 위해서는, pom.xml에 packaging과 property,&amp;nbsp;dependency를 추가 해 주어야 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; - packaging을 war로 설정한다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;packaging&amp;gt;&lt;/span&gt;war&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/packaging&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - property에서 Spring Framework version을 설정한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; spring.version에 대한 정보는 Github(https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions) 혹은 Spring 공식 사이트(https://spring.io/projects/spring-framework#learn)에서 확인할 수 있다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;project.build.sourceEncoding&amp;gt;&lt;/span&gt;UTF-8&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;spring.version&amp;gt; &lt;/span&gt;4.3.5.RELEASE&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/spring.version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - &amp;lt;dependencies&amp;gt;에서 spring framework에 필요한 spring-context, spring-webmvc, spring-test&amp;nbsp;dependency들을 추가해 준다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&amp;lt;!-- Spring 프로젝트에 필요한 dependency --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-context&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;version&amp;gt;&lt;/span&gt;${spring.version}&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-webmvc&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;version&amp;gt;&lt;/span&gt;${spring.version}&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-test&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;version&amp;gt;&lt;/span&gt;${spring.version}&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - JSP를 추가적으로 이용하고자 한다면, JSTL과 EL dependency들을 추가해준다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&amp;lt;!-- Servlet JSP 사용을 위한 JSTL dependency --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;javax.servlet-api&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;3.1.0&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/scope&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet.jsp&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;javax.servlet.jsp-api&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;2.3.1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/scope&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;jstl&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;jstl&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;1.2&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - Database 통신을 위해 PlatformTransactionManager와 JDBC, SQL Driver(여기에서는 MySQL), Connection Pool(여기에서는 DBCP2)을 추가한다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-jdbc&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;${spring.version}&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-tx&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;${spring.version}&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&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;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;mysql&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;mysql-connector-java&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;5.1.45&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&amp;lt;!-- basic data source --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.commons&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-dbcp2&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;2.1.1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - 파일 전송을 원한다면, Apache Commons File Upload와 IO를 추가한다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&amp;lt;!-- Apache Commons FileUpload --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;groupId&amp;gt;&lt;/span&gt;commons-fileupload&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-fileupload&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;version&amp;gt;&lt;/span&gt;1.3.1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/dependency&amp;gt;&lt;br /&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;   &lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&amp;lt;!-- Apache Commons IO --&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;groupId&amp;gt;&lt;/span&gt;commons-io&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;artifactId&amp;gt;&lt;/span&gt;commons-io&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;version&amp;gt;&lt;/span&gt;2.4&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/dependency&amp;gt;&lt;br /&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;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp; - JDK 버전과 tomcat 버전을 추가해준다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;plugins&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;plugin&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-compiler-plugin&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;version&amp;gt;&lt;/span&gt;3.6.1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;source&amp;gt;&lt;/span&gt;1.8&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/source&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;target&amp;gt;&lt;/span&gt;1.8&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;/plugin&amp;gt;&lt;br /&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;plugin&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.tomcat.maven&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;artifactId&amp;gt;&lt;/span&gt;tomcat7-maven-plugin&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;version&amp;gt;&lt;/span&gt;2.1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;configuration&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;charset&amp;gt;&lt;/span&gt;UTF-8&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/charset&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;uriEncoding&amp;gt;&lt;/span&gt;UTF-8&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/uriEncoding&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;port&amp;gt;&lt;/span&gt;8080&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/port&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;path&amp;gt;&lt;/span&gt;/&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/path&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;         &amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;      &amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;   &amp;lt;/plugins&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;- Servlet 3.0 미만에서 web.xml 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 전통적인 Spring Framework에서는 해당 프로젝트의 /src/main/webapp/WEB-INF 폴더에 web.xml 파일을 추가함으로서 Application Context를 등록할 수 있다. web.xml은 tomcat과 같은 was가 읽어서 등록시킨다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; web.xml은 아래와 같이 설정한다.&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;xml version=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;1.0&quot; &lt;/span&gt;&lt;span style=&quot;color:#bababa;&quot;&gt;encoding=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;&quot;UTF-8&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;&amp;lt;web-app&amp;gt;&lt;br /&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;display-name&amp;gt;&lt;/span&gt;Spring JavaConfig Sample&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/display-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;context-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;param-name&amp;gt;&lt;/span&gt;contextClass&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;param-value&amp;gt;&lt;/span&gt;org.springframework.web.context.support.AnnotationConfigWebApplicationContext&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;context-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;param-name&amp;gt;&lt;/span&gt;contextConfigLocation&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;param-value&amp;gt;&lt;/span&gt;examples.daoexam.config.ApplicationConfig&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/context-param&amp;gt;&lt;br /&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;listener&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;listener-class&amp;gt;&lt;/span&gt;org.springframework.web.context.ContextLoaderListener&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/listener-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/listener&amp;gt;&lt;br /&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;servlet&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;servlet-name&amp;gt;&lt;/span&gt;mvc&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;servlet-class&amp;gt;&lt;/span&gt;org.springframework.web.servlet.DispatcherServlet&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;init-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;param-name&amp;gt;&lt;/span&gt;contextClass&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;param-value&amp;gt;&lt;/span&gt;org.springframework.web.context.support.AnnotationConfigWebApplicationContext&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;init-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;param-name&amp;gt;&lt;/span&gt;contextConfigLocation&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;            &amp;lt;param-value&amp;gt;&lt;/span&gt;examples.daoexam.config.WebMvcContextConfiguration&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;/init-param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;load-on-startup&amp;gt;&lt;/span&gt;1&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/servlet&amp;gt;&lt;br /&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;servlet-mapping&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;servlet-name&amp;gt;&lt;/span&gt;mvc&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;        &amp;lt;url-pattern&amp;gt;&lt;/span&gt;/&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;    &amp;lt;/servlet-mapping&amp;gt;&lt;br /&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;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&amp;lt;/web-app&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Java Programming</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/34</guid>
      <comments>https://blog.thjang.net/34#entry34comment</comments>
      <pubDate>Fri, 30 Nov 2018 16:29:49 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 2에서 Thymeleaf 사용하기</title>
      <link>https://blog.thjang.net/33</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- Thymeleaf란?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;타임리프는 server-side의 Java 템플릿으로서,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(51, 51, 51); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;TML, XML, JavaScript, CSS, 일반 텍스트&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;문서를 생성하는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;View Template Engine이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&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-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- Spring Boot2에서 Thymeleaf 적용 설정하기&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;1-1. Spring Initializr에서 Thymeleaf 선택하기&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;Spring Initializr(https://start.spring.io/)에서 Spring Boot 프로젝트를 생성할 때, Thymeleaf 항목을 추가한다.&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/9961984F5BF503F203&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9961984F5BF503F203&quot; width=&quot;700&quot; height=&quot;327&quot; filename=&quot;sprint-initializr-thymeleaf.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;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;1-2. pom.xml에서 spring-boot-starter-thymeleaf 추가하기(Maven 기준)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf 에서 본인이 원하는 버전에 맞는 타임리프 버전의 dependency를 추가해 준다.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(232, 191, 106); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;   &amp;lt;groupId&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;org.springframework.boot&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(232, 191, 106); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;   &amp;lt;artifactId&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;spring-boot-starter-thymeleaf&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(232, 191, 106); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;   &amp;lt;version&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;2.1.0.RELEASE&lt;/span&gt;&lt;span style=&quot;color:#e8bf6a;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(232, 191, 106); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;2. application.properties에서 thymeleaf 관련 설정&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;application.properties에서 다음의 항목을 추가해 준다.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color:#2b2b2b;color:#a9b7c6;font-family:'나눔고딕코딩';font-size:14.3pt;&quot;&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;spring.thymeleaf.enabled&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#cc7832;font-weight:bold;&quot;&gt;true&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;spring.thymeleaf.encoding&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;UTF-8&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;spring.thymeleaf.prefix&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;/WEB-INF/views/&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#cc7832;&quot;&gt;spring.thymeleaf.suffix&lt;/span&gt;&lt;span style=&quot;color:#808080;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#6a8759;&quot;&gt;.html&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;spring.thymeleaf.enabled → thymeleaf의 사용을 enable 시킨다.&lt;/p&gt;&lt;p&gt;spring.thymeleaf.encoding → thymeleaf의 인코딩을 UTF-8로 기본 설정한다.&lt;/p&gt;&lt;p&gt;spring.thymeleaf.prefix → thymeleaf의 기본 경로인 templates를 원하는 임의의 경로로 설정한다. (여기에서는 webapps/WEB-INF/views 로 설정하였다.)&lt;/p&gt;&lt;p&gt;spring.thymeleaf.suffix → thymeleaf가 읽어들이는 파일의 확장자를 설정한다. 예를 들어 Controller의 method에서 return &quot;index&quot;; 일 경우, 자동적으로 index.html을 읽어로게 된다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;- Thymeleaf의 기본 폴더 경로&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;Thymeleaf에서는 기본적으로 resources 폴더의 templates폴더에 html 파일들이 위치한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;이 외의 css, js 등의 정적 파일들은 static 폴더에 위치하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- Trouble Shooting&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;1.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;ERROR - org.thymeleaf.exceptions.TemplateInputException: Error resolving template “index”, template might not exist or might not be accessible by any of the configured Template Resolvers&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;→ templates 폴더에 &quot;index.html&quot;파일이 없어서 발생하는 문제이다. 이 외에도 해당 경로에 대상 view가 없으면 이와 같은 에러가 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;2. 기존에 JSP를 사용하고 있다면, jstl과 jasper 관련 설정을 pom.xml에서 주석 처리 해주어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;참고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;http://cyberx.tistory.com/132&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;http://araikuma.tistory.com/30&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;https://blog.hanumoka.net/2018/08/01/spring-20180801-spring-Thymeleaf/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;https://www.tutorialspoint.com/spring_boot/spring_boot_thymeleaf.htm&lt;/p&gt;&lt;p&gt;https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-thymeleaf/&lt;/p&gt;&lt;p&gt;http://rura6502.tistory.com/2&lt;/p&gt;&lt;p&gt;http://wonwoo.ml/index.php/post/1209&lt;/p&gt;&lt;p&gt;https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#what-is-thymeleaf&lt;/p&gt;&lt;p&gt;https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html&lt;/p&gt;&lt;p&gt;https://memorynotfound.com/spring-boot-thymeleaf-configuration-example/&lt;/p&gt;&lt;p&gt;https://cizz3007.github.io/%ED%83%80%EC%9E%84%EB%A6%AC%ED%94%84/syntax/thymeleaf/2018/04/09/thymeleaf/&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Java Programming</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/33</guid>
      <comments>https://blog.thjang.net/33#entry33comment</comments>
      <pubDate>Wed, 21 Nov 2018 16:08:19 +0900</pubDate>
    </item>
    <item>
      <title>2018년 9월 우분투 한국 커뮤니티 발표 자료 - 리눅스를 이용한 이중화 기초</title>
      <link>https://blog.thjang.net/29</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify; clear: none; float: none;&quot;&gt;&lt;a style=&quot;&quot; class=&quot;txc-file&quot;&gt;2018년 9월 15일 토요일 우분투 한국 커뮤니티 9월 서울지역 세미나의 발표 자료입니다.&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify; clear: none; float: none;&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;URL :&amp;nbsp;http://event.ubuntu-kr.org/2018/07/31/sept-seoul-seminar.html&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify; clear: none; float: none;&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;Youtube : https://youtu.be/XMeyVWVK4W8?t=6558&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify; clear: none; float: none;&quot;&gt;&lt;a class=&quot;txc-file&quot;&gt;&lt;/a&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;   height: auto; max-width: 100%;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/99F562335B9F442D25&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/pdf.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;[20180919]리눅스를 이용한 이중화 기초.pdf&lt;/a&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/996C11435B9F1F3924&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996C11435B9F1F3924&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-01.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992815435B9F1F3A29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992815435B9F1F3A29&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-02.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F33E435B9F1F3B1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F33E435B9F1F3B1A&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-03.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EFEF435B9F1F3D1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EFEF435B9F1F3D1A&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-04.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997E53435B9F1F3E23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997E53435B9F1F3E23&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-05.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999266435B9F1F4021&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999266435B9F1F4021&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-06.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CCE3435B9F1F411D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CCE3435B9F1F411D&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-07.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999C2E445B9F1F4220&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999C2E445B9F1F4220&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-08.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998B22445B9F1F4434&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998B22445B9F1F4434&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-09.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A8F5445B9F1F461F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A8F5445B9F1F461F&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-10.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998968445B9F1F4833&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998968445B9F1F4833&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-11.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992EB1445B9F1F4A16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992EB1445B9F1F4A16&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-12.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FCC2445B9F1F4B2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FCC2445B9F1F4B2C&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-13.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995EB2445B9F1F4C25&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995EB2445B9F1F4C25&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-14.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998F274C5B9F1F5823&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998F274C5B9F1F5823&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-15.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E1E64C5B9F1F5A30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E1E64C5B9F1F5A30&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-16.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991C6E4C5B9F1F5C2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991C6E4C5B9F1F5C2C&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-17.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999FF94C5B9F1F5D21&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999FF94C5B9F1F5D21&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-18.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992F924C5B9F1F602A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992F924C5B9F1F602A&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-19.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ED424C5B9F1F611A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ED424C5B9F1F611A&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-20.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CB6E4C5B9F1F631D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CB6E4C5B9F1F631D&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-21.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B343435B9F1F641F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B343435B9F1F641F&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-22.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992815435B9F1F662A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992815435B9F1F662A&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-23.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DFB2435B9F1F670C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DFB2435B9F1F670C&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-24.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997E53435B9F1F6924&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997E53435B9F1F6924&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-25.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CDC7435B9F1F6A1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CDC7435B9F1F6A1E&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-26.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C26A435B9F1F6B1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C26A435B9F1F6B1F&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-27.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99461E435B9F1F6C28&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99461E435B9F1F6C28&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-28.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991460435B9F1F6E08&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991460435B9F1F6E08&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-29.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9965F04B5B9F1F7A29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9965F04B5B9F1F7A29&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-30.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996BDA4B5B9F1F7D26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996BDA4B5B9F1F7D26&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-31.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9984CF4B5B9F1F8038&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9984CF4B5B9F1F8038&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-32.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992BE74B5B9F1F8419&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992BE74B5B9F1F8419&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;[20180919]리눅스를 이용한 이중화 기초-33.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;Feedback : rsync를 사용할 시 보안 문제가 발생할 수 있다. Hadoop 등을 사용하는 것을 추천.&lt;/p&gt;</description>
      <category>커뮤니티 활동</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/29</guid>
      <comments>https://blog.thjang.net/29#entry29comment</comments>
      <pubDate>Mon, 17 Sep 2018 12:30:41 +0900</pubDate>
    </item>
    <item>
      <title>Java 101 - StringBuffer</title>
      <link>https://blog.thjang.net/14</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;※ 본 내용은 Java JDK 8을 기준으로 설명합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- StringBuffer란&lt;/span&gt;&lt;/p&gt;&lt;p&gt;공식 문서:&amp;nbsp;https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin: 15px 0px; font-family: &amp;quot;Malgun Gothic&amp;quot;, Helvetica, arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;StringBuffer는 문자열을 추가하거나 변경 할 때 주로 사용하는 자료형이다.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- StringBuffer에서 사용할 수 있는 메소드는 아래와 같다.&lt;/div&gt;&lt;p&gt;append&lt;/p&gt;&lt;p&gt;insert&lt;/p&gt;&lt;p&gt;delete&lt;/p&gt;&lt;p&gt;substring&lt;/p&gt;&lt;p&gt;reverse&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- StringBuffer 사용 예제&lt;/p&gt;&lt;p&gt;StringBuffer.append&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StringBuffer.insert&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StringBuffer.substring&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StringBuffer.delete&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;StringBuffer.reverse&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Java Programming</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/14</guid>
      <comments>https://blog.thjang.net/14#entry14comment</comments>
      <pubDate>Mon, 3 Sep 2018 19:40:07 +0900</pubDate>
    </item>
    <item>
      <title>Java 101 - 생성자(Constructor)</title>
      <link>https://blog.thjang.net/10</link>
      <description>&lt;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;생성자란?&lt;/li&gt;&lt;/ul&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;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;생성자 규칙&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;자바 생성자를 만들기 위한 규칙은 3가지가 있다.&lt;/p&gt;&lt;p&gt;1. 생성자 이름은 클래스의 이름과 동일해야 한다.&lt;/p&gt;&lt;p&gt;2. 생성자는 일반적인 메소드와 다르게 명시된 리턴 타입이 없어야 한다.&lt;/p&gt;&lt;p&gt;3. Java 생성자는 abstract, static, final, synchronized가 될 수 없다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;생성자의 종류&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;생성자는 두 가지 형태가 존재한다.&lt;/p&gt;&lt;p&gt;1. 기본 생성자(매개변수가 없는 생성자)&lt;/p&gt;&lt;p&gt;2. 매개변수가 있는 생성자&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&gt;매개변수가 있는 생성자&lt;/p&gt;</description>
      <category>Java Programming</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/10</guid>
      <comments>https://blog.thjang.net/10#entry10comment</comments>
      <pubDate>Mon, 3 Sep 2018 17:02:50 +0900</pubDate>
    </item>
    <item>
      <title>Global Azure Bootcamp x Korea 2017</title>
      <link>https://blog.thjang.net/2</link>
      <description>&lt;p&gt;2017년 4월 22일, Azure 한국 커뮤니티 주관, 오픈스택 한국 커뮤니티, 우분투 한국 커뮤니티, 코딩과 무관합니다만등의 운영진 참여로 Global Azure Bootcamp x Korea 2017이 개최되었습니다.&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/999087365A75249033&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999087365A75249033&quot; width=&quot;700&quot; height=&quot;487&quot; filename=&quot;17991523_1502927023064670_5969246031970379131_o.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>커뮤니티 활동</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/2</guid>
      <comments>https://blog.thjang.net/2#entry2comment</comments>
      <pubDate>Sat, 3 Feb 2018 11:55:23 +0900</pubDate>
    </item>
    <item>
      <title>Let's Encrypt / Certbot을 이용해서 무료로 SSL 발급 및 자동 갱신하기</title>
      <link>https://blog.thjang.net/1</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Intro -&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;안녕하세요, 장태희 입니다.&lt;/p&gt;&lt;p&gt;오늘은 자신의 사이트에 무료로 SSL을 발급받고 만료가 되기 전에 자동 갱신을 해보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;얼마 전까지 제가 운영하던 &lt;a href=&quot;https://www.ubuntu-kr.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.ubuntu-kr.org/&lt;/a&gt;는 &lt;a href=&quot;https://www.startssl.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;Startcom&lt;/a&gt;에서 무료로 발급하는 Startssl을 사용 중이었는데요, 무료인 점은 좋지만 &lt;u&gt;&lt;b&gt;몇 가지 단점&lt;/b&gt;&lt;/u&gt;이 있었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 갱신 주기에 맞추어 재갱신을 해주어야 한다. 재갱신 주기를 놓칠 경우 인증서를 처음 key 파일부터 다시 해야한다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 예전에 발급받은 인증서의 경우 재갱신을 할 경우에 서버측 intermediate.crt 파일이 바뀌어 바뀐 crt 파일을 넣어줘야 한다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. SSL 발급 도중 발생 도중 본인의 실수로 인하여 발급받지 못한 경우 무조건 금액을 지불하고 복구하여야 한다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SSL은 대부분 돈 주고 발급받고있고, 가격도 저렴한것부터 EV Class등 비싼것도 많습니다. 찾아보면 부담스럽지 않는 Class 1 SSL도 많습니다.&lt;/p&gt;&lt;p&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: 24pt;&quot;&gt;- Environment -&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;SSL 발급을 위한 세팅을 다음과 같이 적용하였습니다.&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;664&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: 663px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot; colspan=&quot;3&quot; rowspan=&quot;1&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;- Environment -&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;


&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 78px; 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;&lt;b&gt;OS&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 364px; 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;Microsoft Azure Cloud&lt;/p&gt;&lt;p&gt;(Virtual Machine / Ubuntu 14.04)&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:221;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 78px; 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;&lt;b&gt;Web Server Application&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 364px; 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;Apache2&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:221;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 78px; 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;&lt;b&gt;Domain&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 364px; 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;필요 / ssl.thjang.com (hosting.kr에서 구입)&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width:221;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;;&quot;&gt;&lt;p&gt;&amp;nbsp;&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;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Install -&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1.&amp;nbsp;&lt;a href=&quot;https://certbot.eff.org/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://certbot.eff.org/&lt;/a&gt; 으로 접속합니다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 현재 사용중인 Webserver와 OS를 선택합니다. 두 조합에 따라 설치 방법이 약간씩 다릅니다.&lt;/b&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/2705DB3357EFC7A512&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2705DB3357EFC7A512&quot; width=&quot;700&quot; height=&quot;557&quot; filename=&quot;001.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;b&gt;3. 선택 후 아래와 같이 설치 매뉴얼이 제공됩니다.&lt;/b&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/214D9C4457EFC89122&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F214D9C4457EFC89122&quot; width=&quot;700&quot; height=&quot;598&quot; filename=&quot;002.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;b&gt;4. /usr/local/sbin 폴더로 이동합니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;아무 디렉터리에서나 실행 및 설치가 가능하지만 추후 자동 갱신 cron설정을 위해 이 폴더로 설정하였습니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;cd /usr/local/sbin&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;wget 명령어로 certbot-auto 파일을 다운로드 받습니다. 우분투 16.04 / Debian 8의 경우 apt-get으로 python-letsencrypt-apache 패키지를 바로 설치할 수 있습니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(243, 243, 243); color: rgb(17, 17, 17); font-family: VeraMono; font-size: 14px;&quot;&gt;sudo wget https://dl.eff.org/certbot-auto&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다운로드 받은 certbot-auto 파일에 실행 권한을 줍니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;sudo chmod a+x certbot-auto&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;관리자 권한으로 certbot-auto를 실행합니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;sudo ./certbot-auto&lt;br /&gt;&lt;/p&gt;&lt;/div&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/2562364057EFCCE21F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2562364057EFCCE21F&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;003.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;/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/2638EA3E57EFCDB41D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2638EA3E57EFCDB41D&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;004.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;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Deploy&lt;/span&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&amp;nbsp;-&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;기본 패키지 설치가 완료되면&lt;/p&gt;&lt;p&gt;1. 어떠한 도메인 정보도 없어 '도메인 정보가 없는데 계속 진행할 것이냐' 혹은(현재의 경우)&lt;/p&gt;&lt;p&gt;2. VirtualHost 파일에 도메인 정보를 저장한 경우 어떤 도메인을 대상으로 발급 할 것인지 창이 뜨게 됩니다.&lt;/p&gt;&lt;p&gt;해당하는 도메인만 선택하시거나(처음에는 모든 도메인에 *표시로 선택이 되어 있습니다.) Yes를 선택하여 계속 진행합니다.&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/264D0D3F57EFCEA933&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F264D0D3F57EFCEA933&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;005.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;SSL 발급을 원하는 도메인을 입력합니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;콤마, 슬래시, 스페이스바로 한칸 띄우고 다른 도메인을 입력하면 여러 다른 서브도메인들도 같이 발급받을 수 있습니다.&lt;/p&gt;&lt;p&gt;여기서는 ssl.thjang.com 하나만 발급받아 보았습니다.&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/2354194657EFCF5430&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2354194657EFCF5430&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;006.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;/p&gt;&lt;p&gt;도메인 구입시 등록한 이메일이 생각나지 않을 경우,&amp;nbsp;&lt;a href=&quot;http://whois.kisa.or.kr/kor/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://whois.kisa.or.kr/kor/&lt;/a&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/2251033757EFCF940F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2251033757EFCF940F&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;007.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;Certbot 이용에 대한 문서 안내가 나옵니다. Agree를 선택합니다.&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/216F933457EFCFFF22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F216F933457EFCFFF22&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;008.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;SSL적용 방식에 대해 선택합니다.&lt;/p&gt;&lt;p&gt;http와 https 둘 다 허용하고 싶으면 Easy를, http로 접속하면 https로 자동 접속을 원하면 Secure를 선택합니다.&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/2210384057EFD1FF07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2210384057EFD1FF07&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;009.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;SSL 발급이 완료되고 바로 사이트에 적용됩니다.&lt;/p&gt;&lt;p&gt;화면에 성공 창이 나타나면 사이트에 접속하여 SSL이 적용된 것을 확인할 수 있습니다.&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/241F6D4257EFD2880B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241F6D4257EFD2880B&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;010.png&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/24225E3D57EFD3091B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F24225E3D57EFD3091B&quot; width=&quot;700&quot; height=&quot;394&quot; filename=&quot;011.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;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Renew&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;-&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Certbot을 통한 SSL 발급은 기한이 3개월 입니다. 인증서 갱신을 위해서는&amp;nbsp;renew --dry-run 옵션을 통해 연장할 수 있습니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;sudo ./certbot-auto renew --dry-run&lt;br /&gt;&lt;/p&gt;&lt;/div&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/230AB34657EFD3A10E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F230AB34657EFD3A10E&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;012.png&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: 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/27636E4157EFD41B2E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F27636E4157EFD41B2E&quot; width=&quot;700&quot; height=&quot;376&quot; filename=&quot;013.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;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Automation -&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;SSL적용 후의 최종 목적은 '내가 굳이 신경쓰지 않아도 알아서 갱신되었으면 좋겠다'이실 겁니다.&lt;/p&gt;&lt;p&gt;만료 주기를 어딘가에 적어놓거나 만료 시점의 메일을 받고 재갱신을 하는건 여간 귀찮은 일이 아닐 수 없습니다.&lt;/p&gt;&lt;p&gt;데비안의 경우 /etc/cron.d/certbot에 자동으로 설정이 되지만 우분투의 경우 crontab 등으로 세팅을 해 주셔야 합니다.&lt;/p&gt;&lt;p&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: 700px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/253A723357EFD5DC24&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F253A723357EFD5DC24&quot; width=&quot;700&quot; height=&quot;105&quot; filename=&quot;014.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;데비안 세팅 파일을 참고하여 우분투 crontab에 등록을 해 보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;먼저 crontab에 접속합니다.&lt;/p&gt;&lt;p&gt;sudo 권한으로 실행해야하기 때문에 앞에 꼭 sudo를 붙겨주시기 바랍니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;sudo crontab -e&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;crontab 파일 맨 아래 아래와 같이 입력합니다.&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;0 */12 * * * /usr/local/sbin/certbot-auto renew --quiet --no-self-upgrade&lt;/p&gt;&lt;/div&gt;&lt;p&gt;시간 세팅이 0 */12 * * * 은 매일 12시간 0분마다 certbot-auto를 실행하라는 뜻입니다.&lt;/p&gt;&lt;p&gt;현재 certbot-auto는 하루에 두번 실행을 권장하고 있습니다.&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/222B4F4057EFD8D209&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F222B4F4057EFD8D209&quot; width=&quot;700&quot; height=&quot;419&quot; filename=&quot;015.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;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;- Trouble Shooting -&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 집 컴퓨터에서는 SSL 발급이 안됩니다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;→ Public IP와 Domain을 가지고 있어야 발급이 가능합니다. Router IP와 localhost로는 실행할 수 없습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2.&amp;nbsp;Failed authorization procedure. domain (tls-sni-01): run:acme:error:connection :: The server could not connect to the client to verify to domain ~ 과 같은 에러가 나타납니다.&lt;/b&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: 695px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/241F4D4057EFDAA81B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F241F4D4057EFDAA81B&quot; width=&quot;695&quot; height=&quot;241&quot; filename=&quot;error_https.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;→ 80포트와 더불어 443포트(https)도 개방되어 있는지 확인해 주시기 바랍니다. 클라우드 서버의 경우 보안그룹 옵션 등에서 포트 개방 여부를 확인하여 주세요.&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/2703A54557EFDAED02&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F2703A54557EFDAED02&quot; width=&quot;700&quot; height=&quot;393&quot; filename=&quot;https.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. certbot-auto 실행 후에 webserver ssl conf파일 옵션이 변경되었습니다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;→ certbot-auto는 자동 설정이라는 매우 편리함이 있지만, webserver의 ssl 설정을 수정하게 됩니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 백업 파일도 만들어 주지 않기 때문에 백업을 해두지 않으면 세팅값이 사라질 수도 있습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 반드시 실행 전 ssl conf&lt;u&gt;(우분투의 경우 /etc/apache2/sites-available/default-ssl.conf)&lt;/u&gt;파일을 반드시 백업하시기 바랍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 바로 적용은 하지 않고 일단 crt와 pem키 등만 발급받고 싶어요.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;→ certbot-auto 실행시 --webserver이름 certonly 옵션을 사용하면 SSL만 발급받고 서버에 적용은 되지 않습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 경로는 /etc/letsencrypt에 저장되어 있습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 여러 디렉터리 중 현재 적용되고 있는 pem 파일들을 보려면 live 디렉터리에서 확인하실 수 있습니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 설정 경로는 SSL이 적용된 서버의 conf 파일을 참고하시기 바랍니다.&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/216D494557EFDD451A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F216D494557EFDD451A&quot; width=&quot;700&quot; height=&quot;120&quot; filename=&quot;certonly.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>장태희</author>
      <guid isPermaLink="true">https://blog.thjang.net/1</guid>
      <comments>https://blog.thjang.net/1#entry1comment</comments>
      <pubDate>Sun, 2 Oct 2016 00:40:55 +0900</pubDate>
    </item>
  </channel>
</rss>