<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>IT일타강사</title>
    <link>https://goodsaem.tistory.com/</link>
    <description>IT일타강사</description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 03:23:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>goodsaem</managingEditor>
    <image>
      <title>IT일타강사</title>
      <url>https://tistory1.daumcdn.net/tistory/4329796/attach/b75b767bf5a34f58922173bde3b7b5ca</url>
      <link>https://goodsaem.tistory.com</link>
    </image>
    <item>
      <title>jetbrains - IntelliJ IDEA Ultimate 30% 할인된 금액으로 구매</title>
      <link>https://goodsaem.tistory.com/64</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;jetbrains&amp;nbsp;-&amp;nbsp;IntelliJ&amp;nbsp;IDEA&amp;nbsp;Ultimate&amp;nbsp;30%&amp;nbsp;할인된&amp;nbsp;금액으로&amp;nbsp;구매&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21년 8월30일까지 한국어언어팩 출시기념으로 30% 할인된 금액으로 판매하여 구매를 했습니다.&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-origin-width=&quot;2132&quot; data-origin-height=&quot;806&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ky7le/btrdo4XPl6Y/EZj2OLz3OJ2KrewRHZ9PH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ky7le/btrdo4XPl6Y/EZj2OLz3OJ2KrewRHZ9PH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ky7le/btrdo4XPl6Y/EZj2OLz3OJ2KrewRHZ9PH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fky7le%2Fbtrdo4XPl6Y%2FEZj2OLz3OJ2KrewRHZ9PH0%2Fimg.png&quot; data-origin-width=&quot;2132&quot; data-origin-height=&quot;806&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매한 시점 버전으로 영구 사용할수 있는 라이선스 입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;946&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUolah/btrdo71AIyP/PsVv1dnb9jnO2ey40UEkxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUolah/btrdo71AIyP/PsVv1dnb9jnO2ey40UEkxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUolah/btrdo71AIyP/PsVv1dnb9jnO2ey40UEkxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUolah%2Fbtrdo71AIyP%2FPsVv1dnb9jnO2ey40UEkxK%2Fimg.png&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;946&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 IntelliJ IDEA Ultimate 에 vue.js 플러그인을 설치하면&amp;nbsp; vue.js 프로그램을 사용할수 있습니다. webstorm 구매할 필요없이&lt;/p&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;IntelliJ IDEA Ultimate 하나로 java와 vue.js 모두 개발 가능합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1408&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x39WQ/btrdrlxA4GD/UlQA8DvmEyADI9gpeQtrkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x39WQ/btrdrlxA4GD/UlQA8DvmEyADI9gpeQtrkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x39WQ/btrdrlxA4GD/UlQA8DvmEyADI9gpeQtrkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx39WQ%2FbtrdrlxA4GD%2FUlQA8DvmEyADI9gpeQtrkK%2Fimg.png&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1408&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Setup</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/64</guid>
      <comments>https://goodsaem.tistory.com/64#entry64comment</comments>
      <pubDate>Sun, 29 Aug 2021 00:24:45 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] vue-echarts 설치</title>
      <link>https://goodsaem.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;설치방법&lt;/p&gt;
&lt;pre id=&quot;code_1629527239737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; yarn add echarts vue-echarts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 발생하여 아래 내용을 추가함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yarn add @vue/composition-api&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/60</guid>
      <comments>https://goodsaem.tistory.com/60#entry60comment</comments>
      <pubDate>Sat, 21 Aug 2021 15:27:26 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] 서비스 포트 변경</title>
      <link>https://goodsaem.tistory.com/59</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;750&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2zI19/btrcFXqSWPG/qXDxxzNpjZX9MaNUi9fwEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2zI19/btrcFXqSWPG/qXDxxzNpjZX9MaNUi9fwEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2zI19/btrcFXqSWPG/qXDxxzNpjZX9MaNUi9fwEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2zI19%2FbtrcFXqSWPG%2FqXDxxzNpjZX9MaNUi9fwEK%2Fimg.png&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;750&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[vue.js]&amp;nbsp;서비스&amp;nbsp;포트&amp;nbsp;변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.js 를 시작하면 8080 포트로 서비스가 시작 됩니다. 8080 말고 다른 포트를 변경하고 싶을때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;package.json&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 아래와 같이 수정합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--port 8077&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 포트를 8077로 변경했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1629431643352&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[6]&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;tistory&quot;,
  &quot;version&quot;: &quot;0.1.0&quot;,
  &quot;private&quot;: true,
  &quot;scripts&quot;: {
    &quot;serve&quot;: &quot;vue-cli-service serve --port 8077&quot;,
    &quot;build&quot;: &quot;vue-cli-service build&quot;,
    &quot;lint&quot;: &quot;vue-cli-service lint&quot;
  },
  &quot;dependencies&quot;: {
    &quot;@fortawesome/fontawesome-free&quot;: &quot;^5.15.4&quot;,
    &quot;axios&quot;: &quot;^0.21.1&quot;,
    &quot;core-js&quot;: &quot;^3.6.5&quot;,
    &quot;element-ui&quot;: &quot;^2.15.5&quot;,
    &quot;vue&quot;: &quot;^2.6.11&quot;,
    &quot;vue-clipboard2&quot;: &quot;^0.3.1&quot;,
    &quot;vue-router&quot;: &quot;^3.5.2&quot;
  },
  &quot;devDependencies&quot;: {
    &quot;@vue/cli-plugin-babel&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-plugin-eslint&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-service&quot;: &quot;~4.5.0&quot;,
    &quot;babel-eslint&quot;: &quot;^10.1.0&quot;,
    &quot;eslint&quot;: &quot;^6.7.2&quot;,
    &quot;eslint-plugin-vue&quot;: &quot;^6.2.2&quot;,
    &quot;vue-template-compiler&quot;: &quot;^2.6.11&quot;
  },
  &quot;eslintConfig&quot;: {
    &quot;root&quot;: true,
    &quot;env&quot;: {
      &quot;node&quot;: true
    },
    &quot;extends&quot;: [
      &quot;plugin:vue/essential&quot;,
      &quot;eslint:recommended&quot;
    ],
    &quot;parserOptions&quot;: {
      &quot;parser&quot;: &quot;babel-eslint&quot;
    },
    &quot;rules&quot;: {}
  },
  &quot;browserslist&quot;: [
    &quot;&amp;gt; 1%&quot;,
    &quot;last 2 versions&quot;,
    &quot;not dead&quot;
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/59</guid>
      <comments>https://goodsaem.tistory.com/59#entry59comment</comments>
      <pubDate>Fri, 20 Aug 2021 12:56:49 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] Font Awesome 색상 사이즈 변경방법</title>
      <link>https://goodsaem.tistory.com/58</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deqL9z/btrcHED72vN/QsukDikQXCvZCfIRUTRLNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deqL9z/btrcHED72vN/QsukDikQXCvZCfIRUTRLNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deqL9z/btrcHED72vN/QsukDikQXCvZCfIRUTRLNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeqL9z%2FbtrcHED72vN%2FQsukDikQXCvZCfIRUTRLNK%2Fimg.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue.js 기반 환경에서 폰트어썸 설정하는 방법은 아래 내용을 참고하세요.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://goodsaem.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2021.08.19 - [Language/Vue.js] - vuejs에 폰트어썸 사용&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629415744105&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;vuejs에 폰트어썸 사용&quot; data-og-description=&quot;화면 개발할때 아이콘을 자주 사용합니다. 아이콘을 사용하면 사용자가 해당 기능에 대한 이해가 수월해 지고 만든 화면의 완성도도 높아진다는 장점이 있습니다. 하지만 아이콘이 필요할때 마&quot; data-og-host=&quot;goodsaem.tistory.com&quot; data-og-source-url=&quot;https://goodsaem.tistory.com/55&quot; data-og-url=&quot;https://goodsaem.tistory.com/55&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AGJnc/hyLi67MvFy/TjtAckiK5vzvr4xLFeLUJK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/yIG5c/hyLi4hPRVb/MJRYgMyTlqySVDthZ8K1KK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://goodsaem.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://goodsaem.tistory.com/55&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AGJnc/hyLi67MvFy/TjtAckiK5vzvr4xLFeLUJK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/yIG5c/hyLi4hPRVb/MJRYgMyTlqySVDthZ8K1KK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;vuejs에 폰트어썸 사용&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;화면 개발할때 아이콘을 자주 사용합니다. 아이콘을 사용하면 사용자가 해당 기능에 대한 이해가 수월해 지고 만든 화면의 완성도도 높아진다는 장점이 있습니다. 하지만 아이콘이 필요할때 마&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;goodsaem.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폰트어썸은 svg vector 를 이용하므로 아이콘의 색상 및 사이즈 변경이 가능합니다.&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;/h2&gt;
&lt;pre id=&quot;code_1629416190068&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;ul&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘을 출력해 봅니다. &amp;lt;i class=&quot;fa fa-bus&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘의 색상을 변경해 봅니다. &amp;lt;i class=&quot;fa fa-bus&quot; style=&quot;color:blue&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘의 크기를 변경해 봅니다.
        &amp;lt;i class=&quot;fa fa-bus&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-3x&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-4x&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-5x&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-6x&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘의 테두리를 적용합니다. &amp;lt;i class=&quot;fa fa-bus fa-border&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘의 방향을 변경합니다.
        &amp;lt;i class=&quot;fa fa-bus&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-rotate-90&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-rotate-90&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-rotate-180&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-rotate-270&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-flip-horizontal&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-flip-vertical&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘을 회전합니다.
        &amp;lt;i class=&quot;fa fa-bus fa-spin fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;
        아이콘을 중첩합니다.
        &amp;lt;span class=&quot;fa-stack fa-lg&quot;&amp;gt;
        &amp;lt;i class=&quot;fa fa-circle fa-stack-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;i class=&quot;fa fa-bus fa-stack-1x fa-inverse&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/span&amp;gt;
      &amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
export default {
  name: &quot;FontAwesome2&quot;
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style&amp;gt;
li {
  text-align: left;
}
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행결과&lt;/h2&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page5&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/58</guid>
      <comments>https://goodsaem.tistory.com/58#entry58comment</comments>
      <pubDate>Fri, 20 Aug 2021 08:40:44 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] 프로젝트에 axios 적용하기</title>
      <link>https://goodsaem.tistory.com/57</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;432&quot; data-filename=&quot;va.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RwiEv/btrcGkGbDOn/GnZK9dGp18WamusZf8Obdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RwiEv/btrcGkGbDOn/GnZK9dGp18WamusZf8Obdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RwiEv/btrcGkGbDOn/GnZK9dGp18WamusZf8Obdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRwiEv%2FbtrcGkGbDOn%2FGnZK9dGp18WamusZf8Obdk%2Fimg.png&quot; data-origin-width=&quot;1395&quot; data-origin-height=&quot;432&quot; data-filename=&quot;va.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소개&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Axios는&amp;nbsp;브라우저&amp;nbsp;및&amp;nbsp;node.js를&amp;nbsp;위한&amp;nbsp;간단한&amp;nbsp;비동기&amp;nbsp;통신&amp;nbsp;HTTP&amp;nbsp;클라이언트입니다.&amp;nbsp;Axios는&amp;nbsp;매우&amp;nbsp;확장&amp;nbsp;가능한&amp;nbsp;인터페이스를&amp;nbsp;가진&amp;nbsp;작은&amp;nbsp;패키지로&amp;nbsp;사용하기&amp;nbsp;쉬운&amp;nbsp;라이브러리를&amp;nbsp;제공합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저에 내장되어 있는 fetch 와 비교한 표입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;axios vs fetch&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Axios&lt;/td&gt;
&lt;td&gt;Fetch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;요청 객체에 url이 있습니다.&lt;/td&gt;
&lt;td&gt;요청 객체에 url이 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;써드파티 라이브러리로 설치가 필요합니다.&lt;/td&gt;
&lt;td&gt;현대 브라우저에 기본 탑재되어 별도&amp;nbsp; 설치가 필요 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;XSRF(크로사 사이트 위조) 보호 기능이 있습니다.&lt;/td&gt;
&lt;td&gt;별도 보호 기능이 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data 속성을 사용합니다.&lt;/td&gt;
&lt;td&gt;body 속성을 사용합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data는 object를 포함 합니다.&lt;/td&gt;
&lt;td&gt;body는 문자열화 되어있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;status가 200이고 statusText가 &amp;lsquo;OK&amp;rsquo;이면 성공 입니다.&lt;/td&gt;
&lt;td&gt;응답객체가 ok 속성을 포함하면 성공 입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자동으로 JSON데이터 형식으로 변환됩니다.&lt;/td&gt;
&lt;td&gt;.json()메서드를 사용해야 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;요청을 취소할 수 있고 타임아웃을 걸 수 있습니다.&lt;/td&gt;
&lt;td&gt;해당 기능 존재 하지않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP 요청을 가로챌수 있습니다.&lt;/td&gt;
&lt;td&gt;기본적으로 제공하지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;download진행에 대해 기본적인 지원을 합니다.&lt;/td&gt;
&lt;td&gt;지원하지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;많은 브라우저를 지원합니다.&lt;/td&gt;
&lt;td&gt;Chrome 42+, Firefox 39+, Edge 14+, and Safari 10.1+이상에 지원합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;axios가 좀더 많은 기능을 제공해 줍니다. 그래서 인지 가장 많이 사용합니다.&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;/h2&gt;
&lt;pre id=&quot;code_1629348002823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add axios&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;main.js&amp;nbsp; 파일 수정&lt;/h2&gt;
&lt;pre id=&quot;code_1629348131466&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[6,9]&quot;&gt;&lt;code&gt;import Vue from 'vue'
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from './router'
import '@fortawesome/fontawesome-free/js/all.js'
import axios from &quot;axios&quot;;
import App from './App.vue'
 
Vue.prototype.$axios = axios;
Vue.config.productionTip = false
Vue.use(Element, { size: 'small', zIndex: 3000 });
 
new Vue({
  router,
  render: h =&amp;gt; h(App),
}).$mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 (행정코드)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;법정 행정 코드를 다운로드 받아서 csv 파일을 만들고 이를 axios로 불러와서 행정동을 선택하는 예제를 만들어 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/LawCode.vue 파일을&amp;nbsp; 생성하고 아래와 같이 코딩합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629391265508&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;el-row style=&quot;width:800px&quot;&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;el-select v-model=&quot;cate1&quot; @change=&quot;chgCate1&quot; placeholder=&quot;시/도&quot;&amp;gt;
          &amp;lt;el-option
              v-for=&quot;item in options&quot;
              :key=&quot;item.value&quot;
              :label=&quot;item.label&quot;
              :value=&quot;item.value&quot;
              :disabled=&quot;item.disabled&quot;&amp;gt;
          &amp;lt;/el-option&amp;gt;
        &amp;lt;/el-select&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;el-select v-model=&quot;cate2&quot; @change=&quot;chgCate2&quot; placeholder=&quot;시/군/구&quot;&amp;gt;
          &amp;lt;el-option
              v-for=&quot;item in options2&quot;
              :key=&quot;item.value&quot;
              :label=&quot;item.label&quot;
              :value=&quot;item.value&quot;
              :disabled=&quot;item.disabled&quot;&amp;gt;
          &amp;lt;/el-option&amp;gt;
        &amp;lt;/el-select&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;el-select v-model=&quot;cate3&quot; @change=&quot;chgCate3&quot; placeholder=&quot;읍/면/동&quot;&amp;gt;
          &amp;lt;el-option
              v-for=&quot;item in options3&quot;
              :key=&quot;item.value&quot;
              :label=&quot;item.label&quot;
              :value=&quot;item.value&quot;
              :disabled=&quot;item.disabled&quot;&amp;gt;
          &amp;lt;/el-option&amp;gt;
        &amp;lt;/el-select&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;el-select v-model=&quot;cate4&quot; @change=&quot;chgCate4&quot; placeholder=&quot;리&quot;&amp;gt;
          &amp;lt;el-option
              v-for=&quot;item in options4&quot;
              :key=&quot;item.value&quot;
              :label=&quot;item.label&quot;
              :value=&quot;item.value&quot;
              :disabled=&quot;item.disabled&quot;&amp;gt;
          &amp;lt;/el-option&amp;gt;
        &amp;lt;/el-select&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
const URL = &quot;https://onehit9.github.io/&quot;;
 
export default {
  name: &quot;LawCode&quot;,
  created() {
    this.getData();
  },
  data() {
    return {
      rows: [],
      options: [],
      options2: [],
      options3: [],
      options4: [],
      cate1: &quot;&quot;,
      cate2: &quot;&quot;,
      cate3: &quot;&quot;,
      cate4: &quot;&quot;,
      lastCate: &quot;&quot;,
    }
  },
  methods: {
    resetCate(level) {
      if (level &amp;lt; 3) {
        this.cate2 = &quot;&quot;;
        this.options2 = [];
      }
      if (level &amp;lt; 4) {
        this.cate3 = &quot;&quot;;
        this.options3 = [];
      }
      if (level &amp;lt; 5) {
        this.cate4 = &quot;&quot;;
        this.options4 = [];
      }
    },
 
    chgCate(cateNm,idx) {
      this.resetCate(idx - 1);
      let options = [];
      let cate = this.rows.filter(
          row =&amp;gt; row.split(&quot;,&quot;)[idx] == &quot;&quot; &amp;amp;&amp;amp;
              (cateNm == &quot;&quot; ? true : row.split(&quot;,&quot;)[idx-1] != &quot;&quot; &amp;amp;&amp;amp; row.split(&quot;,&quot;)[idx-2] == cateNm)
      );
      cate.map(cate =&amp;gt; options.push({
        value: cate.split(&quot;,&quot;)[0],
        label: cate.split(&quot;,&quot;)[idx - 1]
      }))
      return options;
    },
 
    getData() {
      this.$axios.get(URL + 'apt/' + 'law_code.csv', {params: {}})
          .then((response) =&amp;gt; {
            this.rows = response.data.replace(/[&quot;]+/g, &quot;&quot;).split(&quot;\n&quot;);
            this.options = this.chgCate(&quot;&quot;,2);
          });
    },
    chgCate1() {
      this.lastCate = this.cate1;
      let cateNm = this.options[this.options.findIndex(e =&amp;gt; e.value === this.cate1)].label;
      this.options2 = this.chgCate(cateNm,3);
    },
    chgCate2() {
      this.lastCate = this.cate2;
      let cateNm = this.options2[this.options2.findIndex(e =&amp;gt; e.value === this.cate2)].label;
      this.options3 = this.chgCate(cateNm,4);
    },
    chgCate3() {
      this.lastCate = this.cate3;
      let cateNm = this.options3[this.options3.findIndex(e =&amp;gt; e.value === this.cate3)].label;
      this.options4 = this.chgCate(cateNm,5);
    },
    chgCate4() {
      this.lastCate = this.cate4;
    },
  }
}
&amp;lt;/script&amp;gt;
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위코드에서 중요한 부부은 104~110라인의 getData() 부분으로 axios를 이용해서 law_code.csv를 가져오는 부분입니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page3&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/57</guid>
      <comments>https://goodsaem.tistory.com/57#entry57comment</comments>
      <pubDate>Thu, 19 Aug 2021 13:44:08 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js][App] FontAwesome 아이콘 종류 검색</title>
      <link>https://goodsaem.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PfwJ4/btrcGUtHuA2/lUaZVvGUagLTFXuTraO6rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PfwJ4/btrcGUtHuA2/lUaZVvGUagLTFXuTraO6rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PfwJ4/btrcGUtHuA2/lUaZVvGUagLTFXuTraO6rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPfwJ4%2FbtrcGUtHuA2%2FlUaZVvGUagLTFXuTraO6rK%2Fimg.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://fontawesome.com/cheatsheet&quot;&gt;https://fontawesome.com/cheatsheet&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;에 접속하시면 무료로 사용할수 있는 아이콘들을 확인할수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629346686623&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Font Awesome&quot; data-og-description=&quot;The world&amp;rsquo;s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.&quot; data-og-host=&quot;fontawesome.com&quot; data-og-source-url=&quot;https://fontawesome.com/cheatsheet&quot; data-og-url=&quot;https://fontawesome.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9DTBr/hyLiklp5l7/UGVjQMZgcYlO2PslKzzwyk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/SUUPM/hyLiWwseFS/mwLnFAmFk2BLGpWDHZ1IYK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://fontawesome.com/cheatsheet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://fontawesome.com/cheatsheet&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9DTBr/hyLiklp5l7/UGVjQMZgcYlO2PslKzzwyk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/SUUPM/hyLiWwseFS/mwLnFAmFk2BLGpWDHZ1IYK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Font Awesome&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The world&amp;rsquo;s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;fontawesome.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금더 쉽게 아이콘 검색을 위한 app을 만들어 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 클립보드 복사 붙여 넣기를 쉽게 하기 위해 vue-clipboard2 를 설치합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629394437383&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add vue-clipboard2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.js 파일을 아래와 같이 수정합니다. (클립보드를 사용할수 있게 변경합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629394486095&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[8,14]&quot;&gt;&lt;code&gt;import Vue from 'vue'
import locale from 'element-ui/lib/locale/lang/ko'
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from './router'
import '@fortawesome/fontawesome-free/js/all.js'
import axios from &quot;axios&quot;;
import VueClipboard from 'vue-clipboard2'
import App from './App.vue'
 
Vue.prototype.$axios = axios;
Vue.config.productionTip = false
Vue.use(Element, {locale},{ size: 'small', zIndex: 3000 });
Vue.use(VueClipboard);
 
new Vue({
  router,
  render: h =&amp;gt; h(App),
}).$mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/IconSearch.vue 파일을 아래와 같이 작성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629394679227&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;el-container&amp;gt;
    &amp;lt;el-main&amp;gt;
      &amp;lt;el-row&amp;gt;
        &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
          &amp;lt;h3&amp;gt;아이콘 검색&amp;lt;/h3&amp;gt;
        &amp;lt;/el-col&amp;gt;
      &amp;lt;/el-row&amp;gt;
      &amp;lt;el-row&amp;gt;
        &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
          &amp;lt;el-input placeholder=&quot;아이콘 이름을 입력하세요 ex) hotel&quot; v-model=&quot;searchStr&quot; @input=&quot;iconSearch&quot;&amp;gt;&amp;lt;/el-input&amp;gt;
        &amp;lt;/el-col&amp;gt;
      &amp;lt;/el-row&amp;gt;
      &amp;lt;el-row&amp;gt;
        &amp;lt;el-col :span=&quot;22&quot;&amp;gt;
          &amp;lt;ul v-if=&quot;searchIcon.length &amp;gt; 0&quot;&amp;gt;
            &amp;lt;li v-for=&quot;item in searchIcon&quot; :key=&quot;item&quot; v-on:click=&quot;copyClipboard(item)&quot; style=&quot;cursor:pointer&quot;&amp;gt;
              &amp;lt;i :class=&quot;'fas fa-' + item&quot;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b style=&quot;color:black&quot;&amp;gt;{{item}}&amp;lt;/b&amp;gt;
              &amp;lt;span style=&quot;color: #848d95&quot;&amp;gt;&amp;amp;lt;i class=&quot;fas fa-{{item}}&quot;&amp;amp;gt;&amp;amp;lt;/i&amp;amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/li&amp;gt;
          &amp;lt;/ul&amp;gt;
        &amp;lt;/el-col&amp;gt;
      &amp;lt;/el-row&amp;gt;
      &amp;lt;el-row&amp;gt;
        &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
          &amp;lt;h3&amp;gt;아이콘 색인&amp;lt;/h3&amp;gt;
        &amp;lt;/el-col&amp;gt;
      &amp;lt;/el-row&amp;gt;
      &amp;lt;el-row&amp;gt;
        &amp;lt;el-col :span=&quot;2&quot;&amp;gt;
          &amp;lt;ul v-if=&quot;alphabet.length &amp;gt; 0&quot;&amp;gt;
            &amp;lt;li v-for=&quot;item in alphabet&quot; :key=&quot;item&quot;&amp;gt;
              &amp;lt;button @click=&quot;iconIndex(item)&quot;&amp;gt;{{item}}&amp;lt;/button&amp;gt;
            &amp;lt;/li&amp;gt;
          &amp;lt;/ul&amp;gt;
        &amp;lt;/el-col&amp;gt;
        &amp;lt;el-col :span=&quot;22&quot;&amp;gt;
          &amp;lt;ul v-if=&quot;indexIcon.length &amp;gt; 0&quot;&amp;gt;
            &amp;lt;li v-for=&quot;item in indexIcon&quot; :key=&quot;item&quot; v-on:click=&quot;copyClipboard(item)&quot; style=&quot;cursor:pointer&quot;&amp;gt;
              &amp;lt;i :class=&quot;'fas fa-' + item&quot;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b style=&quot;color:black&quot;&amp;gt;{{item}}&amp;lt;/b&amp;gt;
              &amp;lt;span style=&quot;color: #848d95&quot;&amp;gt;&amp;amp;lt;i class=&quot;fas fa-{{item}}&quot;&amp;amp;gt;&amp;amp;lt;/i&amp;amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/li&amp;gt;
          &amp;lt;/ul&amp;gt;
        &amp;lt;/el-col&amp;gt;
      &amp;lt;/el-row&amp;gt;
    &amp;lt;/el-main&amp;gt;
  &amp;lt;/el-container&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
const URL = &quot;https://onehit9.github.io/&quot;;
export default {
  name: &quot;IconSearch&quot;,
  created() {
    this.alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
    this.$axios.get(URL + 'apt/' + 'font.csv', {params: {}})
        .then((response) =&amp;gt; {
          this.icons = response.data.split(&quot;,&quot;);
          this.iconIndex('a');
        });
  },
  data() {
    return {
      searchStr: '',
      message: '',
      alphabet : [],
      indexIcon: [],
      searchIcon: [],
      icons: [],
    }
  },
  methods: {
    iconIndex(idx) {
      this.indexIcon = this.icons.filter(item =&amp;gt; item.charAt(0) === idx);
    },
    iconSearch(str) {
      if(str.length &amp;lt;2 ) {
        this.searchIcon = [];
        return;
      }
      this.searchIcon = this.icons.filter(item =&amp;gt; item.indexOf(str) &amp;gt; -1);
    },
    copyClipboard(item) {
      const text = '&amp;lt;i class=&quot;fas fa-' + item+'&quot;&amp;gt;&amp;lt;/i&amp;gt;';
      this.$copyText(text);
      this.$message(text + ' 클립보드에 복사되었습니다. 붙여넣기(ctrl + v) 하여 사용하실수 있습니다.');
    },
  }
}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. font.csv 파일을 만들어서 사용할수 있는 아이콘의 문자열을 , 로 분리시켜 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.axios로 csv 파일을 불러와서 icons array에 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 해당 검색어 및 인덱스에 맞는 아이콘만 필터하여 보여 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 클릭시 클립보드에 복사되도록 copyText 를 실행합니다.&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page4&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-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>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/56</guid>
      <comments>https://goodsaem.tistory.com/56#entry56comment</comments>
      <pubDate>Thu, 19 Aug 2021 13:19:47 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] FontAwesome 폰트어썸 사용</title>
      <link>https://goodsaem.tistory.com/55</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8hJKH/btrcGklRBIi/b6VKq8KvwYIsaBhCMKeinK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8hJKH/btrcGklRBIi/b6VKq8KvwYIsaBhCMKeinK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8hJKH/btrcGklRBIi/b6VKq8KvwYIsaBhCMKeinK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8hJKH%2FbtrcGklRBIi%2Fb6VKq8KvwYIsaBhCMKeinK%2Fimg.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot; data-filename=&quot;fontawesome.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 개발할때 아이콘을 자주 사용합니다. 아이콘을 사용하면 사용자가 해당 기능에 대한 이해가 수월해 지고 만든 화면의 완성도도 높아진다는 장점이 있습니다. 하지만 아이콘이 필요할때 마다 디자이너에게 요청하면 상당히 눈치가 보일것 같네요. 그렇다고 포토샵을 열어서 아이콘을 만들수도 없고 이때 사용할수 있는 유용한 웹 아이콘 폰트 라이브러리가 있습니다. Font Awesome 이라는 라이브러리 인데요 웹 아이콘 폰트 시장에서 가장 인기있는 라이브러리 입니다. 이번 시간에는 Vue.js 에서 Font Awesome 을 사용하는 방법에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;_1-설치&quot; data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.js 프로젝트를 생성했다고 가정하고 font awesome 을 추가 설치 하는 방법입니다. yarn 또는 npm 둘중 하나의 방법을 이용해 라이브러리를 추가해 주세요&lt;/p&gt;
&lt;h3 id=&quot;yarn을-이용한-설치&quot; data-ke-size=&quot;size23&quot;&gt;yarn을 이용한 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;yarn 을 이용한 설치 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629341289964&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn add @fortawesome/fontawesome-free&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;npm-설치-방법&quot; data-ke-size=&quot;size23&quot;&gt;npm 설치 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm을 이용한 설치 방법 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629341327458&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save @fortawesome/fontawesome-free&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;main-js-수정&quot; data-ke-size=&quot;size23&quot;&gt;main.js 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.js&amp;nbsp;에&amp;nbsp;&amp;nbsp;import&amp;nbsp;'@fortawesome/fontawesome-free/js/all.js'&amp;nbsp;코드를&amp;nbsp;추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629341441838&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import Vue from 'vue'
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from './router'
import '@fortawesome/fontawesome-free/js/all.js'
import App from './App.vue'
 
Vue.config.productionTip = false
Vue.use(Element, { size: 'small', zIndex: 3000 });
 
new Vue({
  router,
  render: h =&amp;gt; h(App),
}).$mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;_2-사용법&quot; data-ke-size=&quot;size26&quot;&gt;사용법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;vue.js template 부분에 아래와 같이 코드를 작성하시면 아이콘이 출력됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1629341510934&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;i class=&quot;fa fa-bus&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;i class=&quot;fas fa-ambulance&quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;i class=&quot;fas fa-hotel&quot;&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt;&lt;/pre&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;componets 에 FontAwesome.vue파일을 생성하고 아래와 같이 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629341585544&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div style=&quot;margin-top:40px&quot;&amp;gt;
    &amp;lt;i class=&quot;fa fa-bus fa-lg&quot;&amp;gt;&amp;lt;/i&amp;gt;
    &amp;lt;i class=&quot;fas fa-ambulance fa-2x&quot;&amp;gt;&amp;lt;/i&amp;gt;
    &amp;lt;i class=&quot;fas fa-hotel fa-4x&quot;&amp;gt;&amp;lt;/i&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
export default {
  name: &quot;FontAwesome&quot;
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style scoped&amp;gt;
 
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;router/basic.js 파일에 추가한 컴포넌트의 path를 지정합니다. (page2 라고 지정함)&lt;/p&gt;
&lt;pre id=&quot;code_1629341675387&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import HelloWorld from &quot;@/components/HelloWorld&quot;;
import Page1 from &quot;@/components/Page1&quot;;
import FontAwesome from &quot;@/components/FontAwesome&quot;;
 
const basic = [
    {path: '/', name: 'index', component: HelloWorld},
    {path: '/hello-world', name: 'HelloWorld', component: HelloWorld},
    {path: '/page1', name: 'Page1', component: Page1},
    {path: '/page2', name: 'FontAwesome', component: FontAwesome},
];
 
export default basic;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;App.vue에 추가한 페이지 page2에 대한 라우터 링크를 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629341740783&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div id=&quot;app&quot;&amp;gt;
    &amp;lt;router-link to=&quot;/hello-world&quot;&amp;gt;hello&amp;lt;/router-link&amp;gt; |
    &amp;lt;router-link to=&quot;/page1&quot;&amp;gt;page1&amp;lt;/router-link&amp;gt; |
    &amp;lt;router-link to=&quot;/page2&quot;&amp;gt;page2&amp;lt;/router-link&amp;gt; |
    &amp;lt;router-view&amp;gt;&amp;lt;/router-view&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
export default {
  name: 'App'
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style&amp;gt;
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 10px;
}
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행결과&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page2&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/55</guid>
      <comments>https://goodsaem.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 19 Aug 2021 11:57:54 +0900</pubDate>
    </item>
    <item>
      <title>[Mac] Intellij 에서 코드 자동 정렬하기</title>
      <link>https://goodsaem.tistory.com/54</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[Mac] Intellij 에서 코드 자동 정렬하기&lt;/p&gt;
&lt;pre id=&quot;code_1629248151206&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;option + command + L&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발자도구/IntelliJ</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/54</guid>
      <comments>https://goodsaem.tistory.com/54#entry54comment</comments>
      <pubDate>Wed, 18 Aug 2021 09:57:19 +0900</pubDate>
    </item>
    <item>
      <title>Intellij 대소문자  변환 방법</title>
      <link>https://goodsaem.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Intellij 대소문자&amp;nbsp;&amp;nbsp;변환 단축키 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629116591183&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Command + shift + U&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발자도구/IntelliJ</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/53</guid>
      <comments>https://goodsaem.tistory.com/53#entry53comment</comments>
      <pubDate>Mon, 16 Aug 2021 21:23:29 +0900</pubDate>
    </item>
    <item>
      <title>Postgresql split 하는방법</title>
      <link>https://goodsaem.tistory.com/52</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;특정 문자열을 기준으로 split할때 split_part 함수를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629085433396&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select split_part(dong,' ',1),split_part(dong,' ',2),split_part(dong,' ',3),dong from trade&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/52</guid>
      <comments>https://goodsaem.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 16 Aug 2021 12:44:00 +0900</pubDate>
    </item>
    <item>
      <title>Postgresql 칼럼 추가 방법</title>
      <link>https://goodsaem.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;apt_info 테이블에 acode 칼럼을 추가하는 방법 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629082344982&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table apt_info add column acode varchar(13);&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/51</guid>
      <comments>https://goodsaem.tistory.com/51#entry51comment</comments>
      <pubDate>Mon, 16 Aug 2021 11:52:51 +0900</pubDate>
    </item>
    <item>
      <title>Postgresql db 버전확인</title>
      <link>https://goodsaem.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 명령어를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629080556351&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select version()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과&lt;/p&gt;
&lt;pre id=&quot;code_1629080590483&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version
PostgreSQL 13.3 on x86_64-apple-darwin20.4.0, compiled by Apple clang version 12.0.5 (clang-1205.0.22.9), 64-bit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/50</guid>
      <comments>https://goodsaem.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 16 Aug 2021 11:23:19 +0900</pubDate>
    </item>
    <item>
      <title>Postgresql rownum 사용하기</title>
      <link>https://goodsaem.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오라클의 rownum을 Postgresql 에서 사용하기 위해서는 아래와 같이 사용하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629074987803&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
    , 100 + (row_number () over()) as rownum
 from apt_info
 where lcode = '4785025623'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[실행결과]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 227px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;행정코드&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;행정코드5자리&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;아파트명&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;동1&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;동2&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;b&gt;rownum&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;칠곡남율효성해링턴플레이스1단지&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;101&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;효성해링턴 플레이스&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;102&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;효성해링턴플레이스2단지&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;103&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율2지구 효성해링턴플레이스2차&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;104&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남광하우스토리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;105&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;동화공단타운&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;106&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;효성해링턴플레이스(3단지)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;107&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;한솔 솔파크 강변&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;108&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;우방신천지&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;109&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;효성해밍턴플레이스3차&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;110&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;4785025623&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;47850&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;한솔솔파크강변&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;석적읍&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;남율리&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;&lt;b&gt;111&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/49</guid>
      <comments>https://goodsaem.tistory.com/49#entry49comment</comments>
      <pubDate>Mon, 16 Aug 2021 09:50:28 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL Drop column</title>
      <link>https://goodsaem.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;테이블에서 칼럼을 삭제하는 방법 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629017609380&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE table_name 
DROP COLUMN column_name;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;칼럼이 존재하는지 확인한후 삭제하는 방법 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629017669387&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE table_name 
DROP COLUMN IF EXISTS column_name;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/48</guid>
      <comments>https://goodsaem.tistory.com/48#entry48comment</comments>
      <pubDate>Sun, 15 Aug 2021 17:54:34 +0900</pubDate>
    </item>
    <item>
      <title>[mac] postgresql 외부접속 가능하게 변경</title>
      <link>https://goodsaem.tistory.com/47</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[mac]&amp;nbsp;postgresql&amp;nbsp;외부접속&amp;nbsp;가능하게&amp;nbsp;변경&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;pre id=&quot;code_1628994261951&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /usr/local/var/postgres&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;vi editor로 설정파일을 오픈합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628994484624&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi postgresql.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;listen_addresses = '*' 외부에서 접속 가능하도록 설정을 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628994361258&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;... 중략 ...
# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
... 중략 ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssl off 설정을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1628994567110&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi pg_hba.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 마지막 줄에 아래 내용을 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1628994597192&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;host  all  all 0.0.0.0/0 md5&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;위와 같이 설정하지 않으면 아래와 유사한 오류가 발생합니다.&lt;br /&gt;&amp;nbsp;[1342] FATAL:&amp;nbsp; no pg_hba.conf entry for host &quot;x.x.x.x&quot;, user &quot;aptdb&quot;, database &quot;postgres&quot;, SSL off&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/47</guid>
      <comments>https://goodsaem.tistory.com/47#entry47comment</comments>
      <pubDate>Sun, 15 Aug 2021 11:31:18 +0900</pubDate>
    </item>
    <item>
      <title>[mac] postgresql 서비스 시작/종료</title>
      <link>https://goodsaem.tistory.com/46</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;[mac] postgresql 서비스 시작&lt;/h2&gt;
&lt;pre id=&quot;code_1628994022111&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pg_ctl -D /usr/local/var/postgres start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;[mac] postgresql 서비스 종료&lt;/h2&gt;
&lt;pre id=&quot;code_1628994053226&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pg_ctl -D /usr/local/var/postgres stop&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/46</guid>
      <comments>https://goodsaem.tistory.com/46#entry46comment</comments>
      <pubDate>Sun, 15 Aug 2021 11:21:26 +0900</pubDate>
    </item>
    <item>
      <title>windows 에 PostgreSQL 설치</title>
      <link>https://goodsaem.tistory.com/45</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;windows&amp;nbsp;에&amp;nbsp;PostgreSQL&amp;nbsp;설치&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;아래 사이트에서 윈도우용 PostgreSQL을 다운로드 받습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/download/windows/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.postgresql.org/download/windows/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1628156593767&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PostgreSQL: Windows installers&quot; data-og-description=&quot;Windows installers Interactive installer by EDB Download the installer certified by EDB for all supported PostgreSQL versions. This installer includes the PostgreSQL server, pgAdmin; a graphical tool for managing and developing your databases, and StackBui&quot; data-og-host=&quot;www.postgresql.org&quot; data-og-source-url=&quot;https://www.postgresql.org/download/windows/&quot; data-og-url=&quot;https://www.postgresql.org/download/windows/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/download/windows/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postgresql.org/download/windows/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL: Windows installers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Windows installers Interactive installer by EDB Download the installer certified by EDB for all supported PostgreSQL versions. This installer includes the PostgreSQL server, pgAdmin; a graphical tool for managing and developing your databases, and StackBui&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postgresql.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받은 파일을 클릭하여 설치를 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;439&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4vNP/btrbqubrFEb/MW8UIjX0VwqnWG3nAd7bKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4vNP/btrbqubrFEb/MW8UIjX0VwqnWG3nAd7bKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4vNP/btrbqubrFEb/MW8UIjX0VwqnWG3nAd7bKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4vNP%2FbtrbqubrFEb%2FMW8UIjX0VwqnWG3nAd7bKk%2Fimg.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;439&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치시 로케일 부분을 Korean,Korea로 지정해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;439&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci42CI/btrbbTYVXxB/I7j4uChX1tQHre6Id8S3H1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci42CI/btrbbTYVXxB/I7j4uChX1tQHre6Id8S3H1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci42CI/btrbbTYVXxB/I7j4uChX1tQHre6Id8S3H1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci42CI%2FbtrbbTYVXxB%2FI7j4uChX1tQHre6Id8S3H1%2Fimg.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;439&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전아래와 같은 설정으로 설치를 진행했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1628156996210&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Installation Directory: C:\Program Files\PostgreSQL\12
Server Installation Directory: C:\Program Files\PostgreSQL\12
Data Directory: C:\Program Files\PostgreSQL\12\data
Database Port: 5432
Database Superuser: postgres
Operating System Account: NT AUTHORITY\NetworkService
Database Service: postgresql-x64-12
Command Line Tools Installation Directory: C:\Program Files\PostgreSQL\12
pgAdmin4 Installation Directory: C:\Program Files\PostgreSQL\12\pgAdmin 4
Stack Builder Installation Directory: C:\Program Files\PostgreSQL\12&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/45</guid>
      <comments>https://goodsaem.tistory.com/45#entry45comment</comments>
      <pubDate>Thu, 5 Aug 2021 18:46:57 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL 테이블 생성</title>
      <link>https://goodsaem.tistory.com/44</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;PostgreSQL&amp;nbsp;테이블&amp;nbsp;생성&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저 유저로 로그인&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1628088879586&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# \c aptdb aptdb&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테이블 생성&lt;/h3&gt;
&lt;pre id=&quot;code_1628088914945&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aptdb=# CREATE TABLE test (
id integer,
name character varying(255));
CREATE TABLE&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;생성된 테이블 확인&lt;/h3&gt;
&lt;pre id=&quot;code_1628088947109&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aptdb=# \dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | test | table | aptdb
(1 row)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/44</guid>
      <comments>https://goodsaem.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 4 Aug 2021 23:56:18 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL 사용자 권한 생성 및 사용자 생성</title>
      <link>https://goodsaem.tistory.com/43</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;PostgreSQL&amp;nbsp;사용자&amp;nbsp;권한&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;사용자&amp;nbsp;생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;postgreSQL 접속&lt;/p&gt;
&lt;pre id=&quot;code_1628087396623&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql postgres&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;\du 명령어를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1628087441859&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# \du&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과&lt;/p&gt;
&lt;pre id=&quot;code_1628087495735&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 goodsaem  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;goodsaem 유저의 패스워드를 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1628087670964&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# \password goodsaem
Enter new password: 
Enter it again:&lt;/code&gt;&lt;/pre&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;/h2&gt;
&lt;pre id=&quot;code_1628088365866&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE USER aptdb PASSWORD 'aptdb' SUPERUSER;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;신규 유저로 로그인&lt;/h2&gt;
&lt;pre id=&quot;code_1628088479322&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql postgres -U aptdb&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;데이터베이스 생성&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1628088578975&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE aptdb;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 DB 확인&lt;/p&gt;
&lt;pre id=&quot;code_1628088630748&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# \l&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과&lt;/p&gt;
&lt;pre id=&quot;code_1628088644091&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 aptdb     | aptdb    | UTF8     | C       | C     | 
 postgres  | goodsaem | UTF8     | C       | C     | 
 template0 | goodsaem | UTF8     | C       | C     | =c/goodsaem          +
           |          |          |         |       | goodsaem=CTc/goodsaem
 template1 | goodsaem | UTF8     | C       | C     | =c/goodsaem          +
           |          |          |         |       | goodsaem=CTc/goodsaem
(4 rows)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/43</guid>
      <comments>https://goodsaem.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 4 Aug 2021 23:31:50 +0900</pubDate>
    </item>
    <item>
      <title>Mac 맥에 PostgresSQL 설치하기</title>
      <link>https://goodsaem.tistory.com/42</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mac&amp;nbsp;맥에&amp;nbsp;PostgresSQL&amp;nbsp;설치하기&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;pre id=&quot;code_1628086628935&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install postgresql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필요한 파일들을 자동으로 다운로드 하여 설치가 진행 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치후 아래 명령어를 실행하여 서비스를 시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1628087128524&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pg_ctl -D /usr/local/var/postgres start &amp;amp;&amp;amp; brew services start postgresql&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력하여 서비스가 정상동상중인지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1628087197881&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;postgres -V

postgres (PostgreSQL) 13.3&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DB/Postgresql</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/42</guid>
      <comments>https://goodsaem.tistory.com/42#entry42comment</comments>
      <pubDate>Wed, 4 Aug 2021 23:26:50 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] vue-router 사용하기</title>
      <link>https://goodsaem.tistory.com/41</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;716&quot; width=&quot;217&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwyiyR/btrcIVllaXY/b50xloM3YkQpY2Oympy9G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwyiyR/btrcIVllaXY/b50xloM3YkQpY2Oympy9G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwyiyR/btrcIVllaXY/b50xloM3YkQpY2Oympy9G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwyiyR%2FbtrcIVllaXY%2Fb50xloM3YkQpY2Oympy9G0%2Fimg.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;716&quot; width=&quot;217&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue-router 설치 및 활용방법 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627779863913&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install vue-router&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;package.json 파일 14라인에 vue-router가 추가 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627779939719&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[14]&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;vue2&quot;,
  &quot;version&quot;: &quot;0.1.0&quot;,
  &quot;private&quot;: true,
  &quot;scripts&quot;: {
    &quot;serve&quot;: &quot;vue-cli-service serve&quot;,
    &quot;build&quot;: &quot;vue-cli-service build&quot;,
    &quot;lint&quot;: &quot;vue-cli-service lint&quot;
  },
  &quot;dependencies&quot;: {
    &quot;core-js&quot;: &quot;^3.6.5&quot;,
    &quot;element-ui&quot;: &quot;^2.15.3&quot;,
    &quot;vue&quot;: &quot;^2.6.11&quot;,
    &quot;vue-router&quot;: &quot;^3.5.2&quot;
  },
  &quot;devDependencies&quot;: {
    &quot;@vue/cli-plugin-babel&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-plugin-eslint&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-service&quot;: &quot;~4.5.0&quot;,
    &quot;babel-eslint&quot;: &quot;^10.1.0&quot;,
    &quot;eslint&quot;: &quot;^6.7.2&quot;,
    &quot;eslint-plugin-vue&quot;: &quot;^6.2.2&quot;,
    &quot;vue-template-compiler&quot;: &quot;^2.6.11&quot;
  },
  &quot;eslintConfig&quot;: {
    &quot;root&quot;: true,
    &quot;env&quot;: {
      &quot;node&quot;: true
    },
    &quot;extends&quot;: [
      &quot;plugin:vue/essential&quot;,
      &quot;eslint:recommended&quot;
    ],
    &quot;parserOptions&quot;: {
      &quot;parser&quot;: &quot;babel-eslint&quot;
    },
    &quot;rules&quot;: {}
  },
  &quot;browserslist&quot;: [
    &quot;&amp;gt; 1%&quot;,
    &quot;last 2 versions&quot;,
    &quot;not dead&quot;
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 디렉토리 (src/router)를 구성하고 basic.js , index.js 파일을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629339305006&quot; class=&quot;javascript&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; cursor: default; z-index: 1;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[7,9,10,11]&quot;&gt;&lt;code&gt;├── src
│&amp;nbsp;&amp;nbsp; ├── App.vue
│&amp;nbsp;&amp;nbsp; ├── assets
│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── logo.png
│&amp;nbsp;&amp;nbsp; ├── components
│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; ├── HelloWorld.vue
│&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── Page1.vue
│&amp;nbsp;&amp;nbsp; ├── main.js
│&amp;nbsp;&amp;nbsp; └── router
│&amp;nbsp;&amp;nbsp;     ├── basic.js
│&amp;nbsp;&amp;nbsp;     └── index.js&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;router/index.js : 여러개의 router를&amp;nbsp; import 하는 역할을 담당합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629339375223&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* eslint-disable */
import Vue from 'vue'
import Router from 'vue-router'
import basic from &quot;@/router/basic&quot;;
Vue.use(Router)
 
export default new Router({
    mode: 'hash',
    routes: [
        ...basic
    ]
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;router/basic.js : 기본 router 입니다. 내용이 추가될때 마다 이곳에 컴포넌트를 추가하여 path에 사용하는 컴포넌트를 정의합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629339425023&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import HelloWorld from &quot;@/components/HelloWorld&quot;;
import Page1 from &quot;@/components/Page1&quot;;
 
const basic = [
    {path: '/', name: 'index', component: HelloWorld},
    {path: '/hello-world', name: 'HelloWorld', component: HelloWorld},
    {path: '/page1', name: 'Page1', component: Page1},
];
 
export default basic;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Page1.vue 파일을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1629340093018&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div id=&quot;app&quot;&amp;gt;
    {{ page1 }}
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
export default {
  name: 'Page1',
  data() {
    return {
      page1 : &quot;test router&quot;,
    }
  }
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.js 파일을 아래와 같이 수정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627781057319&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot; data-marker=&quot;[4]&quot;&gt;&lt;code&gt;import Vue from 'vue'
import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import router from './router'
import App from './App.vue'
 
Vue.config.productionTip = false
Vue.use(Element, { size: 'small', zIndex: 3000 });
 
new Vue({
  router,
  render: h =&amp;gt; h(App),
}).$mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나서 build 하여 실행해보면 아래와 같은 페이지를 확인할수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hello-world&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/hello-world&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;page1&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page1&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/41</guid>
      <comments>https://goodsaem.tistory.com/41#entry41comment</comments>
      <pubDate>Sun, 1 Aug 2021 10:06:54 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js]  BASE_URL public_path 변경하기</title>
      <link>https://goodsaem.tistory.com/40</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;vue.js&amp;nbsp;&amp;nbsp;BASE_URL&amp;nbsp;public_path&amp;nbsp;변경하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BASE_URL public_path 변경하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;package.json 파일이 있는 위치에 &quot;vue.config.js&quot; 파일을 생성합니다.&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-origin-width=&quot;406&quot; data-origin-height=&quot;532&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ElJ7/btraXS478fc/gGCmwLcg5mZeIlWcOpm55K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ElJ7/btraXS478fc/gGCmwLcg5mZeIlWcOpm55K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ElJ7/btraXS478fc/gGCmwLcg5mZeIlWcOpm55K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ElJ7%2FbtraXS478fc%2FgGCmwLcg5mZeIlWcOpm55K%2Fimg.png&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;532&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue.config.js 파일에 아래와 같이 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627778971668&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;module.exports = {
    publicPath: '/dist/',
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm run deploy 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래와 같이 base_url이 변경되었음을 확인할수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627779096572&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;... 중략 ...
&amp;lt;link href=&quot;/css/app.dba1af84.css&quot;&amp;gt;
... 중략 ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경후&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627779060806&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;... 중략 ...

&amp;lt;link href=&quot;/dist/css/app.dba1af84.css&quot;&amp;gt;


... 중략 ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/40</guid>
      <comments>https://goodsaem.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 1 Aug 2021 09:52:02 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] vue element-ui(ui 컴포넌트) 설치 및 사용</title>
      <link>https://goodsaem.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;104&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9S0Lj/btrcHFpwnVJ/kW2FwgbuF9VxEWrk7gRkU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9S0Lj/btrcHFpwnVJ/kW2FwgbuF9VxEWrk7gRkU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9S0Lj/btrcHFpwnVJ/kW2FwgbuF9VxEWrk7gRkU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9S0Lj%2FbtrcHFpwnVJ%2FkW2FwgbuF9VxEWrk7gRkU0%2Fimg.png&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;104&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue용 대표 ui 컴포넌트인&amp;nbsp; element-ui 설치 방법 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue project 에서 아래 명령어를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627696899901&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i element-ui -S&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행이 끝나고 나서 package.json 파일을 확인하면 11 라인 처럼 &quot;element-ui&quot;: &quot;^2.15.3&quot; 가 추가된걸 확인할수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627697575483&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;vue2&quot;,
  &quot;version&quot;: &quot;0.1.0&quot;,
  &quot;private&quot;: true,
  &quot;scripts&quot;: {
    &quot;serve&quot;: &quot;vue-cli-service serve&quot;,
    &quot;build&quot;: &quot;vue-cli-service build&quot;,
    &quot;lint&quot;: &quot;vue-cli-service lint&quot;
  },
  &quot;dependencies&quot;: {
    &quot;core-js&quot;: &quot;^3.6.5&quot;,
    &quot;element-ui&quot;: &quot;^2.15.3&quot;,
    &quot;vue&quot;: &quot;^2.6.11&quot;
  },
  &quot;devDependencies&quot;: {
    &quot;@vue/cli-plugin-babel&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-plugin-eslint&quot;: &quot;~4.5.0&quot;,
    &quot;@vue/cli-service&quot;: &quot;~4.5.0&quot;,
    &quot;babel-eslint&quot;: &quot;^10.1.0&quot;,
    &quot;eslint&quot;: &quot;^6.7.2&quot;,
    &quot;eslint-plugin-vue&quot;: &quot;^6.2.2&quot;,
    &quot;vue-template-compiler&quot;: &quot;^2.6.11&quot;
  },
  &quot;eslintConfig&quot;: {
    &quot;root&quot;: true,
    &quot;env&quot;: {
      &quot;node&quot;: true
    },
    &quot;extends&quot;: [
      &quot;plugin:vue/essential&quot;,
      &quot;eslint:recommended&quot;
    ],
    &quot;parserOptions&quot;: {
      &quot;parser&quot;: &quot;babel-eslint&quot;
    },
    &quot;rules&quot;: {}
  },
  &quot;browserslist&quot;: [
    &quot;&amp;gt; 1%&quot;,
    &quot;last 2 versions&quot;,
    &quot;not dead&quot;
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진입점 파일 main.js 파일에 3,4 라인과 같이 element-ui 관련 내용을 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 나서 8번 라인에&amp;nbsp; element ui 사용하겠다고 선언합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.&lt;span style=&quot;color: #ffc66d;&quot;&gt;use&lt;/span&gt;(Element&lt;span style=&quot;color: #cc7832;&quot;&gt;, &lt;/span&gt;{ &lt;span style=&quot;color: #9876aa;&quot;&gt;size&lt;/span&gt;: &lt;span style=&quot;color: #6a8759;&quot;&gt;'small'&lt;/span&gt;&lt;span style=&quot;color: #cc7832;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9876aa;&quot;&gt;zIndex&lt;/span&gt;: &lt;span style=&quot;color: #6897bb;&quot;&gt;3000 &lt;/span&gt;})&lt;span style=&quot;color: #cc7832;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627697695443&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import Vue from 'vue'

import Element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'

Vue.config.productionTip = false
Vue.use(Element, { size: 'small', zIndex: 3000 });

new Vue({
  render: h =&amp;gt; h(App),
}).$mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;App.vue 파일을 아래와 같이 수정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627697734949&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div id=&quot;app&quot;&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-dark&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;12&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;12&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;8&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;8&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;8&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;6&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot;&amp;gt;
        &amp;lt;div class=&quot;grid-content bg-purple-light&quot;&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;

  &amp;lt;/div&amp;gt;

&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
export default {
  name: 'App',
}
&amp;lt;/script&amp;gt;

&amp;lt;style&amp;gt;
.el-row {
  margin-bottom: 20px;
&amp;amp;:last-child {
   margin-bottom: 0;
 }
}
.el-col {
  border-radius: 4px;
}
.bg-purple-dark {
  background: #99a9bf;
}
.bg-purple {
  background: #d3dce6;
}
.bg-purple-light {
  background: #e5e9f2;
}
.grid-content {
  border-radius: 4px;
  min-height: 36px;
}
.row-bg {
  padding: 10px 0;
  background-color: #f9fafc;
}
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&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;/h2&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/hello-world&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/39</guid>
      <comments>https://goodsaem.tistory.com/39#entry39comment</comments>
      <pubDate>Sat, 31 Jul 2021 11:15:49 +0900</pubDate>
    </item>
    <item>
      <title>HEXO 검색엔진최적화(Search Engine Optimization,SEO)</title>
      <link>https://goodsaem.tistory.com/38</link>
      <description>&lt;h2 id=&quot;검색엔진-최적화-Search-Engine-Optimization-SEO&quot; data-ke-size=&quot;size26&quot;&gt;검색엔진 최적화(Search Engine Optimization,SEO)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 작성한 글이 검색엔진에게 잘 노출되기 위해서는 내 블로그가 검색엔진에 노출이 잘되도록 최적화 시켜야 됩니다. 가장 중요한건 블로그에 작성한 Post가 검색하는 사람들에게 가치를 줄수 있어야 합니다. 두번째는 구글,네이버,다음 검색엔진에게 내 블로그를 알려야 합니다. 내가 이렇게 정성스럽게 글을 잘 작성했으니 글을 읽어가서 사용자가 검색을 하면 내 블로그를 소개시켜 달라고 부탁하는 거죠.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;내가 쓴글을 검색엔진이 읽어가기 쉽게 최적화하는걸 SEO라고 합니다.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;오늘은 codingsarang 블로그를 최적화 시켜 보겠습니다.&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-origin-width=&quot;2230&quot; data-origin-height=&quot;1398&quot; data-filename=&quot;hexo_seo.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0CGyl/btraHYYHaXD/Jf4sUSFiVzIQNidFXAfUW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0CGyl/btraHYYHaXD/Jf4sUSFiVzIQNidFXAfUW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0CGyl/btraHYYHaXD/Jf4sUSFiVzIQNidFXAfUW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0CGyl%2FbtraHYYHaXD%2FJf4sUSFiVzIQNidFXAfUW1%2Fimg.png&quot; data-origin-width=&quot;2230&quot; data-origin-height=&quot;1398&quot; data-filename=&quot;hexo_seo.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;hexo에서-제공해주는-플러그인-설치하기&quot; data-ke-size=&quot;size26&quot;&gt;hexo에서 제공해주는 플러그인 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hexo 에서는 SEO와 관련된 플러그인들이 다양하게 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://hexo.io/plugins/&quot;&gt;https://hexo.io/plugins/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속하신후 seo라고 입력하고 검색을 수행하면 아래와 같은 다양한 plugin을 확인할수 있습니다. 그중 일반적으로 많이 사용하는 플러그인들을 설치해 보겠습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hexo-auto-canonical&lt;/li&gt;
&lt;li&gt;hexo-generator-robotstxt&lt;/li&gt;
&lt;li&gt;hexo-autonofollow&lt;/li&gt;
&lt;li&gt;hexo-generator-feed&lt;/li&gt;
&lt;li&gt;hexo-generator-seo-friendly-sitemap&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;1708&quot; data-filename=&quot;hexo_seo_plugin.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/THbnJ/btraFFr4CRV/XfKvfCA14hLog8HyV5FPLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/THbnJ/btraFFr4CRV/XfKvfCA14hLog8HyV5FPLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/THbnJ/btraFFr4CRV/XfKvfCA14hLog8HyV5FPLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTHbnJ%2FbtraFFr4CRV%2FXfKvfCA14hLog8HyV5FPLk%2Fimg.png&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;1708&quot; data-filename=&quot;hexo_seo_plugin.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&quot;hexo-auto-canonical-설치-및-적용&quot; data-ke-size=&quot;size23&quot;&gt;hexo-auto-canonical 설치 및 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준링크를 자동으로 생성해주는 플러그인입니다. 아래 명령어를 입력하여 설치를 진행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627397793012&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save hexo-auto-canonical&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;설치가 완료되면 themes &amp;gt; hueman &amp;gt; layout &amp;gt; common &amp;gt; head.ejs 에 아래에 코드를 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397818334&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
&amp;lt;%- meta(page) %&amp;gt;
&amp;lt;%- autoCanonical(config, page) %&amp;gt;
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;블로그에서 소스보기를 하고 아래와 같은 내용을 확인할수 있다면 이제부터 검색엔진은 이글의 표준링크에 대해서 인식을 하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397843546&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;canonical&quot; href=&quot;https://open.github.io/2020/07/06/hello-world/&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;hexo-generator-robotstxt-설치-및-적용&quot; data-ke-size=&quot;size23&quot;&gt;hexo-generator-robotstxt 설치 및 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;robots.txt 의 상세 내용은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://support.google.com/webmasters/answer/6062608?hl=ko&amp;amp;ref_topic=6061961&quot;&gt;https://support.google.com/webmasters/answer/6062608?hl=ko&amp;amp;ref_topic=6061961&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;여기에서 확인 가능합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;robots.txt 파일이란 무엇인가요? robots.txt 파일은 검색엔진 크롤러에서 사이트에 요청할 수 있거나 요청할 수 없는 페이지 또는 파일을 크롤러에 지시하는 파일입니다. 이 파일은 요청으로 인해 사이트가 오버로드되지 않도록 하는 데 주로 사용되며, Google로부터 웹페이지를 숨기는 데 사용하는 메커니즘이 아닙니다. 웹페이지가 Google에 표시되지 않도록 하려면 noindex 명령어를 사용하거나 페이지를 비밀번호로 보호해야 합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;robots.txt의 용도는?&lt;br /&gt;robots.txt는 주로 사이트의 크롤러 트래픽을 관리하는 데 사용되며 보통 다음과 같이 파일 형식에 따라 Google에서 페이지를 숨기는 데 사용됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;blog 홈디렉토리에서 아래 명령어를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627397934425&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install hexo-generator-robotstxt --save&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;blog 홈디렉토리에 있는 _config.yml에 아래와 같이 입력합니다. 여기에서 *가 의미하는 내용은 모든 사용자 에이전트(robot)가 전체 사이트에 액세스할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397957822&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;robotstxt:
  useragent: &quot;*&quot;
  allow:
    - /
  sitemap: https://yourblogsite.github.io/sitemap.xml&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;hexo-autonofollow-설치및-적용&quot; data-ke-size=&quot;size23&quot;&gt;hexo-autonofollow 설치및 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 링크에 아래 처럼 nofollow 속성을 추가하는 플러그인 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627397981667&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;robots&quot; content=&quot;nofollow&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 페이지의 링크를 추적하지 않도록 하거나 특정 링크의 추적을 막을때 nofollow 속성값을 사용 할 수 있습니다. 검색엔진마다 nofollow 속성을 처리하는 방식이 다를 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 페이지의 링크를 추적하지 않도록 설정할때 :&lt;/p&gt;
&lt;pre id=&quot;code_1627398006971&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;robots&quot; content=&quot;nofollow&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;특정 링크의 추적을 하지 않도록 설정할때 :&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627398048090&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;http://www.test.com/&quot; rel=&quot;nofollow&quot;&amp;gt;링크&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 신뢰할 수 없는 콘텐츠나 유료 링크의 경우 다른 사용자의 검색에 노출되지 않아야 하므로 nofollow 속성을 사용하는 것이 좋습니다. 해당 플러그인을 enable 해놓으면 모든 외부 링크에 rel=&amp;rdquo;external nofollow&amp;rdquo; 속성을 자동으로 추가합니다. 외부링크에만 동작하기 때문에 본인 사이트의 도메인 링크는 제외됩니다. 외부 링크에 target=&amp;rdquo;_blank&amp;rdquo; 속성을 넣어서 클릭할 경우 새로운 탭 또는 윈도우에서 열리게 합니다.&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_1627398074671&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install hexo-autonofollow --save&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_config.yml&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 아래와 같이 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627398094890&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nofollow:
    enable: true
    exclude:
    - exclude1.com
    - exclude2.com&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;hexo-generator-feed&quot; data-ke-size=&quot;size23&quot;&gt;hexo-generator-feed&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동으로 RSS feed를 생성해주는 플러그인 입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 사이트가 있을 때, 그 사이트를 매일 방문해서 재미있는 새로운 기사가 있는지 확인하는 것은 번거롭습니다. 특히 새 기사가 매일 또는 정기적으로 올라오는 것이 아니라 불규칙할 때는 더욱 그렇습니다. 그 사이트를 직접 방문하지 않고, 새 기사들만 자신의 컴퓨터로 &amp;ldquo;배달&amp;rdquo;이 된다면 편리할 것입니다. RSS(Really Simple Syndication 의 약자) 같은 &amp;ldquo;사이트 피드&amp;rdquo;란, 새 기사들의 제목만, 또는 새 기사들 전체를 뽑아서 하나의 파일로 만들어 놓은 것입니다. 이제 각 사이트들에서 제공하는 RSS파일 주소만 수집하여 확인하면, 자신의 취향에 맞는 새로운 읽을거리를 쉽게 찾아서 읽을 수 있습니다. 그러나 모든 사이트에서 RSS피드를 제공하는 것은 아닙니다. 1년 내내 새로운 내용이 없는 정적인 사이트에서는 제공하지 않는 것이 보통입니다. 새로운 읽을거리가 자주 올라오는 &amp;ldquo;뉴스형&amp;rdquo;, &amp;ldquo;블로그형&amp;rdquo; 사이트에서 주로 제공됩니다.&lt;br /&gt;RSS Feed&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력하여 설치 할수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627398120853&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install hexo-generator-feed --save&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_config.yml&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 아래와 같이 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627398141526&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;feed:
  type: rss2
  path: rss2.xml
  limit: 20&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;type은 feed의 종류입니다. (atom/rss2) - * 네이버는 atom을 지원하지 않으므로 rss2로 지정합니다.&lt;br /&gt;path는 feed가 생성될 경로 입니다.(default : atom.xml, rss2.xml)&lt;br /&gt;limit는 최신 포스트 수 설정 (0 또는 false - 전체 포스트)&lt;/p&gt;
&lt;h2 id=&quot;hexo-generator-seo-friendly-sitemap&quot; data-ke-size=&quot;size26&quot;&gt;hexo-generator-seo-friendly-sitemap&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크롤러가 블로그를 더욱 효율적으로 클롤링 할 수 있도록 사이트맵 xml 파일을 자동으로 생성해 줍니다. 이렇게 생성된 사이트맵을 robot이 가져가서 색인을 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 입력하여 설치 할수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627398168429&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install hexo-generator-seo-friendly-sitemap --save&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_config.yml&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 아래와 같이 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627398253769&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sitemap:
  path: sitemap.xml
  tag: false
  category: false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;path 는 sitemap이 생성될 경로를 말하며 tag 및 category 포함 여부를 지정할수 있습니다. 전 제외 시켰습니다.&lt;/p&gt;
&lt;h2 id=&quot;검색엔진-등록하기&quot; data-ke-size=&quot;size26&quot;&gt;검색엔진 등록하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 url을 클릭하여 구글 애널리틱스에 회의 가입후 추적 아이디를 발급받습니다.&lt;br /&gt;&lt;a href=&quot;https://analytics.google.com/analytics/,&quot;&gt;구글 애널리틱스&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발급받은 아이디는 themes의 _config.yml 내 google_analytics에 넣어 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;_config.yml&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 아래와 같이 수정하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1627398274335&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plugins:
    google-analytics:
        # Google Analytics tracking id
        tracking_id: UA-*********-1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 url에 접속하여 사이트 맵을 제출합니다.&lt;br /&gt;&lt;a href=&quot;https://search.google.com/search-console/about,&quot;&gt;google search console&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가입 후 사이트를 추가 합니다. 생성된 html파일을 루트에 올린 후 확인 하는 방법과 애널리스틱 가입을 확인하는 방법으로 인증을 진행할수 있습니다.&lt;br /&gt;Sitemaps 메뉴에 위에서 생성한 sitemap.xml과 rss2.xml을 추가해 주세요. sitemap을 등록하고 일정시간 지나면 내 사이트에 등록된 글을 구글&lt;br /&gt;검색을 통해 확인할수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;414&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2KKy6/btraInYtrqs/WAKADd4OwCOlgx6FdH8UCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2KKy6/btraInYtrqs/WAKADd4OwCOlgx6FdH8UCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2KKy6/btraInYtrqs/WAKADd4OwCOlgx6FdH8UCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2KKy6%2FbtraInYtrqs%2FWAKADd4OwCOlgx6FdH8UCk%2Fimg.png&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;414&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사이트를 클릭하여 네이버에 등록을 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://searchadvisor.naver.com/,&quot;&gt;NAVER 웹마스터도구&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 사이트 소유확인 부터 진행해 주세요 저는 meta태그정보를 블로그에 head.ejs에 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;lt;&lt;span&gt;meta&lt;/span&gt; &lt;span&gt;charset&lt;/span&gt;=&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;span&gt;meta&lt;/span&gt; &lt;span&gt;name&lt;/span&gt;=&lt;span&gt;&quot;naver-site-verification&quot;&lt;/span&gt; &lt;span&gt;content&lt;/span&gt;=&lt;span&gt;&quot;d81165627f54ef03c0e3669744894f14e24d39ad&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 웹마스터 도구 페이지에서 사이트 간단 체크하기 메뉴를 통해 현재 블로그의 최적화 상태를 알아볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;808&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnWwzQ/btraGPnqoZ0/5FXbxoiRcUrDkqLKjHVpu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnWwzQ/btraGPnqoZ0/5FXbxoiRcUrDkqLKjHVpu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnWwzQ/btraGPnqoZ0/5FXbxoiRcUrDkqLKjHVpu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnWwzQ%2FbtraGPnqoZ0%2F5FXbxoiRcUrDkqLKjHVpu0%2Fimg.png&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;808&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;연동 사이트 목록 페이지 내 사이트 추가에 블로그 주소를 추가해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;다음 검색 등록에서 신규등록을 진행합니다.등록한 이메일 접수완료 메일을 받을 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;[다음 검색 등록](&lt;/span&gt;&lt;a href=&quot;https://register.search.daum.net/index.daum,&quot;&gt;https://register.search.daum.net/index.daum,&lt;/a&gt;&lt;a href=&quot;https://register.search.daum.net/index.daum,%22%EB%8B%A4%EC%9D%8C&quot;&gt;&quot;다음&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;검색 등록&amp;rdquo;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Setup/opensource</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/38</guid>
      <comments>https://goodsaem.tistory.com/38#entry38comment</comments>
      <pubDate>Wed, 28 Jul 2021 00:08:45 +0900</pubDate>
    </item>
    <item>
      <title>HEXO와 Github page를 이용한 무료 정적 웹사이트(Blog) 만들기</title>
      <link>https://goodsaem.tistory.com/37</link>
      <description>&lt;h1 id=&quot;개요&quot;&gt;개요&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;정적 웹사이트 생성기 hexo를 이용해서 블로그를 만든후 github page까지 반영하는 방법에 대해서 알아보겠습니다. 코딩사랑 블로그를 만들면서 아래 내용되로 설치를 했구요 차근차근 따라오시다 보면 github.io도메인을 가지는 블로그를 만들수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;714&quot; data-filename=&quot;nodejs_githubpage_git_hexo.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEiKBy/btraHrNza5Z/Xz6cTQ4c2AtTfOTP0QWCe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEiKBy/btraHrNza5Z/Xz6cTQ4c2AtTfOTP0QWCe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEiKBy/btraHrNza5Z/Xz6cTQ4c2AtTfOTP0QWCe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEiKBy%2FbtraHrNza5Z%2FXz6cTQ4c2AtTfOTP0QWCe0%2Fimg.png&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;714&quot; data-filename=&quot;nodejs_githubpage_git_hexo.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;정적-웹사이트&quot; data-ke-size=&quot;size26&quot;&gt;정적 웹사이트 ?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 웹사이트는 컨텐츠 내용이 변하지 않는 정적인 컨텐츠를 사용하는 웹사이트 입니다. 정적인 컨텐츠는 html,css,javascript,image 와 같은 컨텐츠로써 클라이언트 웹브라우저가 서버에 내용을 요청하면 서버에 등록되어 있는 파일 그대로를 서비스 하기에 모든 클라이언트에게 동일한 결과를 리턴합니다. 동적인 컨텐츠는 jsp,servelt,php,nodejs 같은 컨텐츠로써 요청에 따라 다른 결과 내용을 보여줍니다. 예를 들어 로그인 하기전에는 내용이 보이지 않았다가 로그인하면 내용을 보여주고 사용자에 따라 다른 내용을 보여주는 것들도 모두 동적인 컨텐츠입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적인 웹사이트는 동적인 웹사이트보다 속도가 빠릅니다. 일반적인 블로그를 한번 살펴볼까요? 블로그에서 글을 쓰면 내가쓴글은 db에 저장이 됩니다. 글 읽기에 관련 된 사용자 요청이 오면 db에서 데이터를 읽어서 html로 변환해서 사용자의 웹브라우저에 보여주는 구조 입니다. 하지만 정적인 웹사이트는 이미 html이 다 만들어져 있기에 페이지를 만들기 위해 이루어 지는 일련의 과정이 없어서 속도가 빠릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2868&quot; data-origin-height=&quot;1336&quot; data-filename=&quot;hexo001.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TjmMP/btraDBiSS01/kAvx2ysZAyG1PublJETnAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TjmMP/btraDBiSS01/kAvx2ysZAyG1PublJETnAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TjmMP/btraDBiSS01/kAvx2ysZAyG1PublJETnAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTjmMP%2FbtraDBiSS01%2FkAvx2ysZAyG1PublJETnAK%2Fimg.png&quot; data-origin-width=&quot;2868&quot; data-origin-height=&quot;1336&quot; data-filename=&quot;hexo001.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 단점도 있습니다. 반복되는 부분의 코드를 작성해야 된다는 거죠. 보통의 웹사이트나 블로그를 보면 상단부분의 메뉴와 하단 부분은 변하지 않습니다. 그래서 php에서는 header.php footer.php 이런 공통 파일들을 만들어서 include해서 사용 하죠 그리고 메뉴 부분은 상단 부분을 클릭할때 마다 다르기에 db에서 내용을 가져와서 만들거나 코드를 작성해서 메뉴를 만듭니다. 그런 부분을 정적웹사이트에서 구현할려면 한페이지마다 상단,좌측,하단 내용을 모두 중복해서 코딩해야됩니다. 생산성도 좋지않고 유지보수도 하기 힘듭니다. 속도는 빠르게 하고 중복되는 코드들은 줄이고 유지보수를 편하게 하기 위해서는 어떻게 해야 되나 사람들은 고민하게되고 이를 해결하기 위해 hexo 나 jekyll 같은 정적 웹사이트 생성기를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 지금 보시고 있는 blog에서 사용하는 head.ejs 입니다. 가장 상단에 공통으로 사용하는 css나 자바스크립트 같은걸 포함하고 post마다 글을 바꿀수 있게 코딩이 되어 있습니다. asp나 php같은 스크립트 언어와 비슷하죠?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;내 pc에서 글을쓸때는 동적으로 컨텐츠들이 생성됩니다. 생성된 컨텐츠를 build라는 과정을 거쳐서 정적인 컨텐츠로 변환하고 변환된 컨텐츠를 서버에 올리면 정적인 웹사이트가 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627396579449&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot; /&amp;gt;

    &amp;lt;%- partial('pwa/index') %&amp;gt;
    &amp;lt;%
        var title = page.title;
        if (is_archive()) {
            title = __('index.archive');
            if (is_month()) {
                title += ': ' + page.year + '/' + page.month;
            } else if (is_year()) {
                title += ': ' + page.year;
            }
        } else if (is_category()) {
            title = __('index.category') + ': ' + page.category;
        } else if (is_tag()) {
            title = __('index.tag') + ': ' + page.tag;
        }
    %&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;% if (title) { %&amp;gt;&amp;lt;%= title %&amp;gt; | &amp;lt;% } %&amp;gt;&amp;lt;%= config.title %&amp;gt;&amp;lt;/title&amp;gt;
    &amp;lt;% if (theme.plugins.bing_site_verification) { %&amp;gt;
      &amp;lt;meta name=&quot;msvalidate.01&quot; content=&quot;&amp;lt;%- theme.plugins.bing_site_verification %&amp;gt;&quot; /&amp;gt;
    &amp;lt;% } %&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, maximum-scale=1&quot;&amp;gt;
    &amp;lt;% if (page.tags) {
        var keywords = [];
        for (var i in page.tags.data) {
            keywords.push(page.tags.data[i].name);
        }
    %&amp;gt;
    &amp;lt;meta name=&quot;keywords&quot; content=&quot;&amp;lt;%= keywords.join(',') %&amp;gt;&quot; /&amp;gt;
    &amp;lt;% } %&amp;gt;
    &amp;lt;%- open_graph({
        image:          thumbnail(page),
        fb_app_id:      theme.miscellaneous.open_graph.fb_app_id,
        fb_admins:      theme.miscellaneous.open_graph.fb_admins,
        twitter_id:     theme.miscellaneous.open_graph.twitter_id,
    }) %&amp;gt;
    &amp;lt;%- meta(page) %&amp;gt;

    &amp;lt;% if (theme.customize &amp;amp;&amp;amp; theme.customize.social_links &amp;amp;&amp;amp; theme.customize.social_links.rss) { %&amp;gt;
        &amp;lt;link rel=&quot;alternate&quot; href=&quot;&amp;lt;%- theme.customize.social_links.rss %&amp;gt;&quot; title=&quot;&amp;lt;%= config.title %&amp;gt;&quot; type=&quot;application/atom+xml&quot; /&amp;gt;
    &amp;lt;% } %&amp;gt;

    &amp;lt;% if (theme.customize.favicon) { %&amp;gt;
        &amp;lt;link rel=&quot;icon&quot; href=&quot;&amp;lt;%- url_for(theme.customize.favicon) %&amp;gt;&quot; /&amp;gt;
    &amp;lt;% } %&amp;gt;

    &amp;lt;%- css('libs/font-awesome/css/font-awesome.min') %&amp;gt;
    &amp;lt;%- css('libs/titillium-web/styles') %&amp;gt;
    &amp;lt;%- css('libs/source-code-pro/styles') %&amp;gt;

    &amp;lt;%- css('css/style') %&amp;gt;

    &amp;lt;%- js('libs/jquery/3.5.0/jquery.min') %&amp;gt;
    &amp;lt;%- partial('plugin/scripts', { isHead: true }) %&amp;gt;
    &amp;lt;%- css('https://cdn.rawgit.com/innks/NanumSquareRound/master/nanumsquareround.css') %&amp;gt;
&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hexo-github-를-사용하면-어떤-이점이-있나요&quot; data-ke-size=&quot;size26&quot;&gt;hexo + github 를 사용하면 어떤 이점이 있나요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 툴들은 많고(naver,tistory,wordpress..) 왜 어렵게 이런툴을 사용해야 되나요? 글쓰는건 네이버,티스토리,wordpress로 쓰는게 편합니다. 저는 프로그래머 입니다. 제가 만들 프로그램들 주로 FrontEnd쪽 application입니다. 위에 블로그들에서는 이를 보여주는게 한계가 있습니다. 해당 블로그들이 제공해주는 범위 내에서 사용할수 밗에없는데 hexo 같은 정적 웹사이트 생성기는 컨텐츠를 생성하는 사람들이 생각하는되로 자유롭게 내용을 꾸밀수 있습니다. 그리고 내가 만든 웹 어플리케이션을 올릴수도 있습니다. 이런 부분때문에 정적 웹사이트 생성기를 선택하게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jekyll + github도 조합으로 정적인 웹사이트를 만들수 있습니다. 저도 이전 블로그에서 jekyll + github조합으로 사용했습니다. hexo + github 조합이 더 편리하다는 의견들이 많아서 이번에 저도 도전해 보았습니다. 저의 글을 끝까지 잘 읽으시면 30분만에 hexo + github 조합으로 Blog를 만들수 있습니다. 끝까지 읽어 주실거죠 미리 감사 인사 드립니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;750&quot; data-filename=&quot;hexo_github2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btZENf/btraBUjc39D/CItV42TlTAmGQl0yoeb6r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btZENf/btraBUjc39D/CItV42TlTAmGQl0yoeb6r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btZENf/btraBUjc39D/CItV42TlTAmGQl0yoeb6r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtZENf%2FbtraBUjc39D%2FCItV42TlTAmGQl0yoeb6r1%2Fimg.png&quot; data-origin-width=&quot;1608&quot; data-origin-height=&quot;750&quot; data-filename=&quot;hexo_github2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;설치방법&quot; data-ke-size=&quot;size26&quot;&gt;설치방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 언어를 배우거나 툴 사용법을 배울때 가장 좋은 방법은 무작정 설치를 해보고 이것저것 만들어 보는 방법이 가장 좋습니다. 어느정도 이론이나 아키텍처를 알고 시작하면 더 좋겠지만, 저같은 경우에는 우선 써보고 나서 구조는 뒤에 차근차근 알아가는게 좋았습니다. 제가 이걸 계속 사용할지도 의문이고, 어렵다고 생각이 들면 사용하지 않게 됩니다. 무모하게 시작하는것도 새로운 기술을 배울때는 좋은 접근법이라고 생각합니다.&lt;/p&gt;
&lt;h3 id=&quot;설치순서&quot; data-ke-size=&quot;size23&quot;&gt;설치순서&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;github 계정만들기&lt;/li&gt;
&lt;li&gt;node js 설치&lt;/li&gt;
&lt;li&gt;git-scm 설치&lt;/li&gt;
&lt;li&gt;hexo 설치 및 구동&lt;/li&gt;
&lt;li&gt;hexo 테마적용하기&lt;/li&gt;
&lt;li&gt;새글 써보기&lt;/li&gt;
&lt;li&gt;github repository 생성&lt;/li&gt;
&lt;li&gt;hexo 환경설정&lt;/li&gt;
&lt;li&gt;hexo 배포하기(deploy)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github 계정만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.github.com&quot;&gt;http://www.github.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속하세요 그리고 sing up for github버튼을 클릭하여 계정을 생성해 주세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1760&quot; data-filename=&quot;capture_2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q4zCA/btraGPHHg2k/qv6ygiwqodqPCHz2M0ULvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q4zCA/btraGPHHg2k/qv6ygiwqodqPCHz2M0ULvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q4zCA/btraGPHHg2k/qv6ygiwqodqPCHz2M0ULvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq4zCA%2FbtraGPHHg2k%2Fqv6ygiwqodqPCHz2M0ULvk%2Fimg.png&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1760&quot; data-filename=&quot;capture_2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 항목을 선택하고 complete버튼을 클릭하면 등록하신 이메일로 인증 메일이 발송됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;940&quot; data-filename=&quot;capture_3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxULb5/btraJov35vl/I6GI6Hjztu532COraK4p3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxULb5/btraJov35vl/I6GI6Hjztu532COraK4p3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxULb5/btraJov35vl/I6GI6Hjztu532COraK4p3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxULb5%2FbtraJov35vl%2FI6GI6Hjztu532COraK4p3K%2Fimg.png&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;940&quot; data-filename=&quot;capture_3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;받은 메일함에서 Verify email address 버튼을 클릭하여 이메일 인증을 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1798&quot; data-origin-height=&quot;1806&quot; data-filename=&quot;capture_4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l1hK8/btraBeIWYOa/V9DdiuA1TKvMaoEdL6dTPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l1hK8/btraBeIWYOa/V9DdiuA1TKvMaoEdL6dTPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l1hK8/btraBeIWYOa/V9DdiuA1TKvMaoEdL6dTPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl1hK8%2FbtraBeIWYOa%2FV9DdiuA1TKvMaoEdL6dTPk%2Fimg.png&quot; data-origin-width=&quot;1798&quot; data-origin-height=&quot;1806&quot; data-filename=&quot;capture_4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;인증이 완료되면 아래와 같은 메시지를 볼수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;96&quot; data-filename=&quot;capture_5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K9EWn/btrazvDJIN7/kKPpKJmMiKgWlaKQ3QzdZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K9EWn/btrazvDJIN7/kKPpKJmMiKgWlaKQ3QzdZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K9EWn/btrazvDJIN7/kKPpKJmMiKgWlaKQ3QzdZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK9EWn%2FbtrazvDJIN7%2FkKPpKJmMiKgWlaKQ3QzdZ0%2Fimg.png&quot; data-origin-width=&quot;1726&quot; data-origin-height=&quot;96&quot; data-filename=&quot;capture_5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 진행하면 github 계정만들기가 완료 됩니다.&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;nodejs 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사이트에서 nodejs 다운로드 받습니다. 글을 쓰고있는 시점에서 안정적,신뢰도가 높은 LTS버전을 다운로드 받습니다.&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-origin-width=&quot;844&quot; data-origin-height=&quot;616&quot; data-filename=&quot;node1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xIwQ5/btraJnYd84t/pPURHykMDWoXgwfI4JuPWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xIwQ5/btraJnYd84t/pPURHykMDWoXgwfI4JuPWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xIwQ5/btraJnYd84t/pPURHykMDWoXgwfI4JuPWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxIwQ5%2FbtraJnYd84t%2FpPURHykMDWoXgwfI4JuPWk%2Fimg.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;616&quot; data-filename=&quot;node1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;next 버튼을 클릭해서 설치를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; data-filename=&quot;node2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DMVRA/btrazLtvgwq/hkheyO4DnKEDauW4AS2BDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DMVRA/btrazLtvgwq/hkheyO4DnKEDauW4AS2BDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DMVRA/btrazLtvgwq/hkheyO4DnKEDauW4AS2BDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDMVRA%2FbtrazLtvgwq%2FhkheyO4DnKEDauW4AS2BDK%2Fimg.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; data-filename=&quot;node2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;설치가 완료되면 finish 버튼을 클릭하여 설치를 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; data-filename=&quot;node10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYxbJo/btraHsTebju/EsLOdTHfkzzWQDKoU9A5xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYxbJo/btraHsTebju/EsLOdTHfkzzWQDKoU9A5xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYxbJo/btraHsTebju/EsLOdTHfkzzWQDKoU9A5xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYxbJo%2FbtraHsTebju%2FEsLOdTHfkzzWQDKoU9A5xk%2Fimg.png&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;387&quot; data-filename=&quot;node10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;윈도우 버튼을 클릭하여 Node.js 가 설치된걸 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;525&quot; data-filename=&quot;node11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3lGhA/btraBePHN1q/4ypRhhPVpg76yBexUpTiDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3lGhA/btraBePHN1q/4ypRhhPVpg76yBexUpTiDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3lGhA/btraBePHN1q/4ypRhhPVpg76yBexUpTiDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3lGhA%2FbtraBePHN1q%2F4ypRhhPVpg76yBexUpTiDK%2Fimg.png&quot; data-origin-width=&quot;213&quot; data-origin-height=&quot;525&quot; data-filename=&quot;node11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;git-scm 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github를 사용하기 위해서는 git-scm을 설치해야 됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속하시고 64-bit git for windows setup 링크를 클릭 하여 설치 파일을 다운로드 받습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2898&quot; data-origin-height=&quot;1580&quot; data-filename=&quot;c1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnU4XU/btraInRF5z2/Q0S8nWwzYbJUJUokyoNSyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnU4XU/btraInRF5z2/Q0S8nWwzYbJUJUokyoNSyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnU4XU/btraInRF5z2/Q0S8nWwzYbJUJUokyoNSyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnU4XU%2FbtraInRF5z2%2FQ0S8nWwzYbJUJUokyoNSyK%2Fimg.png&quot; data-origin-width=&quot;2898&quot; data-origin-height=&quot;1580&quot; data-filename=&quot;c1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;다운로드한 파일을 클릭하여 설치 를 진행합니다. next 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;770&quot; data-filename=&quot;c3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlSxBF/btraqsA2l29/yg6bj0jYWuZzETV2ey2Ae1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlSxBF/btraqsA2l29/yg6bj0jYWuZzETV2ey2Ae1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlSxBF/btraqsA2l29/yg6bj0jYWuZzETV2ey2Ae1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlSxBF%2FbtraqsA2l29%2Fyg6bj0jYWuZzETV2ey2Ae1%2Fimg.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;770&quot; data-filename=&quot;c3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Next를 눌러서 진행합니다. 설치가 완료되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;768&quot; data-filename=&quot;c19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IcYTn/btraEgzf1oR/rULd0uffHzu1rmqjBGbVx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IcYTn/btraEgzf1oR/rULd0uffHzu1rmqjBGbVx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IcYTn/btraEgzf1oR/rULd0uffHzu1rmqjBGbVx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIcYTn%2FbtraEgzf1oR%2FrULd0uffHzu1rmqjBGbVx0%2Fimg.png&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;768&quot; data-filename=&quot;c19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hexo 설치 및 서버 구동&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;command창을 하나 뛰운다음 c:\로 이동합니다.&lt;/li&gt;
&lt;li&gt;npm (node package manager)로 hexo-cli를 -g 전역으로 설치합니다.&lt;/li&gt;
&lt;li&gt;blog를 초기화 합니다. 이름은 blog&lt;/li&gt;
&lt;li&gt;blog 폴더로 이동한후 npm install 명령을 실행합니다.&lt;/li&gt;
&lt;li&gt;설치가 완료되면 hexo 서버를 뛰웁니다. (hexo server)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1627397003751&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;3272&quot; data-origin-height=&quot;2010&quot; data-filename=&quot;c20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEd4jG/btraHseCTxo/dehNJdoFROCcAeXcfuSnA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEd4jG/btraHseCTxo/dehNJdoFROCcAeXcfuSnA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEd4jG/btraHseCTxo/dehNJdoFROCcAeXcfuSnA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEd4jG%2FbtraHseCTxo%2FdehNJdoFROCcAeXcfuSnA1%2Fimg.png&quot; data-origin-width=&quot;3272&quot; data-origin-height=&quot;2010&quot; data-filename=&quot;c20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;hexo 테마적용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hexo.io/themes/&quot;&gt;https://hexo.io/themes/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 hexo 다양한 테마를 다운로드 받아 적용할수 있습니다. 코딩사랑에서 사용하는 theme은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/ppoffice/hexo-theme-hueman&quot;&gt;https://github.com/ppoffice/hexo-theme-hueman&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이곳의 theme을 이용했습니다. theme을 적용하는 방법은 해당 theme사이트로 가면 설치방법을 알수 있습니다. 전 이문서를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/ppoffice/hexo-theme-hueman/wiki/Installation&quot;&gt;https://github.com/ppoffice/hexo-theme-hueman/wiki/Installation&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이용해서 설치를 진행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 theme을 복제합니다.&lt;br /&gt;git clone&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/ppoffice/hexo-theme-hueman.git&quot;&gt;https://github.com/ppoffice/hexo-theme-hueman.git&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;themes/hueman&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627397055968&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\blog&amp;gt;cd blog
C:\blog&amp;gt;#git clone https://github.com/ppoffice/hexo-theme-hueman.git themes/hueman
Cloning into 'themes/hueman'...
remote: Enumerating objects: 40, done.
remote: Counting objects: 100% (40/40), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 1937 (delta 0), reused 37 (delta 0), pack-reused 1897
Receiving objects: 100% (1937/1937), 5.66 MiB | 4.10 MiB/s, done.
Resolving deltas: 100% (1015/1015), done.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;c:\blog 폴더의 _confi.yml파일에서 theme을 파일을 열어서 아래와 같이 설치한 theme명으로 수정한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397078938&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: hueman
...&lt;/code&gt;&lt;/pre&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-origin-width=&quot;1810&quot; data-origin-height=&quot;1076&quot; data-filename=&quot;hexo_2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0rQlN/btraHtkjB5d/Nrc3ccPTKlZtAZdt7udkKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0rQlN/btraHtkjB5d/Nrc3ccPTKlZtAZdt7udkKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0rQlN/btraHtkjB5d/Nrc3ccPTKlZtAZdt7udkKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0rQlN%2FbtraHtkjB5d%2FNrc3ccPTKlZtAZdt7udkKk%2Fimg.png&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;1076&quot; data-filename=&quot;hexo_2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;themes\hueman 디렉토리로 이동한후 _config.yml.example 파일일 _config.yml로 수정한다. 수정 완료후 dir 명령어를 입력하여 정상적으로 파일명이 변경되었는지 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627397140725&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\blog&amp;gt;cd themes\hueman
C:\blog\themes\hueman&amp;gt;rename _config.yml.example _config.yml

C:\blog\themes\hueman&amp;gt;dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 6E7E-7D01

 C:\blog\themes\hueman 디렉터리

2020-07-05  오후 10:05    &amp;lt;DIR&amp;gt;          .
2020-07-05  오후 10:05    &amp;lt;DIR&amp;gt;          ..
2020-07-05  오후 08:44    &amp;lt;DIR&amp;gt;          .github
2020-07-05  오후 08:44                11 .gitignore
2020-07-05  오후 08:44    &amp;lt;DIR&amp;gt;          languages
2020-07-05  오후 08:44    &amp;lt;DIR&amp;gt;          layout
2020-07-05  오후 08:44            18,401 LICENSE
2020-07-05  오후 08:44               173 package.json
2020-07-05  오후 08:44             2,946 README.md
2020-07-05  오후 08:44    &amp;lt;DIR&amp;gt;          scripts
2020-07-05  오후 08:44    &amp;lt;DIR&amp;gt;          source
2020-07-05  오후 08:44             5,551 _config.yml
               5개 파일              27,082 바이트
               7개 디렉터리  218,937,688,064 바이트 남음

C:\blog\themes\hueman&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;c:\blog 디렉토리로 이동한후 hexo server하여 블로그를 구동시켜서 아래와 같은 화면이 나오면 설치가 완료되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397165865&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\blog\themes\hueman&amp;gt;cd ..

C:\blog\themes&amp;gt;cd ..

C:\blog&amp;gt;hexo server
INFO  Start processing
INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;blog가 제되로 나오는지 확인해 보겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://localhost:4000/&quot;&gt;http://localhost:4000&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 클릭하여 아래와 같은 그림이 나온다면 성공입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2862&quot; data-origin-height=&quot;1798&quot; data-filename=&quot;hexo_3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KjXXJ/btraFFesXY1/kHjuDB5waQw5RoCom22Ogk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KjXXJ/btraFFesXY1/kHjuDB5waQw5RoCom22Ogk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KjXXJ/btraFFesXY1/kHjuDB5waQw5RoCom22Ogk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKjXXJ%2FbtraFFesXY1%2FkHjuDB5waQw5RoCom22Ogk%2Fimg.png&quot; data-origin-width=&quot;2862&quot; data-origin-height=&quot;1798&quot; data-filename=&quot;hexo_3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;새글 써보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 cmd 창을 하나더 열어서 blog폴더로 이동한후 hexo new &amp;ldquo;test1&amp;rdquo; 라고 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627397241653&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;C:\blog&amp;gt;hexo new &quot;test1&quot;
INFO  Created: C:\blog\source\_posts\test1.md&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;크롬에서 새로고침을 하면 아래와 같이 test1이라는 새글이 등록됨을 알수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2368&quot; data-origin-height=&quot;1624&quot; data-filename=&quot;hexo_5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qEMMl/btraBTduZuF/Z0ydEPRG19kwrEE8yrpxuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qEMMl/btraBTduZuF/Z0ydEPRG19kwrEE8yrpxuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qEMMl/btraBTduZuF/Z0ydEPRG19kwrEE8yrpxuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqEMMl%2FbtraBTduZuF%2FZ0ydEPRG19kwrEE8yrpxuK%2Fimg.png&quot; data-origin-width=&quot;2368&quot; data-origin-height=&quot;1624&quot; data-filename=&quot;hexo_5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;editor로 c:\blog\source\test1.md파일을 열어서 아래와 같이 입력후 내용을 저장하세요&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;1090&quot; data-filename=&quot;hexo_6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beRqDO/btrazLNMaS2/PE1L1555ApWhFHGhVY6DD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beRqDO/btrazLNMaS2/PE1L1555ApWhFHGhVY6DD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beRqDO/btrazLNMaS2/PE1L1555ApWhFHGhVY6DD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeRqDO%2FbtrazLNMaS2%2FPE1L1555ApWhFHGhVY6DD1%2Fimg.png&quot; data-origin-width=&quot;1896&quot; data-origin-height=&quot;1090&quot; data-filename=&quot;hexo_6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래내용을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627397319509&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 글을 쓰는 방법 입니다.

글은 markdown이라는 문법을 알아야 됩니다.

[![Vue](https://kr.vuejs.org/images/logo.png)](https://kr.vuejs.org/)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;test1 글 상세보기를 하면 아래와 같은 내용을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;1640&quot; data-filename=&quot;hexo_7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkWDzJ/btraFFes1mi/MkbsJ79WcYjYW9mkaXUcyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkWDzJ/btraFFes1mi/MkbsJ79WcYjYW9mkaXUcyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkWDzJ/btraFFes1mi/MkbsJ79WcYjYW9mkaXUcyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkWDzJ%2FbtraFFes1mi%2FMkbsJ79WcYjYW9mkaXUcyK%2Fimg.png&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;1640&quot; data-filename=&quot;hexo_7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;github repository 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/&quot;&gt;https://github.com/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 접속하여 우측 상단의 + 버튼을 클릭하고 New repository 메뉴를 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;454&quot; data-filename=&quot;repo1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmo52B/btraEf8d0eH/eiOXVNYUmo1S6yFO1Q6C40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmo52B/btraEf8d0eH/eiOXVNYUmo1S6yFO1Q6C40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmo52B/btraEf8d0eH/eiOXVNYUmo1S6yFO1Q6C40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdmo52B%2FbtraEf8d0eH%2FeiOXVNYUmo1S6yFO1Q6C40%2Fimg.png&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;454&quot; data-filename=&quot;repo1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Repository Name을 &amp;ldquo;계정명.github.io&amp;rdquo;라고 입력하고 Initialize this repository with a README 부분에 체크하고 Create repository 버튼을 클릭합니다. 이렇게 만들면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://codingsarnag.github.io&quot;&gt;http://codingsarnag.github.io&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 접속하면 웹사이트에 접근이 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;1444&quot; data-filename=&quot;repo3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDSIDv/btraCSeluLx/uUdPMYDCYsAnXQGfqxAev0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDSIDv/btraCSeluLx/uUdPMYDCYsAnXQGfqxAev0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDSIDv/btraCSeluLx/uUdPMYDCYsAnXQGfqxAev0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDSIDv%2FbtraCSeluLx%2FuUdPMYDCYsAnXQGfqxAev0%2Fimg.png&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;1444&quot; data-filename=&quot;repo3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;hexo 환경설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 환경설정을 해보겠습니다. c:\blog\_config.xml파일을 수정합니다. 제일 아래쪽에 deploy 정보는 본인 github repository 명을 입력하셔야 됩니다. 이 정보 기준으로 github page에 hexo를 deploy 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627397448733&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Site
title: 코딩사랑
subtitle: '문제 해결능력을 향상을 위한 방법과 프로그래밍 언어에 대해서 다룹니다.'
description: '문제 해결능력을 향상을 위한 방법과 프로그래밍 언어에 대해서 다룹니다.'
keywords: coding,programming,frontend,backend,opensource
author: codingsarang
language: ko
timezone: 'asia/seoul'

... 중략 ...

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://codingsarang.github.io/

... 중략 ...

deploy:
  type: git
  repo: https://github.com/codingsarang/codingsarang.github.io
  branch: master&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;themes/hueman/_config.xml 파일내용도 본인 환경에 맞게 수정해주세요&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;.hexo 배포하기(deploy)&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;이제 정말 마지막 입니다. 내가 작성한 글들을 정적인 contents로 generate한후 github page에 배포를 진행하면 내가 쓴글을 온라인 에서 확인 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 hexo generate 명령어를 실행하면 아래와 같은 결과를 확인할수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627397492286&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hexo generate
INFO  Start processing
INFO  Files loaded in 226 ms
INFO  Generated: content.json
INFO  Generated: categories/OPENSOURCE/index.html
INFO  Generated: categories/ETC/index.html
INFO  Generated: 2020/07/02/hexo-github/index.html
INFO  Generated: index.html
INFO  Generated: 2020/07/01/hello-world/index.html
INFO  Generated: archives/2020/07/index.html
INFO  Generated: archives/index.html
INFO  Generated: archives/2020/index.html
INFO  Generated: images/repo1.png
INFO  Generated: images/repo2.png
INFO  Generated: images/repo3.png
INFO  12 files generated in 60 ms&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;이상태에서 hexo deploy를 실행합니다. 이렇게 실행하면 최초 git에 로그인을 하는데 본인계정정보와 패스워드를 입력하여 인증을 하고 나면 그다음부터 deploy할때는 정보를 물어보지 않습니다. deploy (commit)가 성공하면 아래와 같은 결과를 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627397522385&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hexo deploy
INFO  Deploying: git
INFO  Clearing .deploy_git folder...
INFO  Copying files from public folder...
INFO  Copying files from extend dirs...
[master 0626b12] Site updated: 2020-07-06 00:16:13
 12 files changed, 38 insertions(+), 28 deletions(-)
 create mode 100644 images/repo1.png
 create mode 100644 images/repo2.png
 create mode 100644 images/repo3.png
git: 'credential-manager' is not a git command. See 'git --help'.
Enumerating objects: 50, done.
Counting objects: 100% (50/50), done.
Delta compression using up to 6 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (27/27), 540.77 KiB | 28.46 MiB/s, done.
Total 27 (delta 10), reused 0 (delta 0)
remote: Resolving deltas: 100% (10/10), completed with 8 local objects.
To https://github.com/codingsarang/codingsarang.github.io
   c3f2489..0626b12  HEAD -&amp;gt; master
Branch 'master' set up to track remote branch 'master' from 'https://github.com/codingsarang/codingsarang.github.io'.
INFO  Deploy done: git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;사이트에 접속하시면 아래와 같이 작성한 글을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;735&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSGnCJ/btrazNx5DMh/Rgn9EeKcomaWjkPOKYkWy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSGnCJ/btrazNx5DMh/Rgn9EeKcomaWjkPOKYkWy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSGnCJ/btrazNx5DMh/Rgn9EeKcomaWjkPOKYkWy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSGnCJ%2FbtrazNx5DMh%2FRgn9EeKcomaWjkPOKYkWy1%2Fimg.png&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;735&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/opensource</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/37</guid>
      <comments>https://goodsaem.tistory.com/37#entry37comment</comments>
      <pubDate>Tue, 27 Jul 2021 23:53:35 +0900</pubDate>
    </item>
    <item>
      <title>정적 웹사이트 생성시 Jekyll 설치 및 간단 사용법</title>
      <link>https://goodsaem.tistory.com/36</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;정적 웹사이트 생성시 Jekyll 설치 및 간단 사용법&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;308&quot; data-filename=&quot;jekyll.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wsVwu/btraHseB8P2/YUHpkibvyA4dbPjeW0JrKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wsVwu/btraHseB8P2/YUHpkibvyA4dbPjeW0JrKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wsVwu/btraHseB8P2/YUHpkibvyA4dbPjeW0JrKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwsVwu%2FbtraHseB8P2%2FYUHpkibvyA4dbPjeW0JrKK%2Fimg.png&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;308&quot; data-filename=&quot;jekyll.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;개요&quot; data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jekyll은 정적(static) 웹사이트 생성기 입니다. Markdown이란 문법으로 문서를 작성하고 이를 build를 시켜주면 정적 웹페이지(html) 를 생성해 줍니다. 그리고 php 같은 언어를 사용할때 header.php footer.php 같은걸 만들어 새로운 페이지를 만들때 위에 두파일을 include하는데 지킬또한 이런걸 지원해 줍니다. tistory가 많이 좋아져서 귀찮게 저런걸 써야 하는 생각도 있었지만 javascript 예제코드를 작성하고 실행할때 즉 웹어플리케이션 데모를 보여줄때는 필요할것 같아서 Jekyll 설치 방법에 대해서 정리하고 실제로 정적 웹사이트를 만들어 볼려고 합니다. 그리고 티스토리 같은경우에는 일일 발행할수 있는 글수가 15개로 제한되는데 지킬로 문서를 작성하고 github에 publish를 수행하면 이런 제한도 받지 않습니다. 사실 하루에 글 하나 적는것도 힘들긴 하지만 &amp;hellip; 만약 글쓰고 싶은날 제한에 걸리면 한번쯤은 사용할수 있을것 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여담이지만 본 블로그를 jekyll로 구성할려고 자료를 정리했다가 hexo로 변경하여 설치하면서 정리했던 내용을 기록으로 남깁니다.&lt;/p&gt;
&lt;h2 id=&quot;설치&quot; data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jekyll을 사용하기 위해서는 루비를 설치해야 됩니다. 각각의 OS 별 루비 설치는 아래 링크를 확인하세요 전 mac을 사용 하므로 mac설치법을 보고 그대로 진행 하겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/installation/macos/&quot;&gt;https://jekyllrb-ko.github.io/docs/installation/macos/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://jekyllrb-ko.github.io/docs/installation/&quot;&gt;https://jekyllrb-ko.github.io/docs/installation/&lt;/a&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-origin-width=&quot;498&quot; data-origin-height=&quot;230&quot; data-filename=&quot;jk1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsYsr5/btraBvjddkH/Fyx6KegZFkD3t9EWYXcGf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsYsr5/btraBvjddkH/Fyx6KegZFkD3t9EWYXcGf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsYsr5/btraBvjddkH/Fyx6KegZFkD3t9EWYXcGf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsYsr5%2FbtraBvjddkH%2FFyx6KegZFkD3t9EWYXcGf1%2Fimg.png&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;230&quot; data-filename=&quot;jk1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;맥OS 카탈리나 버전에서는 루비가 기본 탑재되어 있다고 하네요&amp;hellip; 그래서 바로 지킬 설치를 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627395835522&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ gem install bundler jekyll&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;설치가 완료되고 나면 아래와 같은 결과를 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627395862620&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Successfully installed bundler-2.1.4
Parsing documentation for bundler-2.1.4
Done installing documentation for bundler after 2 seconds
Successfully installed jekyll-4.1.0
Parsing documentation for jekyll-4.1.0
Done installing documentation for jekyll after 0 seconds
2 gems installed&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 설치까지만 하고 github 사이트에 내계정명과 동일한 repository를 만듭니다.&lt;br /&gt;Github 계정생성하는 부분은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://codingsarang.github.io/2020/07/08/opensource/githubCreate/&quot;&gt;https://codingsarang.github.io/2020/07/08/opensource/githubCreate/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;링크를 클릭하여 확인 하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측 상단의 + 버튼을 클릭하고 New repository 메뉴를 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;454&quot; data-filename=&quot;jk2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XZQEt/btrazM61PVL/WP5CHiYWyV2gJD2pltLgk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XZQEt/btrazM61PVL/WP5CHiYWyV2gJD2pltLgk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XZQEt/btrazM61PVL/WP5CHiYWyV2gJD2pltLgk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXZQEt%2FbtrazM61PVL%2FWP5CHiYWyV2gJD2pltLgk1%2Fimg.png&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;454&quot; data-filename=&quot;jk2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Repository Name을 &amp;ldquo;계정명.github.io&amp;rdquo;라고 입력하고 Initialize this repository with a README 부분에 체크하고 Create repository 버튼을 클릭 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1107&quot; data-filename=&quot;jk3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVftT2/btraBTkdj6i/KR4EbLbjEKZwH1SpkAhOP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVftT2/btraBTkdj6i/KR4EbLbjEKZwH1SpkAhOP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVftT2/btraBTkdj6i/KR4EbLbjEKZwH1SpkAhOP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVftT2%2FbtraBTkdj6i%2FKR4EbLbjEKZwH1SpkAhOP0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1107&quot; data-filename=&quot;jk3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Create new file 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&quot; data-filename=&quot;jk4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDramv/btrazNx4Rqa/nqD6MsKmRBeumIF3WPDhp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDramv/btrazNx4Rqa/nqD6MsKmRBeumIF3WPDhp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDramv/btrazNx4Rqa/nqD6MsKmRBeumIF3WPDhp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDramv%2FbtrazNx4Rqa%2FnqD6MsKmRBeumIF3WPDhp1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&quot; data-filename=&quot;jk4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;New file name 에는 index.html을 입력하고 edit new file에 아래와 같은 html을 작성한후 commit 로그를 작성하고 commit new file버튼을 클릭하여 index.html 을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1294&quot; data-filename=&quot;jk5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ldEb/btraImysOTF/dOzJklV7GpbZTbn5iwtUi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ldEb/btraImysOTF/dOzJklV7GpbZTbn5iwtUi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ldEb/btraImysOTF/dOzJklV7GpbZTbn5iwtUi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ldEb%2FbtraImysOTF%2FdOzJklV7GpbZTbn5iwtUi1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1294&quot; data-filename=&quot;jk5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&quot;html-내용&quot; data-ke-size=&quot;size23&quot;&gt;html 내용&lt;/h3&gt;
&lt;pre id=&quot;code_1627396022365&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/vue/dist/vue.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;root&quot;&amp;gt;
        &amp;lt;div v-if=&quot;liked&quot;&amp;gt;좋아요 눌렀음&amp;lt;/div&amp;gt;
        &amp;lt;button v-else v-on:click=&quot;onClickButton&quot;&amp;gt;like&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;    
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    const app = new Vue({
        el: '#root',
        data: {
            liked : false,
        },
        methods: {
            onClickButton() {
                this.liked = true;
            }
        },
    });
&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래처럼 &lt;a href=&quot;https://계정명.github.io/index.html을&quot;&gt;https://계정명.github.io/index.html을&lt;/a&gt; 실행하면 아래와 같은 화면이 출력됩니다.(참고로 위 index.html vue.js 를 이용하여 만들었음)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;232&quot; data-filename=&quot;jk6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LVpYs/btraFFFvL0k/krJoYYj7D1trPJUkyBjKIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LVpYs/btraFFFvL0k/krJoYYj7D1trPJUkyBjKIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LVpYs/btraFFFvL0k/krJoYYj7D1trPJUkyBjKIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLVpYs%2FbtraFFFvL0k%2FkrJoYYj7D1trPJUkyBjKIK%2Fimg.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;232&quot; data-filename=&quot;jk6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 끝까지 블로그를 만드는건 비효율적이라 생각하여 나와 맞는 테마를 찾아서 github clone을 통하여 초기 셋업을 진행합니다.&lt;br /&gt;아래 사이트를 그래로 복사해서 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/passbolt/passbolt_help&quot;&gt;https://github.com/passbolt/passbolt_help&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 해당 템플릿은 Passbolt help code is distributed under the Affero General Public License v3 Passbolt help text is distributed under Creative Common BY-SA-4.0 이런 라이선스 정책을 가지고 있어 사용해도 문제가 되지 않습니다.&lt;/p&gt;
&lt;h3 id=&quot;Creative-Common-BY-SA-4-0-라이선스-정책&quot; data-ke-size=&quot;size23&quot;&gt;Creative Common BY-SA-4.0 라이선스 정책&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;2009&quot; data-filename=&quot;jk7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGFtHG/btraEftzdEY/ROaXvxkzPsqCB1XbMtICc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGFtHG/btraEftzdEY/ROaXvxkzPsqCB1XbMtICc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGFtHG/btraEftzdEY/ROaXvxkzPsqCB1XbMtICc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGFtHG%2FbtraEftzdEY%2FROaXvxkzPsqCB1XbMtICc1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;2009&quot; data-filename=&quot;jk7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래 명령어를 입력하여 복제를 진행 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396131206&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/passbolt/passbolt_help.git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;위에 명령어를 실행하면 아래와 같이 정상 복제 되었음을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396150407&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cloning into 'passbolt_help'...
remote: Enumerating objects: 1015, done.
remote: Counting objects: 100% (1015/1015), done.
remote: Compressing objects: 100% (546/546), done.
remote: Total 10735 (delta 741), reused 665 (delta 443), pack-reused 9720
Receiving objects: 100% (10735/10735), 37.08 MiB | 9.08 MiB/s, done.
Resolving deltas: 100% (8301/8301), done.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;복제된 디렉토리로 이동후 jekyll build 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396173284&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd passbolt_help
bundle exec jekyll build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396192979&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Configuration file: /Users/opensourcereporter/passbolt_help/_config.yml
            Source: /Users/opensourcereporter/passbolt_help
       Destination: docs
 Incremental build: disabled. Enable with --incremental
      Generating... 
       Jekyll Feed: Generating feed for posts
                    done in 3.849 seconds.
 Auto-regeneration: disabled. Use --watch to enable.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;서버실행&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396218103&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bundle exec jekyll serve&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627396240543&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  Server running... press ctrl-c to stop.
[2020-06-17 00:30:47] ERROR Errno::ECONNRESET: Connection reset by peer @ io_fillbuf - fd:19 
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `eof?'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `run'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
[2020-06-17 00:30:47] ERROR Errno::ECONNRESET: Connection reset by peer @ io_fillbuf - fd:20 
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `eof?'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `run'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
[2020-06-17 00:30:47] ERROR Errno::ECONNRESET: Connection reset by peer @ io_fillbuf - fd:18 
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `eof?'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/httpserver.rb:82:in `run'
	/Users/comganet/.rvm/rubies/ruby-2.5.8/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 브라우저에서 확인하면 아래와 같은 화면을 확인할수 있습니다.&lt;br /&gt;&lt;a href=&quot;http://127.0.0.1:4000/&quot;&gt;http://127.0.0.1:4000/&lt;/a&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-origin-width=&quot;1280&quot; data-origin-height=&quot;944&quot; data-filename=&quot;jk8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/upAyh/btrazNdPifT/T5l6ScsMLLOmBYzIkFrRW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/upAyh/btrazNdPifT/T5l6ScsMLLOmBYzIkFrRW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/upAyh/btrazNdPifT/T5l6ScsMLLOmBYzIkFrRW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FupAyh%2FbtrazNdPifT%2FT5l6ScsMLLOmBYzIkFrRW1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;944&quot; data-filename=&quot;jk8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 복제된 파일들을 내 github 계정에 올립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Command 스페이스바를 눌러서 github desktop을 실행 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github desktop설치는 아래 post를 참고하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://codingsarang.github.io/2020/07/10/opensource/githubDesktop/&quot;&gt;https://codingsarang.github.io/2020/07/10/opensource/githubDesktop/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림과 같이 추가된 파일들을 publish하기위해 아래 그림처럼 적당하게 commnet를 입력하고 commit to master 버튼을 클릭 합니다.&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-origin-width=&quot;514&quot; data-origin-height=&quot;2824&quot; data-filename=&quot;jk9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qYSbr/btraInqB7nv/QuYNhmtDkY7Wzbk2Y6yKz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qYSbr/btraInqB7nv/QuYNhmtDkY7Wzbk2Y6yKz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qYSbr/btraInqB7nv/QuYNhmtDkY7Wzbk2Y6yKz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqYSbr%2FbtraInqB7nv%2FQuYNhmtDkY7Wzbk2Y6yKz0%2Fimg.png&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;2824&quot; data-filename=&quot;jk9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;그리고 나서 우측에 Pull Origin버튼을 클릭 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1012&quot; data-filename=&quot;jk10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lGzuB/btraCTxwxtP/gYD1T3iqxqPg4PoW1im611/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lGzuB/btraCTxwxtP/gYD1T3iqxqPg4PoW1im611/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lGzuB/btraCTxwxtP/gYD1T3iqxqPg4PoW1im611/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlGzuB%2FbtraCTxwxtP%2FgYD1T3iqxqPg4PoW1im611%2Fimg.png&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1012&quot; data-filename=&quot;jk10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pull origin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사이트 들어가면 로컬에서 생성된것과 동일한 github 페이지를 확인할수 있습니다.&lt;br /&gt;&lt;a href=&quot;https://계정명.github.io/index.html&quot;&gt;https://계정명.github.io/index.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>Setup/opensource</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/36</guid>
      <comments>https://goodsaem.tistory.com/36#entry36comment</comments>
      <pubDate>Tue, 27 Jul 2021 23:32:32 +0900</pubDate>
    </item>
    <item>
      <title>Github Desktop 설치</title>
      <link>https://goodsaem.tistory.com/35</link>
      <description>&lt;h1&gt;Github Desktop 설치&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Github Desktop을 설치해서 사용하시면 콘솔창을 통해서 git 명령어를 입력하는것 보다 훨씬 편리한 방법으로 github에 내용을 올릴수 있습니다. Github desktop 실행시켜 변경된 사항이 있으면 한눈에 확인하고 간단하게 마우스 클릭만으로 소스를 올릴수 있는 Github Desktop 설치법과 간단 사용법에 대해서 알아 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;설치방법&quot; data-ke-size=&quot;size26&quot;&gt;설치방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://desktop.github.com/&quot;&gt;https://desktop.github.com/&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;url에 접속하여 파일을 다운로드 받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;616&quot; data-filename=&quot;githubDesktop1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byvCnO/btraDAK17ow/B2SjIK5HuiImZzDsk35di1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byvCnO/btraDAK17ow/B2SjIK5HuiImZzDsk35di1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byvCnO/btraDAK17ow/B2SjIK5HuiImZzDsk35di1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyvCnO%2FbtraDAK17ow%2FB2SjIK5HuiImZzDsk35di1%2Fimg.png&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;616&quot; data-filename=&quot;githubDesktop1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;다운로드 받은 파일을 실행하고 잠시 기다리면 설치가 완료되고 아래와 같은 화면을 볼수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;650&quot; data-filename=&quot;githubDesktop2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5dBLa/btrazMeT4kb/3DCsDdaFRfeBqQjo8LXzh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5dBLa/btrazMeT4kb/3DCsDdaFRfeBqQjo8LXzh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5dBLa/btrazMeT4kb/3DCsDdaFRfeBqQjo8LXzh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5dBLa%2FbtrazMeT4kb%2F3DCsDdaFRfeBqQjo8LXzh0%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;650&quot; data-filename=&quot;githubDesktop2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Sign in to Github.com 버튼을 클릭하여 github에 로그인을 진행합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;로그인이 완료되면 Authorize desktop 버튼을 클릭하여 인증을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;778&quot; data-filename=&quot;githubDesktop3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWbLnT/btrawCwlqo5/NkgMKHOJ128I6URZy8yKO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWbLnT/btrawCwlqo5/NkgMKHOJ128I6URZy8yKO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWbLnT/btrawCwlqo5/NkgMKHOJ128I6URZy8yKO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWbLnT%2FbtrawCwlqo5%2FNkgMKHOJ128I6URZy8yKO1%2Fimg.png&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;778&quot; data-filename=&quot;githubDesktop3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;인증버튼을 누르고 나면 웹브라우저가 오픈되면서 Github Desktop을 인증받겠냐는 메시지가 나옵니다. 확인을 눌러 인증을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;147&quot; data-filename=&quot;githubDesktop4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg6RIz/btraBehTcAp/tpILWgm26kxBffDT3JSRTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg6RIz/btraBehTcAp/tpILWgm26kxBffDT3JSRTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg6RIz/btraBehTcAp/tpILWgm26kxBffDT3JSRTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg6RIz%2FbtraBehTcAp%2FtpILWgm26kxBffDT3JSRTK%2Fimg.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;147&quot; data-filename=&quot;githubDesktop4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;continue 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;653&quot; data-filename=&quot;githubDesktop5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXJOJI/btraGFFg4vQ/rLLUCSmZg6x9UHlK5NxTE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXJOJI/btraGFFg4vQ/rLLUCSmZg6x9UHlK5NxTE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXJOJI/btraGFFg4vQ/rLLUCSmZg6x9UHlK5NxTE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXJOJI%2FbtraGFFg4vQ%2FrLLUCSmZg6x9UHlK5NxTE0%2Fimg.png&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;653&quot; data-filename=&quot;githubDesktop5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Finish 버튼을 클릭하여 설치를 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;653&quot; data-filename=&quot;githubDesktop6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JWklR/btraBdpFHMT/mEnJPVSUggQSU6fKTCGsk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JWklR/btraBdpFHMT/mEnJPVSUggQSU6fKTCGsk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JWklR/btraBdpFHMT/mEnJPVSUggQSU6fKTCGsk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJWklR%2FbtraBdpFHMT%2FmEnJPVSUggQSU6fKTCGsk1%2Fimg.png&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;653&quot; data-filename=&quot;githubDesktop6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;Github에-Repository-만들기&quot; data-ke-size=&quot;size26&quot;&gt;Github에 Repository 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://github.com/계정명&quot;&gt;http://github.com/계정명&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;으로 접속하여 Github Repository 에서 동일한 계정명으로 repository를 생성합니다.&lt;br /&gt;사이트에 접속한후 Repositories 탭을 선택한후 New 버튼을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;680&quot; data-filename=&quot;githubDesktop7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbcnqw/btrawBKV9fY/140j4pC6FkHonAlaoVyuE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbcnqw/btrawBKV9fY/140j4pC6FkHonAlaoVyuE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbcnqw/btrawBKV9fY/140j4pC6FkHonAlaoVyuE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbcnqw%2FbtrawBKV9fY%2F140j4pC6FkHonAlaoVyuE1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;680&quot; data-filename=&quot;githubDesktop7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;465&quot; data-filename=&quot;githubDesktop8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLwYBB/btraDzMbcB7/3sGUKFbzVDJURKkY1oVFFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLwYBB/btraDzMbcB7/3sGUKFbzVDJURKkY1oVFFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLwYBB/btraDzMbcB7/3sGUKFbzVDJURKkY1oVFFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLwYBB%2FbtraDzMbcB7%2F3sGUKFbzVDJURKkY1oVFFK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;465&quot; data-filename=&quot;githubDesktop8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Repository name 에 계정명을 그대로 입력하고 Create repository 버튼을 클립합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;696&quot; data-filename=&quot;githubDesktop9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1mI5I/btraCjisWTk/wQ54DvfOMPrzTjvK0nappk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1mI5I/btraCjisWTk/wQ54DvfOMPrzTjvK0nappk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1mI5I/btraCjisWTk/wQ54DvfOMPrzTjvK0nappk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1mI5I%2FbtraCjisWTk%2FwQ54DvfOMPrzTjvK0nappk%2Fimg.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;696&quot; data-filename=&quot;githubDesktop9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;여기까지 진행하면 아래와 같이 완료된 화면을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;941&quot; data-filename=&quot;githubDesktop10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coB8YL/btrawBYyDuD/LxQ3xnGpOju52QAQoVXxvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coB8YL/btrawBYyDuD/LxQ3xnGpOju52QAQoVXxvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coB8YL/btrawBYyDuD/LxQ3xnGpOju52QAQoVXxvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoB8YL%2FbtrawBYyDuD%2FLxQ3xnGpOju52QAQoVXxvK%2Fimg.png&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;941&quot; data-filename=&quot;githubDesktop10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;Github-Desktop-사용하기&quot; data-ke-size=&quot;size26&quot;&gt;Github Desktop 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 Setup in Desktop 버튼을 클릭하여 Github Desktop을 실행합니다. 2 그리고 Clone버튼을 클릭하여 Local Path에 Clone을 진행 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;913&quot; data-filename=&quot;githubDesktop11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vycmA/btraFEGCC5C/QXh5lULzSZQpUHDEgk9X81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vycmA/btraFEGCC5C/QXh5lULzSZQpUHDEgk9X81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vycmA/btraFEGCC5C/QXh5lULzSZQpUHDEgk9X81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvycmA%2FbtraFEGCC5C%2FQXh5lULzSZQpUHDEgk9X81%2Fimg.png&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;913&quot; data-filename=&quot;githubDesktop11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Open in Visual Studio Code를 실햅합니다. (Visual Studio Code는 설치되어 있어야 실행이 가능합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;678&quot; data-filename=&quot;githubDesktop12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blhbFA/btrazM61y8e/Y294fPSroSFcLPktE6U9g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blhbFA/btrazM61y8e/Y294fPSroSFcLPktE6U9g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blhbFA/btrazM61y8e/Y294fPSroSFcLPktE6U9g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblhbFA%2FbtrazM61y8e%2FY294fPSroSFcLPktE6U9g1%2Fimg.png&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;678&quot; data-filename=&quot;githubDesktop12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;765&quot; data-filename=&quot;githubDesktop13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WlZcI/btraEeVHxD1/xUg3kibAriyeacz28zI3W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WlZcI/btraEeVHxD1/xUg3kibAriyeacz28zI3W0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WlZcI/btraEeVHxD1/xUg3kibAriyeacz28zI3W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWlZcI%2FbtraEeVHxD1%2FxUg3kibAriyeacz28zI3W0%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;765&quot; data-filename=&quot;githubDesktop13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;index.html 파일을 하나생성하고 html 이라고 입력하면 팝업이 뜨는데 이중에서 html:5를 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot; data-filename=&quot;githubDesktop14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfr3gw/btraEfmO1cH/nWz3rT9JUNihs1za53qAy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfr3gw/btraEfmO1cH/nWz3rT9JUNihs1za53qAy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfr3gw/btraEfmO1cH/nWz3rT9JUNihs1za53qAy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfr3gw%2FbtraEfmO1cH%2FnWz3rT9JUNihs1za53qAy0%2Fimg.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot; data-filename=&quot;githubDesktop14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;html5를 선택하면 아래와 같은 코드가 자동으로 생성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;330&quot; data-filename=&quot;githubDesktop15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UWWSy/btraCSyFuHQ/AWYsZEuqm2KxylLMTamvRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UWWSy/btraCSyFuHQ/AWYsZEuqm2KxylLMTamvRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UWWSy/btraCSyFuHQ/AWYsZEuqm2KxylLMTamvRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUWWSy%2FbtraCSyFuHQ%2FAWYsZEuqm2KxylLMTamvRK%2Fimg.png&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;330&quot; data-filename=&quot;githubDesktop15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 내용을 수정하고 저장 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;363&quot; data-filename=&quot;githubDesktop16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m5LsR/btraInc3DWJ/6dIEEWPpVOl9UZxsr7BWcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m5LsR/btraInc3DWJ/6dIEEWPpVOl9UZxsr7BWcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m5LsR/btraInc3DWJ/6dIEEWPpVOl9UZxsr7BWcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm5LsR%2FbtraInc3DWJ%2F6dIEEWPpVOl9UZxsr7BWcK%2Fimg.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;363&quot; data-filename=&quot;githubDesktop16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;열려져 있는 Github Desktop에 아래와 같이 index.html이 추가된것을 알수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;654&quot; data-filename=&quot;githubDesktop17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIvo6l/btraBeWtvNf/8WSFGPfLOc1BQj7v5X2yd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIvo6l/btraBeWtvNf/8WSFGPfLOc1BQj7v5X2yd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIvo6l/btraBeWtvNf/8WSFGPfLOc1BQj7v5X2yd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIvo6l%2FbtraBeWtvNf%2F8WSFGPfLOc1BQj7v5X2yd1%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;654&quot; data-filename=&quot;githubDesktop17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Description에 어떤 내용이 변경되었는지 적어 주고 Commit to master 버튼을 클릭 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Push origin 버튼을 클릭하여 작성한 html 문서를 발행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;664&quot; data-filename=&quot;githubDesktop18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcVxKu/btraEgMLYlM/kZFE7JPu7Wu9lDbp5CYzi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcVxKu/btraEgMLYlM/kZFE7JPu7Wu9lDbp5CYzi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcVxKu/btraEgMLYlM/kZFE7JPu7Wu9lDbp5CYzi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcVxKu%2FbtraEgMLYlM%2FkZFE7JPu7Wu9lDbp5CYzi1%2Fimg.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;664&quot; data-filename=&quot;githubDesktop18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;github 사이트에 들어가면 index.html 이 반영되어 있음을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;774&quot; data-filename=&quot;githubDesktop19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/muPt6/btraBTSaRxf/Yn3wFuSg6cusru65YjAUH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/muPt6/btraBTSaRxf/Yn3wFuSg6cusru65YjAUH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/muPt6/btraBTSaRxf/Yn3wFuSg6cusru65YjAUH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmuPt6%2FbtraBTSaRxf%2FYn3wFuSg6cusru65YjAUH1%2Fimg.png&quot; data-origin-width=&quot;1129&quot; data-origin-height=&quot;774&quot; data-filename=&quot;githubDesktop19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;651&quot; data-filename=&quot;githubDesktop20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1XwYE/btraBdDev2w/9s6XiZ5TWV6wmHk7HMeXB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1XwYE/btraBdDev2w/9s6XiZ5TWV6wmHk7HMeXB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1XwYE/btraBdDev2w/9s6XiZ5TWV6wmHk7HMeXB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1XwYE%2FbtraBdDev2w%2F9s6XiZ5TWV6wmHk7HMeXB1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;651&quot; data-filename=&quot;githubDesktop20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;651&quot; data-filename=&quot;githubDesktop21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LmWk3/btraEe2uxUs/u0uIhy7LE1yC1iD2rmy1XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LmWk3/btraEe2uxUs/u0uIhy7LE1yC1iD2rmy1XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LmWk3/btraEe2uxUs/u0uIhy7LE1yC1iD2rmy1XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLmWk3%2FbtraEe2uxUs%2Fu0uIhy7LE1yC1iD2rmy1XK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;651&quot; data-filename=&quot;githubDesktop21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 내용을 수정하고 저장하기 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;364&quot; data-filename=&quot;githubDesktop22.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eO0FTC/btraBvKlyDP/QrxDf3fuukw5mFYCj7iwT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eO0FTC/btraBvKlyDP/QrxDf3fuukw5mFYCj7iwT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eO0FTC/btraBvKlyDP/QrxDf3fuukw5mFYCj7iwT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeO0FTC%2FbtraBvKlyDP%2FQrxDf3fuukw5mFYCj7iwT0%2Fimg.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;364&quot; data-filename=&quot;githubDesktop22.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래 그림과 같이 어떤 내용이 수정되었는지 확인이 가능합니다. 변경된 수정내용을 작성하고 Commit to master 버튼을 클릭 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;645&quot; data-filename=&quot;githubDesktop23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqS3Do/btraHYxCFN0/iXmBKvqFF6lLfOaQdz7yXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqS3Do/btraHYxCFN0/iXmBKvqFF6lLfOaQdz7yXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqS3Do/btraHYxCFN0/iXmBKvqFF6lLfOaQdz7yXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqS3Do%2FbtraHYxCFN0%2FiXmBKvqFF6lLfOaQdz7yXK%2Fimg.png&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;645&quot; data-filename=&quot;githubDesktop23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Push origin 버튼을 클릭하여 내용을 갱신 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;739&quot; data-filename=&quot;githubDesktop25.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNHbT5/btraGFrLAdj/OqeyxayIeFJPhYkNoh8KY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNHbT5/btraGFrLAdj/OqeyxayIeFJPhYkNoh8KY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNHbT5/btraGFrLAdj/OqeyxayIeFJPhYkNoh8KY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNHbT5%2FbtraGFrLAdj%2FOqeyxayIeFJPhYkNoh8KY1%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;739&quot; data-filename=&quot;githubDesktop25.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 github에서 변경된 내용 확인이 가능 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Setup/opensource</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/35</guid>
      <comments>https://goodsaem.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 27 Jul 2021 23:20:11 +0900</pubDate>
    </item>
    <item>
      <title>Github 계정생성</title>
      <link>https://goodsaem.tistory.com/34</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Github&amp;nbsp;계정생성&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스코드 형상관리를 위한 Github 계정 생성방법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;458&quot; data-filename=&quot;githubCreate.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btTGHm/btraGFSMW2Y/bko1M3DQaLzVX2nJRwewR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btTGHm/btraGFSMW2Y/bko1M3DQaLzVX2nJRwewR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btTGHm/btraGFSMW2Y/bko1M3DQaLzVX2nJRwewR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtTGHm%2FbtraGFSMW2Y%2Fbko1M3DQaLzVX2nJRwewR0%2Fimg.png&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;458&quot; data-filename=&quot;githubCreate.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;설치방법&quot; data-ke-size=&quot;size26&quot;&gt;사용자 계정 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.github.com&quot;&gt;http://www.github.com&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속합니다. 그리고 나서 Sign up for GitHub 버튼을 클릭하여 계정을 생성합니다. 이름 이메일등 필요한 정보를 등록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;908&quot; data-filename=&quot;gc1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb65ko/btraBeCglNq/92YssaZrsDxS7yvjMj3Jf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb65ko/btraBeCglNq/92YssaZrsDxS7yvjMj3Jf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb65ko/btraBeCglNq/92YssaZrsDxS7yvjMj3Jf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb65ko%2FbtraBeCglNq%2F92YssaZrsDxS7yvjMj3Jf0%2Fimg.png&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;908&quot; data-filename=&quot;gc1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래와 같이 항목을 선택하고 complete 버튼을 클릭하면 이메일 인증 메일이 발송됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;940&quot; data-filename=&quot;gc2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chzDV5/btraGPOufIl/SgSRtkyVK4dC8Zs9ZnUN81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chzDV5/btraGPOufIl/SgSRtkyVK4dC8Zs9ZnUN81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chzDV5/btraGPOufIl/SgSRtkyVK4dC8Zs9ZnUN81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchzDV5%2FbtraGPOufIl%2FSgSRtkyVK4dC8Zs9ZnUN81%2Fimg.png&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;940&quot; data-filename=&quot;gc2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;692&quot; data-filename=&quot;gc3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vF6V0/btraGb5jtnC/0d2VCAahmUTYkIXfD1bmy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vF6V0/btraGb5jtnC/0d2VCAahmUTYkIXfD1bmy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vF6V0/btraGb5jtnC/0d2VCAahmUTYkIXfD1bmy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvF6V0%2FbtraGb5jtnC%2F0d2VCAahmUTYkIXfD1bmy0%2Fimg.png&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;692&quot; data-filename=&quot;gc3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;받은 메일함에서 인증 버튼을 클릭하여 이메일 인증을 진행 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1337&quot; data-filename=&quot;gc4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wDNRp/btraFFZPWlt/W3rRKnEvfBJlVdRZzyFRTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wDNRp/btraFFZPWlt/W3rRKnEvfBJlVdRZzyFRTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wDNRp/btraFFZPWlt/W3rRKnEvfBJlVdRZzyFRTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwDNRp%2FbtraFFZPWlt%2FW3rRKnEvfBJlVdRZzyFRTK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1337&quot; data-filename=&quot;gc4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;가입시 등록했던 이메일 주소와 비밀번호를 입력하면 이메일 인증이 완료됩니다. 여기까지 잘 따라 하셨다면 계정생성이 완료되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1221&quot; data-filename=&quot;gc5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSHmB/btraEgeWCuz/RgGhIr4lEwb0BkoyYghL80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSHmB/btraEgeWCuz/RgGhIr4lEwb0BkoyYghL80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSHmB/btraEgeWCuz/RgGhIr4lEwb0BkoyYghL80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSHmB%2FbtraEgeWCuz%2FRgGhIr4lEwb0BkoyYghL80%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1221&quot; data-filename=&quot;gc5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Setup/opensource</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/34</guid>
      <comments>https://goodsaem.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 27 Jul 2021 22:37:17 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 공부를 위한 아나콘다 설치</title>
      <link>https://goodsaem.tistory.com/33</link>
      <description>&lt;h2 id=&quot;아나콘다-Anaconda-를-사용하는-이유&quot; data-ke-size=&quot;size26&quot;&gt;아나콘다(Anaconda)를 사용하는 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬은 인기가 많은 언어입니다. 저와는 인연이 없어서 사용할 일이 없었는데 요즘 인공지능에 대한 관심이 많아지고 회사에서도 파이썬을 이용하는 개발자분들이 증가하고 있어 저도 준비를 해야겠다는 생각에 파이썬 개발환경을 구축해 보고자 합니다. 인터넷 시용이 제한 되는 환경이라면 파이썬 패키지를 다운로드 받거나 업데이트는 진행할수 있습니다. 이때 사용할수 있는 방법이 인터넷이 되는 환경에서 아나콘다 의 conda 시스템을 통해서 패키지를 업데이트한후 전체를 압축한후 사용하면 인터넷 사용 제한에 따른 문제를 해결할수 있습니다. 이에 저는 아나콘다를 사용합니다.&lt;/p&gt;
&lt;h2 id=&quot;아나콘다-설치&quot; data-ke-size=&quot;size26&quot;&gt;아나콘다 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.anaconda.com/products/individual#windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.anaconda.com/products/individual#windows&lt;/a&gt; 에서 다운로드 버튼을 클릭하여 다운로드를 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;405&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R6E8C/btrazvcAYWi/q6xkbeaFqZCr2WNYFXZPQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R6E8C/btrazvcAYWi/q6xkbeaFqZCr2WNYFXZPQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R6E8C/btrazvcAYWi/q6xkbeaFqZCr2WNYFXZPQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR6E8C%2FbtrazvcAYWi%2Fq6xkbeaFqZCr2WNYFXZPQ0%2Fimg.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;405&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받은 파일을 실행하여 Next &amp;gt; Next 하여 설치를 진행합니다.&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-origin-width=&quot;513&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEIF2H/btrazNksxpO/LODKcmunWCx5WHaaPzkJn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEIF2H/btrazNksxpO/LODKcmunWCx5WHaaPzkJn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEIF2H/btrazNksxpO/LODKcmunWCx5WHaaPzkJn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEIF2H%2FbtrazNksxpO%2FLODKcmunWCx5WHaaPzkJn0%2Fimg.png&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 완료후 Anaconda Navigator 아이콘을 클릭하여 아나콘다를 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;56&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8MPdH/btraEeVDkp1/k1nrBR1TZa0wQwr5nuekWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8MPdH/btraEeVDkp1/k1nrBR1TZa0wQwr5nuekWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8MPdH/btraEeVDkp1/k1nrBR1TZa0wQwr5nuekWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8MPdH%2FbtraEeVDkp1%2Fk1nrBR1TZa0wQwr5nuekWK%2Fimg.png&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;56&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행화면에서 쥬피터 노트북을 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;977&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDcA4q/btrax7co712/zduSajnQEAwXgqhei8Jba1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDcA4q/btrax7co712/zduSajnQEAwXgqhei8Jba1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDcA4q/btrax7co712/zduSajnQEAwXgqhei8Jba1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDcA4q%2Fbtrax7co712%2FzduSajnQEAwXgqhei8Jba1%2Fimg.png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;977&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;New 콤보박스를 선택하여 Python3을 실행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;693&quot; data-filename=&quot;conda14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJXcYE/btraIncYLsM/t6em3IkOsrHHqs19e2VfRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJXcYE/btraIncYLsM/t6em3IkOsrHHqs19e2VfRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJXcYE/btraIncYLsM/t6em3IkOsrHHqs19e2VfRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJXcYE%2FbtraIncYLsM%2Ft6em3IkOsrHHqs19e2VfRK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;693&quot; data-filename=&quot;conda14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;1+1 을 실행하여 결과를 확인합니다. 여기까지 하시면 아나콘다 설치 및 쥬피터 노트북 테스트가 완료되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;267&quot; data-filename=&quot;conda15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAtGYs/btraIl7jL2R/lpyfGXJjLNy9vVayIJgG5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAtGYs/btraIl7jL2R/lpyfGXJjLNy9vVayIJgG5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAtGYs/btraIl7jL2R/lpyfGXJjLNy9vVayIJgG5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAtGYs%2FbtraIl7jL2R%2FlpyfGXJjLNy9vVayIJgG5k%2Fimg.png&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;267&quot; data-filename=&quot;conda15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Language/파이썬</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/33</guid>
      <comments>https://goodsaem.tistory.com/33#entry33comment</comments>
      <pubDate>Tue, 27 Jul 2021 21:02:14 +0900</pubDate>
    </item>
    <item>
      <title>파이썬(python) + 오픈 API(open api) 를 이용한 아파트 매매 실거래 가격 가져오기</title>
      <link>https://goodsaem.tistory.com/32</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;파이썬(python)&amp;nbsp;+&amp;nbsp;오픈&amp;nbsp;API(open&amp;nbsp;api)&amp;nbsp;를&amp;nbsp;이용한&amp;nbsp;아파트&amp;nbsp;매매&amp;nbsp;실거래&amp;nbsp;가격&amp;nbsp;가져오기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;796&quot; data-filename=&quot;image00000.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtRozq/btraEfAei22/YiUZKTZi9q4F8dHfbir7iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtRozq/btraEfAei22/YiUZKTZi9q4F8dHfbir7iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtRozq/btraEfAei22/YiUZKTZi9q4F8dHfbir7iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtRozq%2FbtraEfAei22%2FYiUZKTZi9q4F8dHfbir7iK%2Fimg.png&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;796&quot; data-filename=&quot;image00000.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;공공데이터-open-api-이용하기&quot; data-ke-size=&quot;size26&quot;&gt;공공데이터 open api 이용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공공데이터 포털&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.data.go.kr/&quot;&gt;https://www.data.go.kr/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라는 곳이 있습니다. 공공기관이 생성 또는 취득하여 관리하고 있는 공공데이터를 한 곳에서 제공하는 통합 창구 이며 국민이 쉽고편리하게 공공데이터를 이용할 수 있도록 파일데이터, 오픈API, 시각화 등 다양한 방식으로 제공하고 있으며, 누구라도 쉽고 편리한 검색을통해 원하는 공공데이터를 빠르고 정확하게 찾을 수 있는 곳입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 오늘 이용하고자 하는 부동산 실거래 가격도 이곳에 등록되어 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공공데이터를 제공해주는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.data.go.kr/&quot;&gt;https://www.data.go.kr/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속합니다.&lt;/li&gt;
&lt;li&gt;회원 가입을 진행합니다.&lt;/li&gt;
&lt;li&gt;데이터 찾기에서 &amp;ldquo;아파트매매 실거래자료&amp;rdquo; 라고 입력하고 검색 아이콘을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;2740&quot; data-origin-height=&quot;390&quot; data-filename=&quot;image00001.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs2IDb/btraBTxELtv/drBRtRLP90Jw3A1J5KBEo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs2IDb/btraBTxELtv/drBRtRLP90Jw3A1J5KBEo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs2IDb/btraBTxELtv/drBRtRLP90Jw3A1J5KBEo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs2IDb%2FbtraBTxELtv%2FdrBRtRLP90Jw3A1J5KBEo1%2Fimg.png&quot; data-origin-width=&quot;2740&quot; data-origin-height=&quot;390&quot; data-filename=&quot;image00001.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;검색 결과에서 아래 내용을 선택합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;2418&quot; data-origin-height=&quot;1396&quot; data-filename=&quot;image00002.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EG12w/btraInjIXwE/ab9L2FnaifXdIasOTEXPmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EG12w/btraInjIXwE/ab9L2FnaifXdIasOTEXPmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EG12w/btraInjIXwE/ab9L2FnaifXdIasOTEXPmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEG12w%2FbtraInjIXwE%2Fab9L2FnaifXdIasOTEXPmK%2Fimg.png&quot; data-origin-width=&quot;2418&quot; data-origin-height=&quot;1396&quot; data-filename=&quot;image00002.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 자료를 클릭하면 아래와 같은 정보를 확인할수 있습니다. 활용사례 탭을 클릭해보니 호갱노노 에서도 사용하고 있습니다. 제가 원하는 부동산 실거래 가격 이 맞네요 [활용신청] 버튼을 클릭하여 Api 신청을 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;2056&quot; data-filename=&quot;image00003.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UQFKE/btrax8ClCGo/s7V1CTkxT7joLGfkd6g1cK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UQFKE/btrax8ClCGo/s7V1CTkxT7joLGfkd6g1cK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UQFKE/btrax8ClCGo/s7V1CTkxT7joLGfkd6g1cK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUQFKE%2Fbtrax8ClCGo%2Fs7V1CTkxT7joLGfkd6g1cK%2Fimg.png&quot; data-origin-width=&quot;2502&quot; data-origin-height=&quot;2056&quot; data-filename=&quot;image00003.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Api 신청이 완료되면 아래와 같이 마이페이지에에서 api 승인결과를 알수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;766&quot; data-filename=&quot;image00004.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlbSDg/btraFD8HFCm/SWeVho47zYSt6NSIIrXUxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlbSDg/btraFD8HFCm/SWeVho47zYSt6NSIIrXUxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlbSDg/btraFD8HFCm/SWeVho47zYSt6NSIIrXUxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlbSDg%2FbtraFD8HFCm%2FSWeVho47zYSt6NSIIrXUxK%2Fimg.png&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;766&quot; data-filename=&quot;image00004.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아파트 매매 신고정보 조회 기술문서.hwp 파일을 열어서 api 사용하는 방법에 대해서 확인해 보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;915&quot; data-filename=&quot;image00005.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK3kbT/btraCSSOXFX/H4bvNJZdxpM6i140RqR0N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK3kbT/btraCSSOXFX/H4bvNJZdxpM6i140RqR0N1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK3kbT/btraCSSOXFX/H4bvNJZdxpM6i140RqR0N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK3kbT%2FbtraCSSOXFX%2FH4bvNJZdxpM6i140RqR0N1%2Fimg.png&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;915&quot; data-filename=&quot;image00005.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상세기능 설명부분을 보시면 행정 표준코드 관리시스템 의 법정동 5자리와 계약년월 정보를 넘겨 데이터를 받는 구조입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;714&quot; data-filename=&quot;image00006.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wwBVS/btraCRzA0he/zDUfbesknKXPvfOk0TdMb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wwBVS/btraCRzA0he/zDUfbesknKXPvfOk0TdMb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wwBVS/btraCRzA0he/zDUfbesknKXPvfOk0TdMb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwwBVS%2FbtraCRzA0he%2FzDUfbesknKXPvfOk0TdMb0%2Fimg.png&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;714&quot; data-filename=&quot;image00006.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래는 요청 메시지 명세서 입니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;365&quot; data-filename=&quot;image00007.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOijGf/btrazuLx2qJ/jKp4qkOq2xAEsHNFzQT0Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOijGf/btrazuLx2qJ/jKp4qkOq2xAEsHNFzQT0Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOijGf/btrazuLx2qJ/jKp4qkOq2xAEsHNFzQT0Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOijGf%2FbtrazuLx2qJ%2FjKp4qkOq2xAEsHNFzQT0Yk%2Fimg.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;365&quot; data-filename=&quot;image00007.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래는 응답 메시지 명세서 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;907&quot; data-filename=&quot;image00008.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEeHMy/btraDAddBWC/0G8USdZhBjZiGTERSMY3F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEeHMy/btraDAddBWC/0G8USdZhBjZiGTERSMY3F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEeHMy/btraDAddBWC/0G8USdZhBjZiGTERSMY3F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEeHMy%2FbtraDAddBWC%2F0G8USdZhBjZiGTERSMY3F1%2Fimg.png&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;907&quot; data-filename=&quot;image00008.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;실제-데이터-가져오는-코드-작성&quot; data-ke-size=&quot;size26&quot;&gt;실제 데이터 가져오는 코드 작성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실제로 데이터를 가져오는 코드를 작성해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627385234206&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import webbrowser

def getRTMSDataSvcAptTrade(LAWD_CD,DEAL_YMD,serviceKey): 
    url=&quot;http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade&quot; 
    url=url+&quot;?&amp;amp;LAWD_CD=&quot;+LAWD_CD
    url=url+&quot;&amp;amp;DEAL_YMD=&quot;+DEAL_YMD
    url=url+&quot;&amp;amp;serviceKey=&quot;+serviceKey
    webbrowser.open(url)
    return
    
getRTMSDataSvcAptTrade('11110','202001','일반 인증키를 입력해주세요')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;위에 코드를 실행하면 아래와 같이 xml 데이터를 받을수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;196&quot; data-filename=&quot;image00009.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqnbiD/btraBdiQLfr/uv1gqcotoqNvZdd8MVQpI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqnbiD/btraBdiQLfr/uv1gqcotoqNvZdd8MVQpI0/img.png&quot; data-alt=&quot;ㅌ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqnbiD/btraBdiQLfr/uv1gqcotoqNvZdd8MVQpI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqnbiD%2FbtraBdiQLfr%2Fuv1gqcotoqNvZdd8MVQpI0%2Fimg.png&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;196&quot; data-filename=&quot;image00009.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅌ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;207&quot; data-filename=&quot;image00010.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCDG11/btraBTqVeon/DhlikbX8id5QjvRZ8sF58k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCDG11/btraBTqVeon/DhlikbX8id5QjvRZ8sF58k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCDG11/btraBTqVeon/DhlikbX8id5QjvRZ8sF58k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCDG11%2FbtraBTqVeon%2FDhlikbX8id5QjvRZ8sF58k%2Fimg.png&quot; data-origin-width=&quot;281&quot; data-origin-height=&quot;207&quot; data-filename=&quot;image00010.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;데이터-가공하기&quot; data-ke-size=&quot;size26&quot;&gt;데이터 가공하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가져온 데이터를 데이터 베이스화 하기 위해 BeautifulSoup,Pandas란 라이브러리를 사용하겠습니다. BeautifulSoup 은 HTML 및 XML 파일에서 원하는 데이터를 손쉽게 Parsing 할 수 있는 Python 라이브러리 이며 Pandas는 파이썬에서 사용하는 데이터분석 라이브러리로, 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있게 되며 보다 안정적으로 대용량의 데이터들을 처리하는데 매우 편리한 도구 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개의 Python를 이용하여 xml을 파싱하고 데이터를 분석해보겠습니다.&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_1627385454300&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from bs4 import BeautifulSoup
import pandas as pd
import urllib.request

req = urllib.request

def getRTMSDataSvcAptTrade(LAWD_CD,DEAL_YMD,serviceKey): 
    url=&quot;http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade&quot; 
    url=url+&quot;?&amp;amp;LAWD_CD=&quot;+LAWD_CD
    url=url+&quot;&amp;amp;DEAL_YMD=&quot;+DEAL_YMD
    url=url+&quot;&amp;amp;serviceKey=&quot;+serviceKey
    
    xml = req.urlopen(url)
    result = xml.read()
    soup = BeautifulSoup(result, 'lxml-xml')    
    
    items = soup.findAll(&quot;item&quot;)
    aptTrade = pd.DataFrame()
    
    for item in items:
        dealAmount          = item.find(&quot;거래금액&quot;).text
        buildYear           = item.find(&quot;건축년도&quot;).text
        dealYear            = item.find(&quot;년&quot;).text
        dong                = item.find(&quot;법정동&quot;).text
        apartmentName       = item.find(&quot;아파트&quot;).text
        dealMonth           = item.find(&quot;월&quot;).text
        dealDay             = item.find(&quot;일&quot;).text
        areaForExclusiveUse = item.find(&quot;전용면적&quot;).text
        jibun               = item.find(&quot;지번&quot;).text
        regionalCode        = item.find(&quot;지역코드&quot;).text
        floor               = item.find(&quot;층&quot;).text
        buildYear           = item.find(&quot;건축년도&quot;).text
        
        temp = pd.DataFrame(([[dealAmount,buildYear,dealYear,dong,apartmentName,dealMonth,dealDay,areaForExclusiveUse,jibun,regionalCode,floor,buildYear]]), columns=[&quot;dealAmount&quot;,&quot;buildYear&quot;,&quot;dealYear&quot;,&quot;dong&quot;,&quot;apartmentName&quot;,&quot;dealMonth&quot;,&quot;dealDay&quot;,&quot;areaForExclusiveUse&quot;,&quot;jibun&quot;,&quot;regionalCode&quot;,&quot;floor&quot;,&quot;buildYear&quot;]) 
        aptTrade=pd.concat([aptTrade,temp])
    
    aptTrade=aptTrade.reset_index(drop=True)
    return aptTrade

getRTMSDataSvcAptTrade('11140','202006','인증코드')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;실행결과는 아래와 같습니다. 원하는 데이터를 잘 가져왔습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;722&quot; data-filename=&quot;image00011.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2iwe4/btraHtdsCXe/t7S14HTnALUqnwzSklOmYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2iwe4/btraHtdsCXe/t7S14HTnALUqnwzSklOmYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2iwe4/btraHtdsCXe/t7S14HTnALUqnwzSklOmYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2iwe4%2FbtraHtdsCXe%2Ft7S14HTnALUqnwzSklOmYK%2Fimg.png&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;722&quot; data-filename=&quot;image00011.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;법정동-코드-데이터베이스화-하기&quot; data-ke-size=&quot;size26&quot;&gt;법정동 코드 데이터베이스화 하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;api에서 인자로 넘겨줘야 될 법정코드(LAWD_CD)이 값을 알아야 되는데요.. 이값은 api설명문서에 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://code.go.kr&quot;&gt;http://code.go.kr&lt;/a&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 통해서 데이터를 확보하겠습니다. 해당 사이트에 접속한후 자주 이용하는 코드 부분의 2번항목 법정동 메뉴를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;568&quot; data-filename=&quot;image00012.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wMVVy/btraBSyNw28/PQ9Y2IwIKS4CkMsQHIQcX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wMVVy/btraBSyNw28/PQ9Y2IwIKS4CkMsQHIQcX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wMVVy/btraBSyNw28/PQ9Y2IwIKS4CkMsQHIQcX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwMVVy%2FbtraBSyNw28%2FPQ9Y2IwIKS4CkMsQHIQcX1%2Fimg.png&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;568&quot; data-filename=&quot;image00012.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;법정동코드 전체 다운로드 버튼을 클릭하세요&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;677&quot; data-filename=&quot;image00013.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE5KyQ/btraIm6c524/eIJIucN6k2sSrOeYjnoC2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE5KyQ/btraIm6c524/eIJIucN6k2sSrOeYjnoC2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE5KyQ/btraIm6c524/eIJIucN6k2sSrOeYjnoC2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE5KyQ%2FbtraIm6c524%2FeIJIucN6k2sSrOeYjnoC2k%2Fimg.png&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;677&quot; data-filename=&quot;image00013.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;다운로드 파일을 열어보면 아래와 같은 문자열로 구성되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627385576487&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;법정동코드	법정동명	폐지여부
1100000000	서울특별시	존재
1111000000	서울특별시 종로구	존재
1111010100	서울특별시 종로구 청운동	존재
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;1~3 번째 row까지 지우고 아래와 같은 형태로 변경합니다. 이렇게 변경하는 이유는 텍스트파일을 읽어서 Pandas dataframe형태로 변경한후 sqllite에 손쉽게 데이터를 넣기 위함입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627385605949&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dong_cd	do	si	my	ri	exyn
1111010100	서울특별시 종로구 청운동	존재
1111010200	서울특별시 종로구 신교동	존재
1111010300	서울특별시 종로구 궁정동	존재
1111010400	서울특별시 종로구 효자동	존재
1111010500	서울특별시 종로구 창성동	존재
1111010600	서울특별시 종로구 통의동	존재
1111010700	서울특별시 종로구 적선동	존재
1111010800	서울특별시 종로구 통인동	존재&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;파일명을 cd.txt로 바꾸고 쥬피터 노트북에서 python코드 작성중인 곳에 적당한 폴더에 위치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;2454&quot; data-origin-height=&quot;1190&quot; data-filename=&quot;image00014.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caa4UX/btraBuLgcki/zISWtt4Z9HNngUEe7kWRok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caa4UX/btraBuLgcki/zISWtt4Z9HNngUEe7kWRok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caa4UX/btraBuLgcki/zISWtt4Z9HNngUEe7kWRok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcaa4UX%2FbtraBuLgcki%2FzISWtt4Z9HNngUEe7kWRok%2Fimg.png&quot; data-origin-width=&quot;2454&quot; data-origin-height=&quot;1190&quot; data-filename=&quot;image00014.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 파이썬 코드를 실행하면 conn.db에 dong이란 테이블이 만들어 집니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627385667925&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import sqlite3

con  = sqlite3.connect(&quot;files/conn.db&quot;)
df = pd.read_csv('files/cd.txt', sep = &quot;\t&quot;, engine='python', encoding = &quot;cp949&quot;)
df.to_sql('dong',con,schema=None,if_exists='replace',index=None,index_label=None, chunksize=None, dtype=None)
con.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;sqlite db viewer로 테이블이 구조와 데이터를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;316&quot; data-filename=&quot;image00015.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yRTAM/btraCjvXAfL/LkqRrL6ckTsVmPrSe3SvAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yRTAM/btraCjvXAfL/LkqRrL6ckTsVmPrSe3SvAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yRTAM/btraCjvXAfL/LkqRrL6ckTsVmPrSe3SvAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyRTAM%2FbtraCjvXAfL%2FLkqRrL6ckTsVmPrSe3SvAk%2Fimg.png&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;316&quot; data-filename=&quot;image00015.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;556&quot; data-filename=&quot;image00016.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oYAza/btrasVpnkGc/yM4Nacq5b7g1KBVP6ZS6G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oYAza/btrasVpnkGc/yM4Nacq5b7g1KBVP6ZS6G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oYAza/btrasVpnkGc/yM4Nacq5b7g1KBVP6ZS6G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoYAza%2FbtrasVpnkGc%2FyM4Nacq5b7g1KBVP6ZS6G0%2Fimg.png&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;556&quot; data-filename=&quot;image00016.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;부동산-실거래-db-구축하기&quot; data-ke-size=&quot;size26&quot;&gt;부동산 실거래 db 구축하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 순서대로 코딩하겠습니다. 부동산 실거래 데이터가 언제부터 존재하는지 확인한 결과 2006년1월부터 데이터가 존재 했습니다. for문 사용해서 2006년 01월부터 2020년 07월 현재까지 모든 데이터를 가져오고 싶었지만 데이터량이 너무 많아서 데이터 베이스 구축할때 타임아웃이 발생하여 1년씩 데이터 베이스를 생성하겠습니다. 1년생성하고 또 1년생성하고 총 15번 정도 아래 코드를 실행하겠습니다. 아래 코드중 아래 4가지 변수값을 수정해서 데이터를 생성하시기 바랍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627385741335&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sYear  = 2011
eYear  = 2011
sMonth = 1
eMonth = 12&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;코드-간단설명&quot; data-ke-size=&quot;size23&quot;&gt;코드 간단설명&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;법정동 정보 5자리를 distinct 해서 가져옵니다.&lt;/li&gt;
&lt;li&gt;가져오고자 하는 년도를 입력합니다.&lt;/li&gt;
&lt;li&gt;1~12월까지 데이터를 가져오도록 코드를 작성합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1627385775010&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sqlite3
from bs4 import BeautifulSoup
import pandas as pd
import urllib.request

req = urllib.request

def getRTMSDataSvcAptTrade(LAWD_CD,DEAL_YMD,serviceKey): 
    url=&quot;http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade&quot; 
    url=url+&quot;?&amp;amp;LAWD_CD=&quot;+LAWD_CD
    url=url+&quot;&amp;amp;DEAL_YMD=&quot;+DEAL_YMD
    url=url+&quot;&amp;amp;serviceKey=&quot;+serviceKey
    
    xml = req.urlopen(url)
    result = xml.read()
    soup = BeautifulSoup(result, 'lxml-xml')    
    
    items = soup.findAll(&quot;item&quot;)
    aptTrade = pd.DataFrame()
    
    for item in items:
        dealAmount          = item.find(&quot;거래금액&quot;).text        
        dealYear            = item.find(&quot;년&quot;).text
        dong                = item.find(&quot;법정동&quot;).text
        apartmentName       = item.find(&quot;아파트&quot;).text
        dealMonth           = item.find(&quot;월&quot;).text
        dealDay             = item.find(&quot;일&quot;).text
        areaForExclusiveUse = item.find(&quot;전용면적&quot;).text
        regionalCode        = item.find(&quot;지역코드&quot;).text
        floor               = item.find(&quot;층&quot;).text
        
        try:
            jibun = item.find(&quot;지번&quot;).text
        except:
            jibun = &quot;&quot;
        
        try:
            buildYear = item.find(&quot;건축년도&quot;).text
        except:
            buildYear = &quot;&quot;
        
        temp = pd.DataFrame(([[dealAmount,buildYear,dealYear,dong,apartmentName,dealMonth,dealDay,areaForExclusiveUse,jibun,regionalCode,floor]]), columns=[&quot;dealAmount&quot;,&quot;buildYear&quot;,&quot;dealYear&quot;,&quot;dong&quot;,&quot;apartmentName&quot;,&quot;dealMonth&quot;,&quot;dealDay&quot;,&quot;areaForExclusiveUse&quot;,&quot;jibun&quot;,&quot;regionalCode&quot;,&quot;floor&quot;]) 
            
        
        aptTrade=pd.concat([aptTrade,temp])
    
    aptTrade=aptTrade.reset_index(drop=True)
    return aptTrade


con  = sqlite3.connect(&quot;files/conn.db&quot;)
cursor = con.cursor()

sYear  = 2011
eYear  = 2011
sMonth = 1
eMonth = 12

rows = cursor.execute('''select distinct substr(dong_cd,0,6) from dong ''')
silTrade = pd.DataFrame()

for row in rows:    
    if row[0][2:3] != '0':
        for i in range(sYear, eYear+1, 1):
            for j in range(sMonth, eMonth+1, 1):
                yy = str(i)
                mm = str(j)
                if(j &amp;lt; 10): mm = '0' + str(j);

                temp = getRTMSDataSvcAptTrade(row[0],yy+mm,'인증키')
                silTrade = pd.concat([silTrade,temp])
silTrade.to_sql('sil_trade',con,if_exists='append',index=False)
    
con.close()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;아래 sql을 실행하여 데이터 갯수를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627385800218&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select count(*) from sil_trade where 1=1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;112&quot; data-filename=&quot;image00017.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brl1LH/btraHs6FmTT/PmDWRIKsTHiVKIr5yr8MG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brl1LH/btraHs6FmTT/PmDWRIKsTHiVKIr5yr8MG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brl1LH/btraHs6FmTT/PmDWRIKsTHiVKIr5yr8MG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrl1LH%2FbtraHs6FmTT%2FPmDWRIKsTHiVKIr5yr8MG1%2Fimg.png&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;112&quot; data-filename=&quot;image00017.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Language/파이썬</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/32</guid>
      <comments>https://goodsaem.tistory.com/32#entry32comment</comments>
      <pubDate>Tue, 27 Jul 2021 20:12:59 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] 컴포넌트</title>
      <link>https://goodsaem.tistory.com/31</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;vue&amp;nbsp;컴포넌트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;vue 는 컨포넌트로 시작해서 컨포넌트로 끝난다라고 생각하시면 됩니다.. 이 컨포넌트에 대해서 잘알고 있으면 앞으로 문법들이나 예제들을 보는데 도움이 될것 같아 정리해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;_1-cbd-component-based-development&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;CBD(Component Based Development)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CBD 는 시스템을 일체형으로 구축하지 않고 레고 블록 부품 하나씩을 조립해서 큰 레고 블록을 만드는 것처럼 시스템의 구성요소들을 컨포넌트라는 작은 요소로 분리하여 하나씩 만들고 이를 조립해서 하나의 시스템을 만든다는 개념입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 app 은 총 5개의 컨포넌트로 이루어져 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;팝업된 윈도우 자체가 컴포넌트 입니다. 이컨포넌트는 윈도우 제목과 창닫기 버튼이 있습니다. 창닫기 버튼을 클릭하면 창을 닫는 역할을 수행합니다.&lt;/li&gt;
&lt;li&gt;메모 3,4,5를 가지고 있는 부모 컨포넌트 입니다. 2번 화면에서 데이터를 저장하고 메모리스트를 가지고 오는 로직이 들어 있지만 화면은 존재하지 않습니다.&lt;/li&gt;
&lt;li&gt;메모 상단에 위치한 컨포넌트 입니다.&lt;/li&gt;
&lt;li&gt;메모를 작성하는 컴포넌트 입니다. 제목과 내용을 입력받아 저장버튼을 클릭하면 입력받은 글을 부포 컨포넌트에게 전달합니다.&lt;/li&gt;
&lt;li&gt;댓글 리스트 컨포넌트로 댓글 배열을 받아서 리스트업하고 수정이나 삭제 버튼을 클릭하면 부모에게 수정및 삭제 이벤트를 발생합니다&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;687&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCPREF/btrazM5Tv8J/U6y5iEuDxM7XXqi1sYGzz0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCPREF/btrazM5Tv8J/U6y5iEuDxM7XXqi1sYGzz0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCPREF/btrazM5Tv8J/U6y5iEuDxM7XXqi1sYGzz0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCPREF%2FbtrazM5Tv8J%2FU6y5iEuDxM7XXqi1sYGzz0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;687&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;왜 이렇게 개발할까요 ?&lt;/b&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그냥 하나로 개발하면 되는데 왜 복잡하게 이렇게 개발하는 걸까요 ? 만든 컴포넌트를 재사용하기 위해서 입니다. 위에 5번 댓글 컨포넌트는 상당히 많이 사용되죠 ? 메모 app 에서도 사용될수 있지만 게시판의 글 보기 app 에도 사용될수 있습니다. 같은 기능을 계속 개발한다면 시간도 많이 들어가고 유지보수 하기도 힘들꺼에요 예를 들어 모든 댓글의 아이콘을 바꾼다고 가정하면 이걸 일일이 찾아서 모두 변경해 줘야 되죠 하지만 컴포넌트를 불러와서 사용했다면 하나만 수정하면 모든 app 들의 아이콘이 한번에 변경됩니다. 컨포넌트 기반으로 개발하면 불필요한 코딩을 줄일수 있고 유지 보수도 용이해 집니다. 그리고 실력있는 고참 개발자분들이 컨포넌트를 잘 만들어 놓았다면 화면을 개발하는 개발자는 해당 app 에서 사용하는 데이터 모델과 비지니스 프로세스만 잘 구현하고 실제 구현에 필요한 개발공수는 줄어듭니다. 그래서 cbd 기반으로 개발을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-예제&quot; data-ke-size=&quot;size26&quot;&gt;예제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래와 같은 tab 컴포넌트는 여러화면에서 사용하는 컴포넌트 입니다. 이름이 default 로 선택되어져 있는데 &quot;&lt;b&gt;&lt;u&gt;나이&quot;가 default 선택된 탭&lt;/u&gt;&lt;/b&gt;을 하나더 만든다고 가정하면 컴포넌트를 사용하지 않으면 중복된 코드들이 존재 할수 있습니다. 이렇게 공통으로 사용하는 탭 같은경우에는 컨포넌트로 만들어서 active 되는 탭만 props 로 지정해서 넘겨주고 props 값에 따라 default 선택 탭을 변경하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://onehit9.github.io/#/page6&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EleTab.vue&lt;/h3&gt;
&lt;pre id=&quot;code_1629421955120&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div id=&quot;tab&quot;&amp;gt;
    &amp;lt;el-tabs type=&quot;border-card&quot; v-model=&quot;activeName&quot; @tab-click=&quot;handleClick&quot;&amp;gt;
      &amp;lt;el-tab-pane v-for=&quot;(item, index) in tabInfo&quot; :key=&quot;index&quot; :label=&quot;item&quot; :name=&quot;item&quot;&amp;gt;
        {{ tabInfo.concat(',') }} 중 {{item}}
      &amp;lt;/el-tab-pane&amp;gt;
    &amp;lt;/el-tabs&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
export default {
  name: &quot;EleTab&quot;,
  props: {
    tabInfo: Array,
    active : String,
  },
  data() {
    return {
      activeName : ''
    }
  },
  methods: {
    handleClick() {
      this.$emit(&quot;ele-tab-click&quot;,this.activeName);
    }
  },
  watch: {
    active: {
      immediate: true,
      deep: true,
      handler(newValue, oldValue) {
        if(newValue !== oldValue) this.activeName = newValue;
      }
    }
  }
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Page6.vue&lt;/h3&gt;
&lt;pre id=&quot;code_1629422222462&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
        하위 컴포넌트가 전달한값 : {{ sendData }}
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
        &amp;lt;ele-tab @ele-tab-click=&quot;handleClick&quot; :tabInfo=&quot;[ '이름' , '나이' , '성별' , '하는일']&quot; active=&quot;이름&quot; /&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
        &amp;lt;ele-tab @ele-tab-click=&quot;handleClick&quot; :tabInfo=&quot;[ '이름' , '나이' , '성별' , '하는일']&quot; active=&quot;나이&quot; /&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot;&amp;gt;
        &amp;lt;ele-tab @ele-tab-click=&quot;handleClick&quot; :tabInfo=&quot;[ '지역' , '기업' , '종교' , '취미' ,'기타1', '기타2']&quot; active=&quot;취미&quot; /&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
 
&amp;lt;script&amp;gt;
import EleTab from &quot;@/components/EleTab&quot;;
export default {
  name: &quot;Page6&quot;,
  components: {
    EleTab
  },
  methods: {
    handleClick(data) {
      this.sendData = data;
    }
  },
  data() {
    return {
      sendData : '',
    }
  }
}
&amp;lt;/script&amp;gt;
 
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EleVue 컴포넌트는 element-ui 컴포넌트중 탭 컴포넌트를 사용했고 Page6.vue에서 만든 해당 컴포넌트를 재활용하는 형태로 구현했습니다.&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/31</guid>
      <comments>https://goodsaem.tistory.com/31#entry31comment</comments>
      <pubDate>Mon, 26 Jul 2021 22:37:31 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] 소개</title>
      <link>https://goodsaem.tistory.com/30</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Vue.js 소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Vue.js는 React.js와 함께 가장 인기있는 자바스크립트 프레임워크 중의 하나입니다. 아래 Vue 의 Market Position 을 확인해 보면 React 보다는 조금 떨어지지만 많이 사용하고 있는 라이브러리임을 확인 할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCfITq/btraBT4q0aE/jPDcwSOoFgW8VVjiy0G8w0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCfITq/btraBT4q0aE/jPDcwSOoFgW8VVjiy0G8w0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCfITq/btraBT4q0aE/jPDcwSOoFgW8VVjiy0G8w0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCfITq%2FbtraBT4q0aE%2FjPDcwSOoFgW8VVjiy0G8w0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Vue.js는 React.js 보다 배우기 쉽다는 장점 때문에 지속 성장하는 추세입니다. 아래는 웹사이트에 채택하는 자바스크립트 트랜드를 보여 주는 표입니다. Vue.js 대비 어려운 Angular 는 떨어지고 React 는 상승세 이긴 하지만 vue js 보다는 상승세가 높지 않네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;515&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uBZgr/btraBSqVfS8/YCRw8i8KrHNtKK5UBY4ga1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uBZgr/btraBSqVfS8/YCRw8i8KrHNtKK5UBY4ga1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uBZgr/btraBSqVfS8/YCRw8i8KrHNtKK5UBY4ga1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuBZgr%2FbtraBSqVfS8%2FYCRw8i8KrHNtKK5UBY4ga1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;515&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Vue.js 한국어 사이트&lt;/span&gt;&lt;a href=&quot;https://kr.vuejs.org/&quot;&gt;https://kr.vuejs.org/&lt;/a&gt;&lt;a href=&quot;https://kr.vuejs.org/&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(opens new window)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;에 가보면 문서 번역이 잘되어 있습니다. 하지만 생각보다 예제가 많지 않았습니다. 그래서 vue.js 강좌를 진행하면서 기술을 정리하고 예제도 많이 만들어서 Vue.js로 멋진 Single Page Application 을 만들어 보겠습니다.&lt;/span&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;span style=&quot;color: #2c3e50;&quot;&gt;카운터 증가/감소 예제&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1627303347543&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;vue.js 강좌 연습&amp;lt;/title&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/vue@next&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;div id=&quot;counter&quot;&amp;gt;
  Counter: {{ counter }}
   &amp;lt;button v-on:click=&quot;countPlus&quot;&amp;gt;카운터증가&amp;lt;/button&amp;gt;
   &amp;lt;button v-on:click=&quot;countMinus&quot;&amp;gt;카운터감소&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
const Counter = {
  data() {
    return {
      counter: 0
    }
  },
  methods : {
  	countPlus() {
  		this.counter++;
  	},
  	countMinus() {
  		this.counter--;
  	}
  }
}

Vue.createApp(Counter).mount('#counter')&amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행결과&lt;/h2&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;iframe src=&quot;https://tistory4.daumcdn.net/tistory/4329796/skin/images/lecture101.html&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/30</guid>
      <comments>https://goodsaem.tistory.com/30#entry30comment</comments>
      <pubDate>Mon, 26 Jul 2021 21:16:02 +0900</pubDate>
    </item>
    <item>
      <title>[vue.js] 개발 환경 구축하기</title>
      <link>https://goodsaem.tistory.com/29</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;vue.js&amp;nbsp;개발&amp;nbsp;환경&amp;nbsp;구축하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.Js Frontend 개발을 위한 환경 설정 방법에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-visual-studio-code-설치&quot; data-ke-size=&quot;size26&quot;&gt;Visual Studio Code 설치&lt;/h2&gt;
&lt;ol 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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/?dv=win&quot;&gt;https://code.visualstudio.com/docs/?dv=win&lt;/a&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/?dv=win&quot;&gt;&lt;span&gt;&lt;span&gt;(opens new window)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;다운로드 받은 파일을 더블 클릭하여 설치를 진행합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crc68t/btraqrf97Gy/fKGQst4FCBwe4NTHHSkkwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crc68t/btraqrf97Gy/fKGQst4FCBwe4NTHHSkkwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crc68t/btraqrf97Gy/fKGQst4FCBwe4NTHHSkkwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcrc68t%2Fbtraqrf97Gy%2FfKGQst4FCBwe4NTHHSkkwk%2Fimg.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;458&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;동의합니다를 선택하여 [다음][다음] 을 클릭하여 설치를 완료합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-visual-studio-extension-설치&quot; data-ke-size=&quot;size26&quot;&gt;Visual Studio Extension 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode 에서 사용하는 vue.js 관련 유용한 플러그인을 설치합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vetur Extension : Vetur 플러그인은 Linting , Syntax-highlighting , Formatting등을 지원해 줍니다&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;766&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z0fYB/btraqRzt21P/w6r23c5unBGcCtNFYrfcvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z0fYB/btraqRzt21P/w6r23c5unBGcCtNFYrfcvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z0fYB/btraqRzt21P/w6r23c5unBGcCtNFYrfcvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz0fYB%2FbtraqRzt21P%2Fw6r23c5unBGcCtNFYrfcvk%2Fimg.png&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;766&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;vue peek Extention : vue콤포넌트를 통해 해당 콤포넌트 파일을 열어서 바로 수정할수 있는 기능을 지원해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;747&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgnleH/btrax7Bjy3V/ryebRaJ0TmZv2ssz9h6aW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgnleH/btrax7Bjy3V/ryebRaJ0TmZv2ssz9h6aW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgnleH/btrax7Bjy3V/ryebRaJ0TmZv2ssz9h6aW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgnleH%2Fbtrax7Bjy3V%2FryebRaJ0TmZv2ssz9h6aW1%2Fimg.png&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;747&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;vue 2 snippets exteion : vue 코드 자동 완성 기능을 지원해줍니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;764&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU6NhR/btrasvpqsar/IDVtGoCKuqZwi9sped37C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU6NhR/btrasvpqsar/IDVtGoCKuqZwi9sped37C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU6NhR/btrasvpqsar/IDVtGoCKuqZwi9sped37C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU6NhR%2Fbtrasvpqsar%2FIDVtGoCKuqZwi9sped37C0%2Fimg.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;764&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;_2-chrome-plug-in-설&quot; data-ke-size=&quot;size26&quot;&gt;Chrome Plug-in 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;크롬 플러그인이 설치되어 있으면 Vuex 를 사용시 컴포넌트의 상태변경을 추적할수 있으면 해당 상태 변경을 임의되로 변경하여 테스트 해볼수 있습니다. 아래 url 로 접속 하여 플러그인을 설치 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd&quot;&gt;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;424&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGqlZ8/btrawC2uXKC/3K44vNszU8Z8p9V17le5F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGqlZ8/btrawC2uXKC/3K44vNszU8Z8p9V17le5F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGqlZ8/btrawC2uXKC/3K44vNszU8Z8p9V17le5F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGqlZ8%2FbtrawC2uXKC%2F3K44vNszU8Z8p9V17le5F1%2Fimg.png&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;424&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_3-node-js-설치&quot; data-ke-size=&quot;size26&quot;&gt;node.js 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nodejs.org/ko/&quot;&gt;https://nodejs.org/ko/&lt;/a&gt;&lt;a href=&quot;https://nodejs.org/ko/&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(opens new window)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;사이트에 접속하신후 LTS 안정버전을 다운로드 받아서 설치를 진행합니다. 다음 다음을 클릭하여 default 로 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627206755878&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Node.js&quot; data-og-description=&quot;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/ko/&quot; data-og-url=&quot;https://nodejs.org/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/U2kYq/hyKZ767QVk/RyECEM7m4Kyj2JnPkIHxak/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/DhZ4e/hyKZU0Y5CE/BTuClU2Gs4ZjkwhPysppdK/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256&quot;&gt;&lt;a href=&quot;https://nodejs.org/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/U2kYq/hyKZ767QVk/RyECEM7m4Kyj2JnPkIHxak/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/DhZ4e/hyKZU0Y5CE/BTuClU2Gs4ZjkwhPysppdK/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256');&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;Node.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;471&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2tVVM/btrax6WIbF8/HA10J7l4TI4syy4ZNbeBuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2tVVM/btrax6WIbF8/HA10J7l4TI4syy4ZNbeBuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2tVVM/btrax6WIbF8/HA10J7l4TI4syy4ZNbeBuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2tVVM%2Fbtrax6WIbF8%2FHA10J7l4TI4syy4ZNbeBuk%2Fimg.png&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;471&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어로 버전이 확인되면 정상 설치 완료된 상태 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627206794604&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;node --version
v15.3.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ windows 한글깨짐 관련 문제는 아래 url 을 참고하세요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jiniworld.me/84&quot;&gt;https://blog.jiniworld.me/84&lt;/a&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue-cli 를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627206839238&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i -g vue-cli&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;509&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cecMfT/btrapE8fy6p/FwkRk44dQJJXSekB3ioLX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cecMfT/btrapE8fy6p/FwkRk44dQJJXSekB3ioLX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cecMfT/btrapE8fy6p/FwkRk44dQJJXSekB3ioLX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcecMfT%2FbtrapE8fy6p%2FFwkRk44dQJJXSekB3ioLX1%2Fimg.png&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;509&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;초기 프로젝트를 생성 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627206871878&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vue init webpack vstart
cd vstart
npm run dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;프로젝트가 정상적으로 생성되면 아래와 같은 그림을 볼수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;597&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2KJ9o/btranXHtzPG/BgV3NwiPotYgPCpW6vNOkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2KJ9o/btranXHtzPG/BgV3NwiPotYgPCpW6vNOkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2KJ9o/btranXHtzPG/BgV3NwiPotYgPCpW6vNOkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2KJ9o%2FbtranXHtzPG%2FBgV3NwiPotYgPCpW6vNOkK%2Fimg.png&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;597&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Language/Vue.js</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/29</guid>
      <comments>https://goodsaem.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 25 Jul 2021 18:55:06 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-18/18] 메모앱 만들기 - frontend vue.js</title>
      <link>https://goodsaem.tistory.com/28</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;메모앱&amp;nbsp;만들기&amp;nbsp;-&amp;nbsp;frontend&amp;nbsp;vue.js&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws 에 프리티어 서버를 만들고 도메인을 발급받고 jdk 를 설치하고 springboot app 까지 만든이유는 결국 vue.js로 화면을 만들기 위함 입니다. 초간단 메모 app을 만들어 보겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;_1-화면디자인&quot; data-ke-size=&quot;size26&quot;&gt;화면디자인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들화면에 대해서 대략적인 화면설계를 해보았습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제목 내용에 해당하는 메모를 검색합니다.&lt;/li&gt;
&lt;li&gt;체크박스 체크된 메모를 선택하고 삭제버튼을 클릭하면 체크된 메모를 삭제합니다.&lt;/li&gt;
&lt;li&gt;등록 버튼을 클릭하면 우측의 등록 화면의 제목쪽으로 포커스를 이동합니다.&lt;/li&gt;
&lt;li&gt;등록 버튼을 클릭하면 메모가 등록되고 좌측에 메모가 하나 추가 됩니다.&lt;/li&gt;
&lt;li&gt;페이지 번호를 클릭하면 해당 페이지에 속하는 메모가 리스트업 됩니다.&lt;/li&gt;
&lt;li&gt;좌측 메모리스트에서 row를 클릭하면 우측에 제목과 내용이 보이고 수정모드로 변합니다.&lt;/li&gt;
&lt;li&gt;수정모드에서 수정 버튼을 클릭하면 메모가 수정되고 수정된 내용이 좌측 리스트에 반영됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;317&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEzO5h/btrawBicgAn/Hv1HTHPTBp8tvmcxVnPQl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEzO5h/btrawBicgAn/Hv1HTHPTBp8tvmcxVnPQl0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEzO5h/btrawBicgAn/Hv1HTHPTBp8tvmcxVnPQl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEzO5h%2FbtrawBicgAn%2FHv1HTHPTBp8tvmcxVnPQl0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;317&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&quot;_2-화면개발&quot; data-ke-size=&quot;size26&quot;&gt;화면개발&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;위 화면 설계서 되로 아래와 같이 화면을 개발해 보았습니다. 개발하다가 조금더 욕심이 생겨 전체 갯수도 표시하고 한페이지당 보여줄 갯수도 변경했습니다. 등록/검색 버튼을 클릭하여 app 이 제되로 동작하는 확인해 보세요. 참고로 아래 ui 컴포넌트는 element ui를 이용하여 개발 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;329&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djqK9d/btraoDhFKwb/884rF1Hqw6YqQ1XpKRfAvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djqK9d/btraoDhFKwb/884rF1Hqw6YqQ1XpKRfAvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djqK9d/btraoDhFKwb/884rF1Hqw6YqQ1XpKRfAvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjqK9d%2FbtraoDhFKwb%2F884rF1Hqw6YqQ1XpKRfAvk%2Fimg.png&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;329&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_3-backend-서비스-수정&quot; data-ke-size=&quot;size26&quot;&gt;backend 서비스 수정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;위 화면에서 사용하는 backend 관련 수정파일은 아래와 같습니다.&lt;span&gt;&amp;nbsp; 이전&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;&amp;nbsp;강좌에서 아래 4개 파일만 수정하시고 수정되면 동일한 요령으로 build 해서 서버에 배포 하고 서비스를 재시작 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627204012851&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
├── build.gradle
└── src
    └── main
        ├── java
        │ └── io
        │     └── github
        │         └── goodsaem
        │             └── api
        │                 ├── ApiApplication.java
        │                 ├── config
        │                 │ └── WebConfig.java
        │                 ├── controller
        │                 │ └── v1
        │                 │     └── MemoController.java
        │                 ├── entity
        │                 │ └── Memo.java
        │                 ├── repo
        │                 │ └── MemoJpaRepo.java
        │                 └── service
        │                     ├── IMemoService.java
        │                     └── MemoService.java
        └── resources
            ├── application.yml
            ├── banner.txt
            └── templates&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;_4-memocontroller-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoController.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모 검색 및 페이징 처리를 위해서 아래와 같이 /memo/search 컨트롤러를 추가했습니다. pageable jpa에서 지원해주는 객체로 페이징 처리를 위해 필요한 값 페이지당 보여줄 row 수와 현재페이지 정보를 넘겨주면 알아서 가져올 데이터량을 줄여 줍니다. 즉 query에 offset 과 limit 문장이 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈여겨 보아야 되는 부분은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다건 삭제&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부분입니다. 삭제 기능은 여러건을 넘겨서 일괄 삭제하는데 pathVariable 로 /spring/v1/memo/1,2,3 이런씩으로 넘기면 이를 List로 받아서 for문을 돌리면서 하나씩 삭제 하는 부분입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627204053626&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.controller.v1;

import io.github.goodsaem.api.entity.Memo;
import io.github.goodsaem.api.service.IMemoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequiredArgsConstructor
@RestController
@RequestMapping(value = &quot;/v1&quot;)
@Slf4j
public class MemoController {
    private final IMemoService iMemoService;

    @GetMapping(value = &quot;/memo/search&quot;)
    public Page&amp;lt;Memo&amp;gt; searchMemo(@RequestParam String keyword, @PageableDefault(size=3,sort=&quot;id&quot;) Pageable pageable) {
        return iMemoService.searchMemo(keyword,pageable);
    }

    @GetMapping(value = &quot;/memos&quot;)
    public List&amp;lt;Memo&amp;gt; readMemos() {
        return iMemoService.readMemos();
    }

    @GetMapping(value = &quot;/memo/{id}&quot;)
    public Memo readMemo(@PathVariable long id) {
        return iMemoService.readMemo(id);
    }

    @PostMapping(value = &quot;/memo&quot;)
    public Memo createMemo(@RequestBody Memo memo) {
        return iMemoService.createMemo(memo.getTitle(), memo.getContents());
    }

    @PutMapping(value = &quot;/memo&quot;)
    public Memo updateMemo(@RequestBody Memo memo) {
        return iMemoService.updateMemo(memo.getId(), memo.getTitle(), memo.getContents());
    }

    @DeleteMapping(value = &quot;/memo/{id}&quot;)
    public void deleteMemo(@PathVariable long id) {
        iMemoService.deleteMemo(id);
    }

    @DeleteMapping(value = &quot;/memos/{ids}&quot;)
    public void deleteMemos(@PathVariable(&quot;ids&quot;) List&amp;lt;Long&amp;gt; ids) {
        for(Long id:ids) {
            iMemoService.deleteMemo(id);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_5-memojparepo-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoJpaRepo.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;검색조건을 가져오는 부분을 아래와 같이 @Query를 통해서 작성해 보았습니다. 이렇게 진행하지 않고 세련되게 작성하는 방법도 있을것 같은데 아직 jpa에 익숙하지 않아 내공이 쌓이면 따로 정리하겠습니다. 화면에서 검색어 keyword가 전달되면 제목 및 내용에서 찾는 간단한 sql 입니다. 정렬은 가장 마지막에 등록한 메모가 보이게 했구요 countQuery도 같이 작성하여 페이징 처리시 참고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627204087266&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.repo;

import io.github.goodsaem.api.entity.Memo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface MemoJpaRepo extends JpaRepository&amp;lt;Memo, Long&amp;gt; {
    Page&amp;lt;Memo&amp;gt; findAll(Pageable pageable);

    @Query(
        value = &quot;SELECT m FROM Memo m WHERE m.title LIKE %:keyword% OR m.contents LIKE %:keyword% ORDER BY m.id DESC&quot;,
        countQuery = &quot;SELECT COUNT(m.id) FROM Memo m WHERE m.title LIKE %:keyword% OR m.contents LIKE %:keyword%&quot;
    )
    Page&amp;lt;Memo&amp;gt; findAllSearch(String keyword,Pageable pageable);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_6-imemoservice-java&quot; data-ke-size=&quot;size26&quot;&gt;IMemoService.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;메모 검색을 사용하기 위한 searchMemo 메소드를 추가했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627204119880&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.service;
import io.github.goodsaem.api.entity.Memo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
public interface IMemoService {
    List&amp;lt;Memo&amp;gt; readMemos();
    Page&amp;lt;Memo&amp;gt; searchMemo(String keyword, Pageable pageable);
    Memo readMemo(long id);
    Memo createMemo(String title,String contents);
    Memo updateMemo(long id,String title,String contents);
    void deleteMemo(long id);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_7-memoservice-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoService.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;메모 서비스에서 메모를 검색하는 부분을 구현했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627204167301&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.service;

import io.github.goodsaem.api.entity.Memo;
import io.github.goodsaem.api.repo.MemoJpaRepo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
public class MemoService implements IMemoService {
    private final MemoJpaRepo memoJpaRepo;

    @Override
    public List&amp;lt;Memo&amp;gt; readMemos() {
        return memoJpaRepo.findAll();
    }

    @Override
    public Page&amp;lt;Memo&amp;gt; searchMemo(String keyword, Pageable pageable) {
        Page&amp;lt;Memo&amp;gt; memo = memoJpaRepo.findAllSearch(keyword,pageable);
        return memo;
    }

    @Override
    public Memo readMemo(long id) {
        return memoJpaRepo.findById(id).orElse(null);
    }

    @Override
    public Memo createMemo(String title, String contents) {
        Memo memo = Memo.builder()
                .title(title)
                .contents(contents)
                .build();

        return memoJpaRepo.save(memo);
    }

    @Override
    public Memo updateMemo(long id, String title, String contents) {

        Memo memo = Memo.builder()
                .id(id)
                .title(title)
                .contents(contents)
                .build();

        return memoJpaRepo.save(memo);
    }

    @Override
    public void deleteMemo(long id) {
        memoJpaRepo.deleteById(id);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_8-frontend-source-description&quot; data-ke-size=&quot;size26&quot;&gt;FrontEnd 소스 상세설명&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;291&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IWaK6/btraoCXmBWo/fSkQ2g7nm9OpBUyq4Ca2VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IWaK6/btraoCXmBWo/fSkQ2g7nm9OpBUyq4Ca2VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IWaK6/btraoCXmBWo/fSkQ2g7nm9OpBUyq4Ca2VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIWaK6%2FbtraoCXmBWo%2FfSkQ2g7nm9OpBUyq4Ca2VK%2Fimg.png&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;291&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;memocreate-vue&quot; data-ke-size=&quot;size23&quot;&gt;MemoCreate.vue&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;위 화면중 우측 부분 내용으로 메모를 등록하는 폼은 다른 화면에서 사용할수 있을것 같아 별도의 컴포넌트로 분리했습니다. MemoCreate를 호출하는 부모 컨포넌트는 memo 모델을 넘겨줍니다. 그럼 memo 모델의 값을 복제해서 화면에서 활용하고 데이터 수정이 끝나고 저장 버튼을 누르면 상위 컴포넌트에게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;save&lt;/b&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;되었다고 알려(emit) 줍니다. 자세한 내용은 vue 강좌 때 다시 설명하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627204311426&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div style=&quot;margin-top: 10px&quot;&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot; align=&quot;center&quot;&amp;gt;
        제목
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;20&quot;&amp;gt;
        &amp;lt;el-input ref=&quot;title&quot; placeholder=&quot;메모 제목을 입력하세요&quot; v-model=&quot;memo.title&quot;&amp;gt;&amp;lt;/el-input&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row style=&quot;margin-top: 10px&quot;&amp;gt;
      &amp;lt;el-col :span=&quot;4&quot; align=&quot;center&quot;&amp;gt;
        내용
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;20&quot;&amp;gt;
        &amp;lt;el-input
            type=&quot;textarea&quot;
            :rows=&quot;7&quot;
            placeholder=&quot;Please input&quot;
            v-model=&quot;memo.contents&quot;&amp;gt;
        &amp;lt;/el-input&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
    &amp;lt;el-row style=&quot;margin-top: 10px&quot;&amp;gt;
      &amp;lt;el-col :span=&quot;24&quot; align=&quot;center&quot;&amp;gt;
        &amp;lt;el-button type=&quot;primary&quot; @click=&quot;saveMemo&quot;&amp;gt;저장&amp;lt;/el-button&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
&amp;lt;script&amp;gt;
export default {
  name: &quot;MemoCreate&quot;,
  props : {
    model : {
      type : Object,
    }
  },
  created() {
  },
  data() {
    return {
      memo : {
        id : -1,
        title : '',
        contents : '',
      },
    }
  },
  methods: {
    create() {
    },
    saveMemo() {
      this.$emit(&quot;save&quot;,this.memo)
    }
  },
  watch: {
    model(model)  {
      this.memo = Object.assign({},model);
      this.$refs.title.focus();
    }
  }
}
&amp;lt;/script&amp;gt;
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;exam5-vue&quot; data-ke-size=&quot;size23&quot;&gt;Exam5.vue&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;검색 및 결과를 출력하는 컴포넌트 입니다. 화면을 그리는 부분 빼고 실제 코딩은 많지 않습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627204390222&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div style=&quot;margin-top: 10px&quot;&amp;gt;
    &amp;lt;el-row&amp;gt;
      &amp;lt;el-col :span=&quot;12&quot;&amp;gt;
        &amp;lt;el-row&amp;gt;
          &amp;lt;el-col :span=&quot;4&quot; style=&quot;padding-right: 10px;&quot;&amp;gt;
            검색어 :
          &amp;lt;/el-col&amp;gt;
          &amp;lt;el-col :span=&quot;12&quot; style=&quot;padding-right: 10px;&quot;&amp;gt;
            &amp;lt;el-input @change=&quot;searchMemo&quot;  v-model=&quot;keyword&quot;&amp;gt;&amp;lt;/el-input&amp;gt;
          &amp;lt;/el-col&amp;gt;
          &amp;lt;el-col :span=&quot;8&quot; style=&quot;padding-left: 10px;&quot;&amp;gt;
            &amp;lt;el-button type=&quot;primary&quot; @click=&quot;searchMemo&quot;&amp;gt;메모검색&amp;lt;/el-button&amp;gt;
          &amp;lt;/el-col&amp;gt;
        &amp;lt;/el-row&amp;gt;
        &amp;lt;el-row style=&quot;margin-top: 10px&quot;&amp;gt;
          &amp;lt;el-col&amp;gt;
            전체 : {{ total }}
            &amp;lt;el-button type=&quot;primary&quot; @click=&quot;deleteMemo&quot;&amp;gt;삭제&amp;lt;/el-button&amp;gt;
            &amp;lt;el-button type=&quot;primary&quot; @click=&quot;createMemo&quot;&amp;gt;등록&amp;lt;/el-button&amp;gt;
            &amp;lt;el-select v-model=&quot;size&quot;
                       placeholder=&quot;한페이지당 row수&quot;
                       @change=&quot;searchMemo&quot;
            &amp;gt;
              &amp;lt;el-option
                  v-for=&quot;(row,index) in 100&quot;
                  :key=&quot;index&quot;
                  :label=&quot;row&quot;
                  :value=&quot;row&quot;&amp;gt;
              &amp;lt;/el-option&amp;gt;
            &amp;lt;/el-select&amp;gt;
          &amp;lt;/el-col&amp;gt;
        &amp;lt;/el-row&amp;gt;
        &amp;lt;el-row style=&quot;margin-top: 10px&quot;&amp;gt;
          &amp;lt;el-col&amp;gt;
            &amp;lt;el-row&amp;gt;
              &amp;lt;el-table
                  ref=&quot;table&quot;
                  v-if=&quot;gridData.length &amp;gt;= 0&quot;
                  @row-click=&quot;rowClick&quot;
                  :data=&quot;gridData&quot;
                  style=&quot;width: 100%&quot;&amp;gt;
                &amp;lt;el-table-column
                    type=&quot;selection&quot;
                    align=&quot;center&quot;
                    width=&quot;55&quot;&amp;gt;
                &amp;lt;/el-table-column&amp;gt;
                &amp;lt;el-table-column
                    prop=&quot;id&quot;
                    align=&quot;center&quot;
                    label=&quot;번호&quot;
                    width=&quot;50&quot;&amp;gt;
                &amp;lt;/el-table-column&amp;gt;
                &amp;lt;el-table-column
                    prop=&quot;title&quot;
                    label=&quot;제목&quot;
                    header-align=&quot;center&quot;
                    style=&quot;width: 95%&quot;&amp;gt;
                &amp;lt;/el-table-column&amp;gt;
              &amp;lt;/el-table&amp;gt;
            &amp;lt;/el-row&amp;gt;
            &amp;lt;el-row style=&quot;margin-top: 10px&quot;&amp;gt;
              &amp;lt;el-col&amp;gt;
                &amp;lt;el-pagination
                    background
                    layout=&quot;prev, pager, next&quot;
                    @current-change=&quot;chgPage&quot;
                    :current-page=&quot;page+1&quot;
                    :page-size=&quot;size&quot;
                    :total=&quot;total&quot;&amp;gt;
                &amp;lt;/el-pagination&amp;gt;
              &amp;lt;/el-col&amp;gt;
            &amp;lt;/el-row&amp;gt;
          &amp;lt;/el-col&amp;gt;
        &amp;lt;/el-row&amp;gt;
      &amp;lt;/el-col&amp;gt;
      &amp;lt;el-col :span=&quot;12&quot; style=&quot;border-left: 1px solid #efefef;&quot;&amp;gt;
        &amp;lt;memo-create :model=&quot;memo&quot; @save=&quot;saveMemo&quot;/&amp;gt;
      &amp;lt;/el-col&amp;gt;
    &amp;lt;/el-row&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;
&amp;lt;script&amp;gt;
const URL = &quot;https://goodsaem.ml/spring&quot;;
//const URL = &quot;http://localhost:9090/spring&quot;;
import MemoCreate from &quot;./MemoCreate&quot;;

export default {
  name: &quot;Exam5&quot;,
  created() {
  },
  components: {
    MemoCreate
  },
  data() {
    return {
      page: 0,
      size : 3,
      total : 0,
      keyword: '',
      memo: {
        title: '',
        contents: '',
      },
      gridData: [],
    }
  },
  methods: {
    create() {
    },
    rowClick(v) {
      this.memo = v;
    },
    chgPage(page) {
      this.page=page-1
      this.searchMemo();
    },
    saveMemo(memo) {
      if (memo.id === -1) {
        this.$http.post(URL + '/v1/memo', memo).then((response) =&amp;gt; {
          this.searchMemo();
        })
      } else {
        this.$http.put(URL + '/v1/memo', memo).then((response) =&amp;gt; {
          this.searchMemo();
        })
      }
    },
    createMemo() {
      this.memo = Object.assign({
        id : -1,
        title : '',
        contents : '',
      })
    },
    deleteMemo() {
      let ids = &quot;&quot;;
      this.$refs.table.selection.map(r =&amp;gt; ids += r.id + &quot;,&quot;);
      ids = ids.substring(0,ids.length-1);

      if(this.$refs.table.selection.length &amp;gt; 0) {
        this.$http.delete(URL + '/v1/memos/' + ids)
            .then((response) =&amp;gt; {
              this.$message(&quot;정상적으로 삭제되었습니다.&quot;);
              this.searchMemo();
            })
      }
    },
    searchMemo() {
      this.$http.get(URL + '/v1/memo/search', {
        params: {
          keyword : this.keyword,
          page: this.page,
          size: this.size,
        }
      })
      .then((response) =&amp;gt; {
        console.log(response)
        this.gridData = response.data.data.content;
        this.total = response.data.totalElements;
      })
    }
  }
}
&amp;lt;/script&amp;gt;
&amp;lt;style scoped&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;마치며&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS에 프리티어 서버를 셋업하고 spring boot 로 백엔드를 만들고 fontend 는 vue.js 를통해서 앱을 만들어 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;긴글 읽어 주셔서 감사합니다.&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/28</guid>
      <comments>https://goodsaem.tistory.com/28#entry28comment</comments>
      <pubDate>Sun, 25 Jul 2021 18:15:09 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-17/18] 메모앱 만들기 - backend 서비스 만들기</title>
      <link>https://goodsaem.tistory.com/27</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;메모앱 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;지금까지 구축한 aws 서버위에 간단한 메모 application을 만들어서 배포 하겠습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-테이블-생성-및-초기데이터-적재&quot; data-ke-size=&quot;size26&quot;&gt;테이블 생성 및 초기데이터 적재&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블을 생성하고 초기 데이터를 인서트 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 스크립트는 aws 의 mariadb 에서 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 메모 테이블을 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627200923903&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE `memo` (
  `id` bigint(20) NOT NULL,
  `contents` varchar(4000) NOT NULL,
  `title` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;자동증가 시퀀스 테이블을 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201094386&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE `hibernate_sequence` (
  `next_val` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;초기 데이터를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201141644&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO memo (id, contents, title) VALUES(1, '내용1', '제목1');
INSERT INTO memo (id, contents, title) VALUES(2, '내용2', '제목2');
INSERT INTO memo (id, contents, title) VALUES(3, '내용3', '제목3');

INSERT INTO hibernate_sequence (next_val) VALUES(4);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_2-앱구조&quot; data-ke-size=&quot;size26&quot;&gt;앱구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;springboot application 구조는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201220361&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
├── build.gradle
└── src
    └── main
        ├── java
        │ └── io
        │     └── github
        │         └── goodsaem
        │             └── api
        │                 ├── ApiApplication.java
        │                 ├── config
        │                 │ └── WebConfig.java
        │                 ├── controller
        │                 │ └── v1
        │                 │     └── MemoController.java
        │                 ├── entity
        │                 │ └── Memo.java
        │                 ├── repo
        │                 │ └── MemoJpaRepo.java
        │                 └── service
        │                     ├── IMemoService.java
        │                     └── MemoService.java
        └── resources
            ├── application.yml
            ├── banner.txt
            └── templates&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_3-build-gradle&quot; data-ke-size=&quot;size26&quot;&gt;build.gradle&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;특별한 내용은 없고 springboot 2.4.4 버전 사용 및 mariadb 와 jpa 라이브러리 추가및 lombok 플러그인을 추가했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201256150&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;buildscript {
	ext {
		springBootVersion = '2.4.4'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath(
				&quot;org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}&quot;)
	}
}

apply plugin: 'org.springframework.boot'
apply plugin: 'war'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'

group = 'io.github.goodsaem'
version = '1.1'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-autoconfigure'
	implementation(&quot;org.mariadb.jdbc:mariadb-java-client&quot;)

	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
	useJUnitPlatform()
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_4-apiapplication-java&quot; data-ke-size=&quot;size26&quot;&gt;ApiApplication.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;springboot 시작 파일 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201299115&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApiApplication {

	public static void main(String[] args) {
		SpringApplication.run(ApiApplication.class, args);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_5-webconfig-java&quot; data-ke-size=&quot;size26&quot;&gt;WebConfig.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;CORS 설정 파일입니다. 허용할 도메인에 대해서 아래와 같이 정의 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201332612&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping(&quot;/**&quot;)
                .allowedOrigins(&quot;https://goodsaem.github.io&quot;,&quot;http://localhost:8080&quot;)
                .allowedMethods(&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;, &quot;PATCH&quot;, &quot;DELETE&quot;,&quot;OPTIONS&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_6-memocontroller-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoController.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;restapi controller 입니다. 메모의 crud url 을 호출하면 해당 요청에 맞는 서비스를 호출하여 db 작업을 수행합니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201369027&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.controller.v1;

import io.github.goodsaem.api.entity.Memo;
import io.github.goodsaem.api.service.IMemoService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequiredArgsConstructor
@RestController
@RequestMapping(value = &quot;/v1&quot;)
public class MemoController {
    private final IMemoService iMemoService;

    @GetMapping(value = &quot;/memos&quot;)
    public List&amp;lt;Memo&amp;gt; readMemos() {
        return iMemoService.readMemos();
    }

    @GetMapping(value = &quot;/memo/{id}&quot;)
    public Memo readMemo( @PathVariable long id) {
        return iMemoService.readMemo(id);
    }

    @PostMapping(value = &quot;/memo&quot;)
    public Memo createMemo(@RequestParam String title,String contents) {
        return iMemoService.createMemo(title,contents);
    }

    @PutMapping(value = &quot;/memo&quot;)
    public Memo updateMemo(@RequestParam long id, @RequestParam String title,String contents) {
        return iMemoService.updateMemo(id,title,contents);
    }

    @DeleteMapping(value=&quot;/memo/{id}&quot;)
    public void deleteMemo(@PathVariable long id) {
        iMemoService.deleteMemo(id);
    }

    @DeleteMapping(value=&quot;/memos&quot;)
    public void deleteMemos() {
        iMemoService.deleteMemos();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_7-memo-java&quot; data-ke-size=&quot;size26&quot;&gt;Memo.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;memo entity 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201398557&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.entity;

import lombok.*;
import javax.persistence.*;

@Builder
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name=&quot;memo&quot;)
public class Memo {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false, length = 30)
    private String title;

    @Column(nullable = false, length = 4000)
    private String contents;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_8-memojparepo-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoJpaRepo.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;jpa를 사용하기 위해 jparepository를 상속 받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201427530&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.repo;

import io.github.goodsaem.api.entity.Memo;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MemoJpaRepo extends JpaRepository&amp;lt;Memo, Long&amp;gt; {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_9-imemoservice-java&quot; data-ke-size=&quot;size26&quot;&gt;IMemoService.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서비스 인터페이스 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201457501&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.service;
import io.github.goodsaem.api.entity.Memo;
import java.util.List;
public interface IMemoService {
    List&amp;lt;Memo&amp;gt; readMemos();
    Memo readMemo(long id);
    Memo createMemo(String title,String contents);
    Memo updateMemo(long id,String title,String contents);
    void deleteMemo(long id);
    void deleteMemos();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_10-memoservice-java&quot; data-ke-size=&quot;size26&quot;&gt;MemoService.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;jpaRepo로 실제 crud 작업을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201505812&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package io.github.goodsaem.api.service;

import io.github.goodsaem.api.entity.Memo;
import io.github.goodsaem.api.repo.MemoJpaRepo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
public class MemoService implements IMemoService {
    private final MemoJpaRepo memoJpaRepo;

    @Override
    public List&amp;lt;Memo&amp;gt; readMemos() {
        return memoJpaRepo.findAll();
    }

    @Override
    public Memo readMemo(long id) {
        return memoJpaRepo.findById(id).orElse(null);
    }

    @Override
    public Memo createMemo(String title, String contents) {
        Memo memo = Memo.builder()
                .title(title)
                .contents(contents)
                .build();

        return memoJpaRepo.save(memo);
    }

    @Override
    public Memo updateMemo(long id, String title, String contents) {

        Memo memo = Memo.builder()
                .id(id)
                .title(title)
                .contents(contents)
                .build();

        return memoJpaRepo.save(memo);
    }

    @Override
    public void deleteMemo(long id) {
        memoJpaRepo.deleteById(id);
    }

    @Override
    public void deleteMemos() {
        memoJpaRepo.deleteAll();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_11-application-yml&quot; data-ke-size=&quot;size26&quot;&gt;application.yml&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;appplication 설정 내용으로 mariadb 연결정보와 서비스 포트 context path 설정정보를 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201547385&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server:
  port: 9090
  servlet:
    context-path: /spring
    session:
      timeout: 60
      tomcat:
        uri-encoding: UTF-8

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/goodsaem?useSSL=false&amp;amp;serverTimezone=KST
    username: goodsaem
    password: xxxxxxxxxx
  jpa:
    database-platform: org.hibernate.dialect.MariaDBDialect
    properties.hibernate.hbm2ddl.auto: none
    showSql: true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_12-banner-txt&quot; data-ke-size=&quot;size26&quot;&gt;banner.txt&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;spring boot 시작시 사용할 배너 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;※ 배너는 &lt;a href=&quot;http://patorjk.com/software/taag/#p=display&amp;amp;f=Graffiti&amp;amp;t=Type%20Something%20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://patorjk.com/software/taag/#p=display&amp;amp;f=Graffiti&amp;amp;t=Type%20Something%20&lt;/a&gt; 여기에서 만들수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201582929&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ██████╗  ██████╗  ██████╗ ██████╗ ███████╗ █████╗ ███████╗███╗   ███╗
██╔════╝ ██╔═══██╗██╔═══██╗██╔══██╗██╔════╝██╔══██╗██╔════╝████╗ ████║
██║  ███╗██║   ██║██║   ██║██║  ██║███████╗███████║█████╗  ██╔████╔██║
██║   ██║██║   ██║██║   ██║██║  ██║╚════██║██╔══██║██╔══╝  ██║╚██╔╝██║
╚██████╔╝╚██████╔╝╚██████╔╝██████╔╝███████║██║  ██║███████╗██║ ╚═╝ ██║
 ╚═════╝  ╚═════╝  ╚═════╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝╚══════╝╚═╝     ╚═╝
:: Spring Boot ::                         ver : ${spring-boot.version}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_13-api-1-1-war-파일-만들기&quot; data-ke-size=&quot;size26&quot;&gt;api-1.1.war 파일 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;프로젝트 시작 home 디렉토리에서 아래 명령어를 입력하여 war 파일을 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201671251&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sh gradlew build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_14-war-file-업로드&quot; data-ke-size=&quot;size26&quot;&gt;war file 업로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;aws 서버에 api-1.1.war 파일을 업로드 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_15-springboot-재시작&quot; data-ke-size=&quot;size26&quot;&gt;springboot 재시작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws 서버에 접속한후 아래 명령어를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 중지&lt;/p&gt;
&lt;pre id=&quot;code_1627201732534&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ ./stop.sh
=====spring is running at 5808 Shutdown spring now&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서비스 시작&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201754709&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ ./start.sh;./log.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;시작 로그&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201782624&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ██████╗  ██████╗  ██████╗ ██████╗ ███████╗ █████╗ ███████╗███╗   ███╗
██╔════╝ ██╔═══██╗██╔═══██╗██╔══██╗██╔════╝██╔══██╗██╔════╝████╗ ████║
██║  ███╗██║   ██║██║   ██║██║  ██║███████╗███████║█████╗  ██╔████╔██║
██║   ██║██║   ██║██║   ██║██║  ██║╚════██║██╔══██║██╔══╝  ██║╚██╔╝██║
╚██████╔╝╚██████╔╝╚██████╔╝██████╔╝███████║██║  ██║███████╗██║ ╚═╝ ██║
 ╚═════╝  ╚═════╝  ╚═════╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝╚══════╝╚═╝     ╚═╝
:: Spring Boot ::                         ver : 2.4.4
2021-03-27 17:10:46.869  INFO 7734 --- [           main] io.github.goodsaem.api.ApiApplication    : Starting ApiApplication using Java 1.8.0_282 on goodsaem with PID 7734 (/home/ubuntu/api-1.1.war started by ubuntu in /home/ubuntu)
2021-03-27 17:10:46.874  INFO 7734 --- [           main] io.github.goodsaem.api.ApiApplication    : No active profile set, falling back to default profiles: default
2021-03-27 17:10:48.714  INFO 7734 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-03-27 17:10:48.852  INFO 7734 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 121 ms. Found 1 JPA repository interfaces.
2021-03-27 17:10:50.415  INFO 7734 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2021-03-27 17:10:50.442  INFO 7734 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-27 17:10:50.446  INFO 7734 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.44]
2021-03-27 17:10:51.931  INFO 7734 --- [           main] o.a.c.c.C.[.[localhost].[/spring]        : Initializing Spring embedded WebApplicationContext
2021-03-27 17:10:51.932  INFO 7734 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4908 ms
2021-03-27 17:10:52.874  INFO 7734 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-03-27 17:10:52.986  INFO 7734 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.29.Final
2021-03-27 17:10:53.296  INFO 7734 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2021-03-27 17:10:53.661  INFO 7734 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-03-27 17:10:53.804  INFO 7734 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-03-27 17:10:53.848  INFO 7734 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MariaDBDialect
2021-03-27 17:10:54.767  INFO 7734 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-03-27 17:10:54.779  INFO 7734 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2021-03-27 17:10:55.548  WARN 7734 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2021-03-27 17:10:55.822  INFO 7734 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-27 17:10:56.395  INFO 7734 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path '/spring'
2021-03-27 17:10:56.413  INFO 7734 --- [           main] io.github.goodsaem.api.ApiApplication    : Started ApiApplication in 10.795 seconds (JVM running for 11.987)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_16-웹브라우저에서-확인&quot; data-ke-size=&quot;size26&quot;&gt;웹브라우저에서 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://goodsaem.ml/spring/v1/memos&quot;&gt;https://goodsaem.ml/spring/v1/memos&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;url 접근했을때 아래와 같은 문자열이 출력되면 정상입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627201824583&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[
  {
    &quot;id&quot;: 1,
    &quot;title&quot;: &quot;제목1&quot;,
    &quot;contents&quot;: &quot;내용1&quot;
  },
  {
    &quot;id&quot;: 2,
    &quot;title&quot;: &quot;제목2&quot;,
    &quot;contents&quot;: &quot;내용2&quot;
  },
  {
    &quot;id&quot;: 3,
    &quot;title&quot;: &quot;제목3&quot;,
    &quot;contents&quot;: &quot;내용3&quot;
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_17-전체소스-다운로드&quot; data-ke-size=&quot;size26&quot;&gt;전체소스 다운로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;지금까지 만든 소스는 아래 링크를 통해서 다운로드 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ojcDU/btraoBKSwWE/UDlBwlspawLPKk2HN3al21/api2.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;api2.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.13MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>알 수 없는 사용자</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/27</guid>
      <comments>https://goodsaem.tistory.com/27#entry27comment</comments>
      <pubDate>Sun, 25 Jul 2021 17:31:10 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-16/18] SpringBoot 백그라운드에서 실행하기</title>
      <link>https://goodsaem.tistory.com/26</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;SpringBoot&amp;nbsp;백그라운드에서&amp;nbsp;실행하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어로 샘플 프로젝트를 실행하면 foreground 로 명령어가 실행됩니다. ctrl + c 키를 눌러서 종료하면 프로세스가 종료됩니다. 명령어를 실행하고 나서 로그아웃을 하더라도 명령어가 계속 실행된 상태로 있을려면 background 로 명령어가 실행되어야 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627198934597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java -jar hello-0.0.1-SNAPSHOT.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;background로 실행하는 프로세스를 만들기 위해 아래와 같이 start.sh 파일을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627198971997&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ vi start.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;nohup을 사용하여 출력을 nohup.out으로 보내고 명령어를 실행한다음 &amp;amp; 같이 입력하여 백그라운드에서 실행 되게 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199000988&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nohup java -jar hello*.war &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;그리고 나서 start.sh 실행 권한을 부여 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199029708&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ chmod +x start.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;stop 스크립트를 작성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199056146&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ vi stop.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래와 같이 입력합니다. 프로세스를 찾아서 kill 하는 명령어 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199082433&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/sh

PID=`ps -ef | grep java | grep war | awk '{print $2}'`
if [ -n &quot;$PID&quot; ]
then
  echo &quot;=====spring is running at&quot; $PID &quot;Shutdown spring now&quot;
  kill -9 $PID
else
  echo &quot;=====spring isn't running=====&quot;
fi&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장하고 종료합니다.&amp;nbsp;log 출력 스크립트를 작성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627199133094&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ vi log.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래와 같이 입력합니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199205885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;tail -f nohup.out&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;stop.sh 와 log.sh 각각 실행권한을 부여합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199243612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ chmod +X start.sh
ubuntu@goodsaem:~$ chmod +X log.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서비스를 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199264362&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ ./start.sh;./log.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래와 같은 로그 확인이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199299006&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.4)

2021-03-27 02:23:27.115  INFO 3532 --- [           main] g.github.io.hello.HelloApplication       : Starting HelloApplication using Java 1.8.0_282 on goodsaem with PID 3532 (/home/ubuntu/hello-0.0.1-SNAPSHOT.war started by ubuntu in /home/ubuntu)
2021-03-27 02:23:27.124  INFO 3532 --- [           main] g.github.io.hello.HelloApplication       : No active profile set, falling back to default profiles: default
2021-03-27 02:23:29.570  INFO 3532 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2021-03-27 02:23:29.600  INFO 3532 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-27 02:23:29.606  INFO 3532 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.44]
2021-03-27 02:23:30.416  INFO 3532 --- [           main] o.a.c.c.C.[.[localhost].[/spring]        : Initializing Spring embedded WebApplicationContext
2021-03-27 02:23:30.416  INFO 3532 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3156 ms
2021-03-27 02:23:31.421  INFO 3532 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-27 02:23:31.886  INFO 3532 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path '/spring'
2021-03-27 02:23:31.908  INFO 3532 --- [           main] g.github.io.hello.HelloApplication       : Started HelloApplication in 6.02 seconds (JVM running for 6.993)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;이제 ctrl + c 를 해도 프로세스가 종료되지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;서비스 종료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 서비스를 종료 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627199352614&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ ./stop.sh;./log.sh
=====spring is running at 3532 Shutdown spring now&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;다시 서비스를 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627199374180&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ ./start.sh;./log.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_6-테스트&quot; data-ke-size=&quot;size26&quot;&gt;테스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;이제 실제로 https 로 접속을 시도해 보겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://goodsaem.ml/spring/goodsaem/string&quot;&gt;http://goodsaem.ml/spring/goodsaem/string&lt;/a&gt;&lt;a href=&quot;http://goodsaem.ml/spring/goodsaem/string&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(opens new window) &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;https 프로토콜을 이용하여 설정한 도메인으로 접속하니 아래 그림과 같이 정상적으로 화면이 나왔습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QyKBd/btranzUpnXv/AYoncWnWLMUDtoEJJzhk20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QyKBd/btranzUpnXv/AYoncWnWLMUDtoEJJzhk20/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QyKBd/btranzUpnXv/AYoncWnWLMUDtoEJJzhk20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQyKBd%2FbtranzUpnXv%2FAYoncWnWLMUDtoEJJzhk20%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/26</guid>
      <comments>https://goodsaem.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 25 Jul 2021 16:50:20 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-15/18] SSL 사이트 점검하기</title>
      <link>https://goodsaem.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SSL&amp;nbsp;사이트&amp;nbsp;점검하기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;SSL이 제되로 생성되었는지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.ssllabs.com/ssltest/analyze.html&quot;&gt;https://www.ssllabs.com/ssltest/analyze.html&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;사이트에 접속하여 아래와 같이 도메인을 입력하고 점검을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;588&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blXsuq/btranW2NBto/zBRix5XIrfCLzpbVBIbkHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blXsuq/btranW2NBto/zBRix5XIrfCLzpbVBIbkHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blXsuq/btranW2NBto/zBRix5XIrfCLzpbVBIbkHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblXsuq%2FbtranW2NBto%2FzBRix5XIrfCLzpbVBIbkHk%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;588&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;468&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/55MTo/btrao7W5bg1/cqPNmiqYEtsZPJFrKKwEuK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/55MTo/btrao7W5bg1/cqPNmiqYEtsZPJFrKKwEuK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/55MTo/btrao7W5bg1/cqPNmiqYEtsZPJFrKKwEuK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F55MTo%2Fbtrao7W5bg1%2FcqPNmiqYEtsZPJFrKKwEuK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;468&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;A 라고&amp;nbsp; 표시되면 설정 상태가 정상입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/25</guid>
      <comments>https://goodsaem.tistory.com/25#entry25comment</comments>
      <pubDate>Sun, 25 Jul 2021 16:35:59 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-14/18] 무료로 SSL 인증 받기</title>
      <link>https://goodsaem.tistory.com/24</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;무료로&amp;nbsp;SSL&amp;nbsp;인증&amp;nbsp;받기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 대부분은 사이트는 SSL 인증을 요구합니다. &lt;a href=&quot;http://vue.js&quot;&gt;vue.js&lt;/a&gt; 공부를 위해 만든 &lt;a href=&quot;https://goodsaem.github.io&quot;&gt;https://goodsaem.github.io&lt;/a&gt; 사이트 역시 https로 동작하며 만약 여기에서 다른 사이트 데이터를 가져올려고 하면 https로만 통신이 됩니다. http로는 통신이 되지 않습니다. 그래서 ssl 인증 받는 부분을 추가 적용 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Let's Encrypt 와 Certbot을 이용한 ssl 무료 인증서를 발급 받는 방법에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_1-diffie-hellman-키-생성&quot; data-ke-size=&quot;size26&quot;&gt;Diffie-Hellman 키 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;https 인증서를 받기 위해서는 키가 필요합니다. 이 키 생성은 디피와 헬만이 1976년도에 발표한 비밀키 교환 방식의 알고리즘을 이용하여 생성합니다.이 알고리즘을 이용하여 4096 bit의 키를 생성하겠습니다. 아래 명령어로 키를 생성하는데 대략 10분정도 소요 되었습니다. 이키를 이용해서 https에서 비밀키를 교환하여 안정한 https 통신을 할수 있으므로 반드시 진행해야 되는 사항입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627196588131&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo openssl dhparam -out /etc/nginx/conf.d/ssl-dhparams.pem 4096&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1627196605957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enerating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
...............................................................&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-let-s-encrypt-certbot-무료인증&quot; data-ke-size=&quot;size26&quot;&gt;Let's Encrypt + Certbot 무료인증&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Let's Encrypt 는 사용자에게 무료로 SSL/TLS 인증서를 발급해 주는 기관 입니다. 한번 발급 받으면 &lt;b&gt;90일간 사용이 가능하며 만료 30일전에 메일로 내용을 통보하면 그때 다시 갱신이 가능&lt;/b&gt;합니다. 인증서 발급은 certbot certbot-auto 를 이용하여 발급 및 갱신합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;certbot 등록을 위해 repository 등록을 진행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627196647695&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt-get update
ubuntu@goodsaem:~$ sudo apt-get install software-properties-common
ubuntu@goodsaem:~$ sudo add-apt-repository universe
ubuntu@goodsaem:~$ sudo add-apt-repository ppa:certbot/certbot
ubuntu@goodsaem:~$ sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;certbot을 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196670779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt-get install certbot&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;certbot nginx 플러그인을 설치 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196689533&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt-get install python-certbot-nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;nginx에 서버 이름을 변경하기 위해 아래와 같이 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196708647&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo vi /etc/nginx/conf.d/default.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서버 네임을 freenom에서 발급받은 도메인으로 지정해 줍니다. 아래 server_name goodsaem.ml; 부분이 추가 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196757483&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen       80;
    server_name  goodsaem.ml;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /spring {
        proxy_pass http://localhost:9090/spring;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;이제 아래 certbot 명령어를 통해서 ssl 인증서를 발급받습니다. 인증서 발급시 사용할 admin email 주소와 이용약관 동의 옵션을 지정하여 인증서 발급을 받겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196788881&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo certbot --nginx --email goodsaem@protonmail.com --agree-tos&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 명령어를 입력하면 아래와 같은 형태로 진행되는데요 중요한 부분만 설명하겠습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;6&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라인에 추가할 https 도메인이 보입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;9&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라인에서 엔터를 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;24&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라인에서 2을 입력합니다. (http로 요청이 들어오면 https 로 redirect 하겠다는 의미 입니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627196815138&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: goodsaem.ml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for goodsaem.ml
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/default.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://goodsaem.ml

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=goodsaem.ml
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/goodsaem.ml/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/goodsaem.ml/privkey.pem
   Your cert will expire on 2021-06-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the &quot;certonly&quot; option. To non-interactively renew *all* of
   your certificates, run &quot;certbot renew&quot;
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;제되로 인증서 발급이 되었는지 확인해 보겠습니다. domain에 보시면 goodsaem.ml 도메인이 등록되어 있습니다. 또한 9,10 라인에 fullchain.pem 키와 privkey.pem 파일이 정상 생성되었음을 확인할수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196840517&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: goodsaem.ml
    Domains: goodsaem.ml
    Expiry Date: 2021-06-24 14:32:16+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/goodsaem.ml/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/goodsaem.ml/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nginx에 ssl 관련 설정이 등록되었는지 default.conf 내용을 확인해 보겠습니다. 51번라인부터 67번 라인까지 ssl 관련 설정이 자동으로 추가되었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627196875043&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    server_name  goodsaem.ml;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /spring {
        proxy_pass http://localhost:9090/spring;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/goodsaem.ml/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/goodsaem.ml/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = goodsaem.ml) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen       80;
    server_name  goodsaem.ml;
    return 404; # managed by Certbot


}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;letsencrypt 에 있는 Diffie-Hellman Key 를 아래와 같은 이름으로 백업합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196899624&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ cd /etc/letsencrypt/
ubuntu@goodsaem:~$  sudo mv ssl-dhparams.pem  ssl-dhparams.pem.backup&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;생성한 키 파일을 /etc/letsencrypt 로 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196915678&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$  sudo cp -rp /etc/nginx/conf.d/ssl-dhparams.pem /etc/letsencrypt/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;nginx 를 재시작 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627196947774&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo systemctl restart nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_3-http-요청-https-로-자동포워딩&quot; data-ke-size=&quot;size26&quot;&gt;http 요청 https 로 자동포워딩&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://goodsaem.ml/&quot;&gt;http://goodsaem.ml/&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(opens new window)&lt;/span&gt;&lt;/span&gt;로 접속하면 &lt;a href=&quot;https://goodsaem.ml/&quot;&gt;https://goodsaem.ml/&lt;/a&gt; 자동 포워딩되는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 setup 되었다면 아래와 같은 화면을 확인할수 있습니다.&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 widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxxPMR/btrat3lPrTb/S232KlZSHIlxBIsZNNh4DK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxxPMR/btrat3lPrTb/S232KlZSHIlxBIsZNNh4DK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxxPMR/btrat3lPrTb/S232KlZSHIlxBIsZNNh4DK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxxPMR%2Fbtrat3lPrTb%2FS232KlZSHIlxBIsZNNh4DK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;334&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/24</guid>
      <comments>https://goodsaem.tistory.com/24#entry24comment</comments>
      <pubDate>Sun, 25 Jul 2021 16:09:58 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-13/18] Nginx Springboot 연동</title>
      <link>https://goodsaem.tistory.com/23</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Nginx&amp;nbsp;Springboot&amp;nbsp;연동&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://goodsaem.ml/spring&quot;&gt;http://goodsaem.ml/spring &lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;로 접속하면 springboot가 응답하도록 nginx 설정을 변경하겠습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-nginx-설정파일-수정&quot; data-ke-size=&quot;size26&quot;&gt;nginx 설정파일 수정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어로 nginx 설정 파일을 수정 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195832355&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo vi /etc/nginx/conf.d/default.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래와 같이 /spring 요청이 오면 14~17 라인 설정에 따라 springboot로 보내는 설정입니다. 그외 전체 nginx 설정이 있으니 참고 하시기 바랍니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195873070&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /spring {
        proxy_pass http://localhost:9090/spring;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_3-springboot-시작&quot; data-ke-size=&quot;size26&quot;&gt;Springboot 시작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;업로드한 hello*.war 파일을 아래 명령어로 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195932356&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ java -jar hello-0.0.1-SNAPSHOT.war

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.4)

2021-03-26 23:47:09.084  INFO 819 --- [           main] g.github.io.hello.HelloApplication       : Starting HelloApplication using Java 1.8.0_282 on goodsaem with PID 819 (/home/ubuntu/hello-0.0.1-SNAPSHOT.war started by ubuntu in /home/ubuntu)
2021-03-26 23:47:09.095  INFO 819 --- [           main] g.github.io.hello.HelloApplication       : No active profile set, falling back to default profiles: default
2021-03-26 23:47:11.586  INFO 819 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2021-03-26 23:47:11.617  INFO 819 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-26 23:47:11.617  INFO 819 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.44]
2021-03-26 23:47:12.505  INFO 819 --- [           main] o.a.c.c.C.[.[localhost].[/spring]        : Initializing Spring embedded WebApplicationContext
2021-03-26 23:47:12.505  INFO 819 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3273 ms
2021-03-26 23:47:13.495  INFO 819 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-26 23:47:13.927  INFO 819 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path '/spring'
2021-03-26 23:47:13.955  INFO 819 --- [           main] g.github.io.hello.HelloApplication       : Started HelloApplication in 6.085 seconds (JVM running for 7.154)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_4-springboot-테스트&quot; data-ke-size=&quot;size26&quot;&gt;springboot 테스트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://goodsaem.ml/spring/goodsaem/string&quot;&gt;http://goodsaem.ml/spring/goodsaem/string &lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;url 로 접속하여 아래와 같은 화면이 출력되면 nginx + springboot 연동 성공입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627195979156&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;안녕하세요 좋은 선생님 goodsaem! 입니다.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/23</guid>
      <comments>https://goodsaem.tistory.com/23#entry23comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:53:07 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-12/18] Springboot 프로젝트 생성</title>
      <link>https://goodsaem.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Springboot&amp;nbsp;프로젝트&amp;nbsp;생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws freetier 리눅스 서버 구축 목적은 restapi 서버 역할입니다. 간단한 springboot 프로젝트를 생성 build 하여 war 파일을 만든다음 war 파일을 ec2 서버에 업로드 하는 부분까지 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-프로젝트-파일생성&quot; data-ke-size=&quot;size26&quot;&gt;프로젝트 파일생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://start.spring.io/&quot;&gt;https://start.spring.io/&lt;/a&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;사이트에 접속하여 아래와 같이 입력합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;project 는 Gradle Project&lt;/li&gt;
&lt;li&gt;Language 는 Java&lt;/li&gt;
&lt;li&gt;Spring Boot 는 2.4.4&lt;/li&gt;
&lt;li&gt;Group 은 goodsaem.github.io&lt;/li&gt;
&lt;li&gt;Artifact 는 hello&lt;/li&gt;
&lt;li&gt;Name 은 hello&lt;/li&gt;
&lt;li&gt;Packaging 은 War 선택&lt;/li&gt;
&lt;li&gt;Java 는 8 버전을 선택합니다.&lt;/li&gt;
&lt;li&gt;그리고 나서 Generate 버튼을 클릭합니다.&lt;/li&gt;
&lt;li&gt;파일을 다운로드 받고 적당한 위치에 압축을 푼후 해당 디렉토리로 이동합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1053&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8j1X4/btranF7sPlb/XUBNVaOqDKafItzC4kxCkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8j1X4/btranF7sPlb/XUBNVaOqDKafItzC4kxCkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8j1X4/btranF7sPlb/XUBNVaOqDKafItzC4kxCkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8j1X4%2FbtranF7sPlb%2FXUBNVaOqDKafItzC4kxCkk%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1053&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-디렉토리-구&quot; data-ke-size=&quot;size26&quot;&gt;디렉토리 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;압축을 풀고 나서 해당 디렉토리 구조를 확인하면 아래와 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;HelloController.java. 와&amp;nbsp; application.yml 파일을 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195439676&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
├── build.gradle
└── src
    ├── main
    │  ├── java
    │  │  └── goodsaem
    │  │      └── github
    │  │          └── io
    │  │              └── hello
    │  │                  ├── HelloApplication.java
    │  │                  ├── HelloController.java
    │  │                  └── ServletInitializer.java
    │  └── resources
    │      ├── application.yml
    │      ├── static
    │      └── templates
    └── test
        └── java
            └── goodsaem
                └── github
                    └── io
                        └── hello
                            └── HelloApplicationTests.java&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_3-hellocontroller-java&quot; data-ke-size=&quot;size26&quot;&gt;HelloController.java&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;goodsaem/string url로 접속하면 &quot;안녕하세요 좋은 선생님 goodsaem! 입니다.&quot; 라고 출력하는 간단한 컨트롤러 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195491381&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package goodsaem.github.io.hello;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    private final String MSG=&quot;안녕하세요 좋은 선생님 goodsaem! 입니다.&quot;;

    @GetMapping(value = &quot;/goodsaem/string&quot;)
    @ResponseBody
    public String getString() {
        return MSG;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_4-application-yml&quot; data-ke-size=&quot;size26&quot;&gt;application.yml&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서비스 포트를 9090 로 변경했고 context-path를 spring으로 지정하여 /spring으로 오는 요청은 모두 springboot에서 처리하게 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627195548158&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server:
  port: 9090
  servlet:
    context-path: /spring
    session:
      timeout: 60
      tomcat:
        uri-encoding: UTF-8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_5-war파일-만들기&quot; data-ke-size=&quot;size26&quot;&gt;war파일 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;프로젝트 root 디렉토리에서 아래 명령어를 입력하면 war파일이 생성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195587713&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sh gradlew build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 실행하면 아래 위치에 hello-0.0.1-SNAPSHOT.war 파일이 생성됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627195613195&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.
└── build
      └── libs
            └── hello-0.0.1-SNAPSHOT.war&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_6-aws-에-파일업로드&quot; data-ke-size=&quot;size26&quot;&gt;aws 에 파일업로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 업로드는 파일 질라를 이용하서 진행하겠습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;호스트는 goodsaem.ml 이라고 입력합니다.&lt;/li&gt;
&lt;li&gt;사용자는 ubuntu라고 입력합니다.&lt;/li&gt;
&lt;li&gt;키파일은 aws ec2 서버 생성할때 만든 goodsaem.pem 파일을 선택합니다.&lt;/li&gt;
&lt;li&gt;연결하기 버튼을 클릭하면 ec2 서버에 접속이 이루어 집니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;403&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x0aVr/btran9UOmPb/8dy2XyrtXQZB0cQvfl9AV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x0aVr/btran9UOmPb/8dy2XyrtXQZB0cQvfl9AV0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x0aVr/btran9UOmPb/8dy2XyrtXQZB0cQvfl9AV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx0aVr%2Fbtran9UOmPb%2F8dy2XyrtXQZB0cQvfl9AV0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;403&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;libs 디렉토리에 hello-0.0.1-SNAPSHOT.war 파일을 사용자 home 디렉토리로 업로드 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;221&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AHIpo/btraqrNV9pA/X4Q8tgNC0ZvkLZUKuHUN1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AHIpo/btraqrNV9pA/X4Q8tgNC0ZvkLZUKuHUN1k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AHIpo/btraqrNV9pA/X4Q8tgNC0ZvkLZUKuHUN1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAHIpo%2FbtraqrNV9pA%2FX4Q8tgNC0ZvkLZUKuHUN1k%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;221&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/22</guid>
      <comments>https://goodsaem.tistory.com/22#entry22comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:48:01 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-11/18]Open Jdk 1.8 설치</title>
      <link>https://goodsaem.tistory.com/21</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Open&amp;nbsp;Jdk&amp;nbsp;1.8&amp;nbsp;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;aws + ubuntu 18 linux 서버에 open jdk 설치 하는 방법입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-설치&quot; data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;백엔드 서비스는 springboot에서 모두 처리할 예정입니다. springboot을 기동하기 위해 open jdk를 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195158825&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt install openjdk-8-jdk&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-jdk-버전확인&quot; data-ke-size=&quot;size26&quot;&gt;jdk 버전확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;설치가 완료되었다면 jdk 버전을 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627195197262&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ java -version
openjdk version &quot;1.8.0_282&quot;
OpenJDK Runtime Environment (build 1.8.0_282-8u282-b08-0ubuntu1~18.04-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/21</guid>
      <comments>https://goodsaem.tistory.com/21#entry21comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:40:16 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-10/18] Maria DB 유저 생성 및 권한 부여</title>
      <link>https://goodsaem.tistory.com/20</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Maria&amp;nbsp;DB&amp;nbsp;유저&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;권한&amp;nbsp;부여&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;mariadb 유저 생성 및 권한 주는 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;생성한 데이터베이스를 사용할 유저를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194954806&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; CREATE USER goodsaem@localhost identified by 'xxxxxxxxxx';
Query OK, 0 rows affected (0.009 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;생성한 유저에게 신규 데이터베이스의 모든 권한을 부여 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194975750&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; grant all privileges on goodsaem.* to 'goodsaem'@'localhost';
Query OK, 0 rows affected (0.012 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;변경된 내용을 적용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194995820&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [none]&amp;gt; flush privileges;
Query OK, 0 rows affected (0.000 sec)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/20</guid>
      <comments>https://goodsaem.tistory.com/20#entry20comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:36:49 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-9/18] Maria DB 데이터 베이스 생성</title>
      <link>https://goodsaem.tistory.com/19</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Maria&amp;nbsp;DB&amp;nbsp;데이터&amp;nbsp;베이스&amp;nbsp;생성&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;mariadb 에 접속합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194776012&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo mariadb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어로 데이터 베이스를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194803754&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; create database goodsaem;
Query OK, 1 row affected (0.001 sec)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;생성된 데이터 베이스를 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194824464&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show databases;
+--------------------+
| Database           |
+--------------------+
| goodsaem           |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/19</guid>
      <comments>https://goodsaem.tistory.com/19#entry19comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:34:36 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-8/18] Maria DB 설치</title>
      <link>https://goodsaem.tistory.com/18</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Maria&amp;nbsp;DB&amp;nbsp;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;aws freeiter linux 서버에 mariadb 설치를 진행하겠습니다&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;_1-설치&quot; data-ke-size=&quot;size26&quot;&gt;설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;우선 repository 부터 아래와 같이 설정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627193859936&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt-get install software-properties-common
ubuntu@goodsaem:~$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
ubuntu@goodsaem:~$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.yongbok.net/mariadb/repo/10.5/ubuntu bionic main'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;패키지를 업데이트한후 mariadb 설치를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627193976182&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt update
ubuntu@goodsaem:~$ sudo apt install mariadb-server -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;마리아 디비 버전을 확인합니다. 설치 시점의 최신 버전 10.5.9-MariaDB 으로 설치 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627193995228&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ mariadb -V
mariadb  Ver 15.1 Distrib 10.5.9-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_2-보안설정&quot; data-ke-size=&quot;size26&quot;&gt;보안설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;마리아 디비 보안 관련 설정을 진행 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194029596&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo mysql_secure_installation&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 설정 내용은 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;8 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;root 유저가 사용할 패스워드를 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;16 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;unix socket 인증방식 사용여부는 n 으로 지정해 주세요(root 쉘인증이 기본 사용됩니다.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;21-23 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;root passwor를 변경합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;35 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;익명 사용자를 삭제 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;41 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;root의 원격접속을 막습니다. root 는 항상 로컬에서만 접속 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;48 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;test 데이터 베이스를 삭제 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;57 라인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;권한에 대한 리로드를 진행합니다. y를 입력해주세요&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1627194059590&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_3-디비연결&quot; data-ke-size=&quot;size26&quot;&gt;디비연결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어를 입력하여 mariadb 에 접속합니다. 성공적으로 접속되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194097816&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo mariadb&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1627194115186&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.5.9-MariaDB-1:10.5.9+maria~bionic mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_4-마리아-디비-설정&quot; data-ke-size=&quot;size26&quot;&gt;마리아 디비 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마리아 db 설정을 진행하겠습니다. 아래 명령어를 입력하여 설정파일을 수정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627194144256&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 마지막 줄에 아래 설정을 추가합니다. (119-130 라인)&lt;/p&gt;
&lt;pre id=&quot;code_1627194178547&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
[mysqld]

#
# * Basic Settings
#

user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
lc-messages             = en_US
skip-external-locking

# Broken reverse DNS slows down connections considerably and name resolve is
# safe to skip if there are no &quot;host by domain name&quot; access grants
#skip-name-resolve

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

#
# * Fine Tuning
#

#key_buffer_size        = 128M
#max_allowed_packet     = 1G
#thread_stack           = 192K
#thread_cache_size      = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
#myisam_recover_options = BACKUP
#max_connections        = 100
#table_cache            = 64

#
# * Logging and Replication
#

# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# Recommend only changing this at runtime for short testing periods if needed!
#general_log_file       = /var/log/mysql/mysql.log
#general_log            = 1

# When running under systemd, error logging goes via stdout/stderr to journald
# and when running legacy init error logging goes to syslog due to
# /etc/mysql/conf.d/mariadb.conf.d/50-mysqld_safe.cnf
# Enable this if you want to have error logging into a separate file
#log_error = /var/log/mysql/error.log
# Enable the slow query log to see queries with especially long duration
#slow_query_log_file    = /var/log/mysql/mariadb-slow.log
#long_query_time        = 10
#log_slow_verbosity     = query_plan,explain
#log-queries-not-using-indexes
#min_examined_row_limit = 1000

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id              = 1
#log_bin                = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
#max_binlog_size        = 100M

#
# * SSL/TLS
#

# For documentation, please read
# https://mariadb.com/kb/en/securing-connections-for-client-and-server/
#ssl-ca = /etc/mysql/cacert.pem
#ssl-cert = /etc/mysql/server-cert.pem
#ssl-key = /etc/mysql/server-key.pem
#require-secure-transport = on

#
# * Character sets
#

# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

#
# * InnoDB
#

# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# Most important is to give InnoDB 80 % of the system RAM for buffer use:
# https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size
#innodb_buffer_pool_size = 8G

# this is only for embedded server
[embedded]

# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]

# This group is only read by MariaDB-10.5 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.5]

server-id=1
log_bin = binlog
expire_logs_days=10
innodb_buffer_pool_size = 384M
innodb_file_per_table=TRUE
character-set-client-handshake=OFF
skip-character-set-client-handshake
max_allowed_packet=500M
init_connect=SET collation_connection = utf8mb4_general_ci
init_connect=SET NAMES utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;설정된 값이 적용되도록 마리아 디비를 재시작 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627194207954&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo systemctl restart mariadb&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/18</guid>
      <comments>https://goodsaem.tistory.com/18#entry18comment</comments>
      <pubDate>Sun, 25 Jul 2021 15:17:47 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-7/18] Nginx 설치</title>
      <link>https://goodsaem.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Nginx&amp;nbsp; 웹서버 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws freetier linux + Nginx + MariaDB + SpringBoot 조합으로 설치를 진행하겠습니다. 그 첫번째로 Nginx 설치를 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-개요&quot; data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://news.netcraft.com/archives/category/web-server-survey/&quot;&gt;https://news.netcraft.com/archives/category/web-server-survey/&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;netcrat의 21년 웹서버 점유율을 보면 아래와 같습니다. 비동기로 동작하는 nginx 는 apache 보다 가볍고 속도도 더 빠르다고 합니다. 아래 데이터를 보더라도 nginx 가 apache 를 앞지르고 있는것으로 보입니다. 그래서 저도 nginx 로 설정하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;1318&quot; data-filename=&quot;스크린샷 2021-07-25 오후 1.12.18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wkKDj/btrav7BpDCl/SAfG8VlxX5dYBTqX7Pu800/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wkKDj/btrav7BpDCl/SAfG8VlxX5dYBTqX7Pu800/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wkKDj/btrav7BpDCl/SAfG8VlxX5dYBTqX7Pu800/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwkKDj%2Fbtrav7BpDCl%2FSAfG8VlxX5dYBTqX7Pu800%2Fimg.png&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;1318&quot; data-filename=&quot;스크린샷 2021-07-25 오후 1.12.18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-nginx-버전&quot; data-ke-size=&quot;size26&quot;&gt;Nginx 버전&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Nginx는 MainLine 버전과 stable 버전 2가지가 존재 합니다. 메인라인은&amp;nbsp; 새로운 기능 및 업데이트 및 버그 패치가 동시에 진행되고 stable 은 메인라인에서 버그패치만 진행하는 버전입니다. 메이저 버전을 올리고 싶지 않고 사용하고 싶다면 stable 버전이 좋겠지만 전 최신 기능과 update 및 버그 픽스가 동시에 이루어지는 mainline으로 설치를 진행하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zQKu8/btraqsTzbdT/wiUOVQwmcBCnskGZahV1I1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zQKu8/btraqsTzbdT/wiUOVQwmcBCnskGZahV1I1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zQKu8/btraqsTzbdT/wiUOVQwmcBCnskGZahV1I1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzQKu8%2FbtraqsTzbdT%2FwiUOVQwmcBCnskGZahV1I1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&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 id=&quot;_3-nginx-설치&quot; data-ke-size=&quot;size26&quot;&gt;Nginx 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Nginx 설치를 위해 의존성 있는 패키지 설치를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186741455&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt install curl gnupg2 ca-certificates lsb-release -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;메인라인 패키지 리스트를 추가 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186762808&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo echo &quot;deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx&quot; | sudo tee /etc/apt/sources.list.d/nginx.list
deb http://nginx.org/packages/mainline/ubuntu bionic nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;패키지를 업데이트 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186788547&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트시 아래와 같이 NO_PUBKEY&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ABF5BD827BD9BF62&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에러가 발생한다면 키를 업데이트 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 화면을 보시면 업데이트 오류가 발생하고 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627186826189&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt update
Hit:1 http://kr.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://nginx.org/packages/mainline/ubuntu bionic InRelease [2862 B]
Err:2 http://nginx.org/packages/mainline/ubuntu bionic InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62
Hit:3 http://kr.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:5 http://kr.archive.ubuntu.com/ubuntu bionic-security InRelease
Reading package lists... Done
W: GPG error: http://nginx.org/packages/mainline/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62
E: The repository 'http://nginx.org/packages/mainline/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 첫번째 라인과 같이 입력하여 키를 업데이트 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627186881753&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
Executing: /tmp/apt-key-gpghome.2V0gKSSHqy/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
gpg: key ABF5BD827BD9BF62: 14 signatures not checked due to missing keys
gpg: key ABF5BD827BD9BF62: public key &quot;nginx signing key &amp;lt;signing-key@nginx.com&amp;gt;&quot; imported
gpg: Total number processed: 1
gpg:               imported: 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;패키지 업데이트를 재시도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186938734&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;nginx 를 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186964260&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo apt install nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;설치된 버전을 확인 합니다. 1.19.8 최신 버전으로 설치 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627186996424&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ nginx -V
nginx version: nginx/1.19.8
built by gcc 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 
built with OpenSSL 1.1.1  11 Sep 2018
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.8/debian/debuild-base/nginx-1.19.8=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_4-aws-보안설정-변경&quot; data-ke-size=&quot;size26&quot;&gt;AWS 보안설정 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;http 및 https 로 접속하기 위해서는 aws에 인바운드 (들어오는쪽)에 방화벽 설정을 해주셔야 됩니다. 아래와 같이 aws 콘솔에서 EC2 &amp;gt; 인스턴스 &amp;gt; 인스터스 명을 클릭하시고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;보안&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;탭에서 보안그룹의 보안 그룹번호를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;801&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FJjsD/btranXHjQI5/v6HbRAui1C4eqexDqPxwe1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FJjsD/btranXHjQI5/v6HbRAui1C4eqexDqPxwe1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FJjsD/btranXHjQI5/v6HbRAui1C4eqexDqPxwe1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFJjsD%2FbtranXHjQI5%2Fv6HbRAui1C4eqexDqPxwe1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;801&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;인바운드 규칙 변경을 통해 아래와 같이 http , https 에대한 규칙을 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MGzhj/btrav6JhHMN/5r6CvEG1KWN3nazsKVvj1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MGzhj/btrav6JhHMN/5r6CvEG1KWN3nazsKVvj1K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MGzhj/btrav6JhHMN/5r6CvEG1KWN3nazsKVvj1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGzhj%2Fbtrav6JhHMN%2F5r6CvEG1KWN3nazsKVvj1K%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;규칙 추가는 인바운드 규칙 편집 버튼을 클릭하여 아래와 같이 http,https 위치무관이라고 선택하고 저장하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;202&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Tonm/btranblKb6M/MvM69OfBk3Qvd06BDI2Ms1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Tonm/btranblKb6M/MvM69OfBk3Qvd06BDI2Ms1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Tonm/btranblKb6M/MvM69OfBk3Qvd06BDI2Ms1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Tonm%2FbtranblKb6M%2FMvM69OfBk3Qvd06BDI2Ms1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;202&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_5-nginx-시작&quot; data-ke-size=&quot;size26&quot;&gt;Nginx 시작 및 접속 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 명령어를 입력하여 nginx 를 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627187126744&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo systemctl start nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹브라우저에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://goodsaem.ml&quot;&gt;http://goodsaem.ml&lt;/a&gt;접속해서 아래와 같은 화면이 나오면 설정 완료 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df1Axt/btrapGLzzQo/C2iBZ5jMnjF9PkSAOK9YkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df1Axt/btrapGLzzQo/C2iBZ5jMnjF9PkSAOK9YkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df1Axt/btrapGLzzQo/C2iBZ5jMnjF9PkSAOK9YkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf1Axt%2FbtrapGLzzQo%2FC2iBZ5jMnjF9PkSAOK9YkK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/16</guid>
      <comments>https://goodsaem.tistory.com/16#entry16comment</comments>
      <pubDate>Sun, 25 Jul 2021 13:14:18 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-6/18] AWS free tier 서버 Linux 설정</title>
      <link>https://goodsaem.tistory.com/15</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;AWS&amp;nbsp;free&amp;nbsp;tier&amp;nbsp;서버&amp;nbsp;Linux&amp;nbsp;설정&lt;/span&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;span style=&quot;color: #2c3e50;&quot;&gt;구축한 aws + ubuntu 18.0.4 서버 초기 설정을 진행 하겠습니다. 필요없다고 생각하는 부분은 skip 하셔도 상관 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-버전정보-확인&quot; data-ke-size=&quot;size26&quot;&gt;버전정보 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;lsb_release - a 명령어를 입력하여 버전 정보를 확인 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183076193&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.5 LTS
Release:	18.04
Codename:	bionic&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_2-nopasswd-설정&quot; data-ke-size=&quot;size26&quot;&gt;nopasswd 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nopasswd 설정을 진행하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo 해서 root 하는 일을 많이 진행할 예정입니다. 그때 마다 패스워드를 입력하지 않기 위해 /etc/sudoers 파일을 수정합니다&lt;/p&gt;
&lt;pre id=&quot;code_1627183354222&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo vi /etc/sudoers&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;%sudo ALL=(ALL:ALL) ALL 이라고 된부분을 아래와 같이 %sudo ALL=(ALL:ALL) NOPASSWD:ALL 로 수정 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183442063&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin&quot;

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

# See sudoers(5) for more information on &quot;#include&quot; directives:

#includedir /etc/sudoers.d&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_3-패키지-업데이트&quot; data-ke-size=&quot;size26&quot;&gt;패키지 업데이트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;최신 패키지로 변경하기 위해 아래와 같이 update upgrade 를 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183528158&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1627183542490&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo apt upgrade -y&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_4-타임존-변경&quot; data-ke-size=&quot;size26&quot;&gt;타임존 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존을 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 설치하고 나면 timezone이 utc로 설정 되어 있습니다. timezone을 KST로 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627183583813&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo timedatectl set-timezone 'Asia/Seoul'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;date 명령을 입력하여 정상적으로 변경되었는지 확인 합니다.&lt;/span&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183616290&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ date
Wed Mar  3 23:52:20 KST 2021&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_5-호스트명-변경&quot; data-ke-size=&quot;size26&quot;&gt;호스트명 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;homename을 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 이름을 바꾸지 않아 아래와&lt;span&gt;&amp;nbsp;&lt;/span&gt;ip-172-31-47-167&lt;span&gt;&amp;nbsp;&lt;/span&gt;나옵니다 아래 명령어를 입력하여 호스트 이름을 goodsaem으로 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1627183811069&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo hostnamectl set-hostname goodsaem&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;정상적으로 변경되었는지 확인 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183830981&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ cat /etc/hostname
goodsaem&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;서버를 재시작 하면 호스트 이름이 변경되므로 변경되지 않도록 설정을 수정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183858048&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ sudo vi /etc/cloud/cloud.cfg&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;아래 내용중 preserve_hostname: false 되어 있는 부분을 true로 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627183904614&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# The top level settings are used as module
# and system configuration.

# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
   - default

# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default $user
disable_root: true

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true

# Example datasource config
# datasource:
#    Ec2:
#      metadata_urls: [ 'blah.com' ]
#      timeout: 5 # (defaults to 50 seconds)
#      max_wait: 10 # (defaults to 120 seconds)



# The modules that run in the 'init' stage
cloud_init_modules:
 - migrator
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - disk_setup
 - mounts
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
# Emit the cloud config ready event
# this can be used by upstart jobs for 'start on cloud-config'.
 - emit_upstart
 - snap
 - ssh-import-id
 - locale
 - set-passwords
 - grub-dpkg
 - apt-pipelining
 - apt-configure
 - ubuntu-advantage
 - ntp
 - timezone
 - disable-ec2-metadata
 - runcmd
 - byobu

# The modules that run in the 'final' stage
cloud_final_modules:
 - package-update-upgrade-install
 - fan
 - landscape
 - lxd
 - ubuntu-drivers
 - puppet
 - chef
 - mcollective
 - salt-minion
 - reset_rmc
 - refresh_rmc_and_interface
 - rightscale_userdata
 - scripts-vendor
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
   # This will affect which distro class gets used
   distro: ubuntu
   # Default user name + that default users groups (if added/used)
   default_user:
     name: ubuntu
     lock_passwd: True
     gecos: Ubuntu
     groups: [adm, audio, cdrom, dialout, dip, floppy, lxd, netdev, plugdev, sudo, video]
     sudo: [&quot;ALL=(ALL) NOPASSWD:ALL&quot;]
     shell: /bin/bash
   # Automatically discover the best ntp_client
   ntp_client: auto
   # Other config here will be given to the distro class and/or path classes
   paths:
      cloud_dir: /var/lib/cloud/
      templates_dir: /etc/cloud/templates/
      upstart_dir: /etc/init/
   package_mirrors:
     - arches: [i386, amd64]
       failsafe:
         primary: http://archive.ubuntu.com/ubuntu
         security: http://security.ubuntu.com/ubuntu
       search:
         primary:
           - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/
           - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/
           - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/
         security: []
     - arches: [arm64, armel, armhf]
       failsafe:
         primary: http://ports.ubuntu.com/ubuntu-ports
         security: http://ports.ubuntu.com/ubuntu-ports
       search:
         primary:
           - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/
           - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/
           - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/
         security: []
     - arches: [default]
       failsafe:
         primary: http://ports.ubuntu.com/ubuntu-ports
         security: http://ports.ubuntu.com/ubuntu-ports
   ssh_svcname: ssh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;다시 로그아웃 하고 로그인 했을때 hostname 이 변경되었는지 확인 합니다. goodsaem으로 정상 변경되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1627185676097&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@ip-172-31-47-167:~$ logout
Connection to ec2-13-209-42-88.ap-northeast-2.compute.amazonaws.com closed.
goodsaem@goodsaemui-iMac goodsaem % ssh -i &quot;goodsaem.pem&quot; ubuntu@ec2-13-209-42-88.ap-northeast-2.compute.amazonaws.com
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1037-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Mar  4 00:00:55 KST 2021

  System load:  0.0               Processes:           121
  Usage of /:   8.3% of 29.02GB   Users logged in:     1
  Memory usage: 39%               IP address for eth0: 172.31.47.167
  Swap usage:   0%

 * Introducing self-healing high availability clusters in MicroK8s.
   Simple, hardened, Kubernetes for production, from RaspberryPi to DC.

     https://microk8s.io/high-availability

 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

18 packages can be updated.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable

New release '20.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


*** System restart required ***
Last login: Wed Mar  3 23:13:55 2021 from 1.247.71.18
ubuntu@goodsaem:~$&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;_6-etc-hosts-아이피-변경&quot; data-ke-size=&quot;size26&quot;&gt;/etc/hosts 아이피 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/hosts 에 있는 아이피를 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이피와 호스트 정보를 입력해 주세요 전 127.0.0.1 과 aws 부여해준 공인 아이피(이아이피는 서버를 재시작 하면 다른 아이피로 변경됩니다.)를 입력했습니다. 전 가급적이면 서버를 재시작 하지 않을 계획이므로 그대로 사용하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627185747849&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu@goodsaem:~$ sudo vi /etc/hosts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1627185770034&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;127.0.0.1 localhost
127.0.0.1 goodsaem
13.124.172.200 goodsaem.ml
13.124.172.200 www.goodsaem.ml

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_7-무료도메인내-ip-변경&quot; data-ke-size=&quot;size26&quot;&gt;무료도메인내 ip 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;freenom 무료 도메인을 발급 받은곳의 아이피를 aws ec2 서버 아이피로 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인후 service &amp;gt; my domains 를 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;365&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JzwaT/btraoDaLjDb/c0qmotnNGnglXpKLOLXnMK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JzwaT/btraoDaLjDb/c0qmotnNGnglXpKLOLXnMK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JzwaT/btraoDaLjDb/c0qmotnNGnglXpKLOLXnMK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJzwaT%2FbtraoDaLjDb%2Fc0qmotnNGnglXpKLOLXnMK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;365&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Manage domain 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GTQW3/btranW2HjCD/hZKTFGINukkeqZkkfXjN3K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GTQW3/btranW2HjCD/hZKTFGINukkeqZkkfXjN3K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GTQW3/btranW2HjCD/hZKTFGINukkeqZkkfXjN3K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGTQW3%2FbtranW2HjCD%2FhZKTFGINukkeqZkkfXjN3K%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Manage Freenom DNS 를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;417&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVHs4P/btranxWo24j/aILPPjIYYOar0DPFVQDs00/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVHs4P/btranxWo24j/aILPPjIYYOar0DPFVQDs00/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVHs4P/btranxWo24j/aILPPjIYYOar0DPFVQDs00/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVHs4P%2FbtranxWo24j%2FaILPPjIYYOar0DPFVQDs00%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;417&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;ec2 서버의 아이피를 입력하고 save change 버튼을 클릭하여 변경사항을 적용 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;414&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbPeZe/btrastSyivc/Ub6daWnY4GWd7ZFYpfKOi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbPeZe/btrastSyivc/Ub6daWnY4GWd7ZFYpfKOi1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbPeZe/btrastSyivc/Ub6daWnY4GWd7ZFYpfKOi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbPeZe%2FbtrastSyivc%2FUb6daWnY4GWd7ZFYpfKOi1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;414&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/15</guid>
      <comments>https://goodsaem.tistory.com/15#entry15comment</comments>
      <pubDate>Sun, 25 Jul 2021 12:18:05 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-5/18] AWS free tier 서버 접속(mac, windows)</title>
      <link>https://goodsaem.tistory.com/14</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS&amp;nbsp;freetier&amp;nbsp;서버&amp;nbsp;접속하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mac , windows pc에서 생성한 프리티어 서버에 접속하는 방법입니다.&lt;/p&gt;
&lt;h2 id=&quot;_1-연결정보-확인&quot; data-ke-size=&quot;size26&quot;&gt;연결정보 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결할 서버 접속 정보를 확인합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인스턴스 아이디 아래 부분의 인스턴스를 클릭합니다.&lt;/li&gt;
&lt;li&gt;연결 버튼을 클릭합니다.&lt;/li&gt;
&lt;li&gt;SSH 클라이언트 탭을 클릭합니다.&lt;/li&gt;
&lt;li&gt;SSH 클라이언트 아래의 텍스트를 복사합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ssh -i &quot;goodsaem.pem&quot; ubuntu@ec2-13-209-42-88.ap-northeast-2.compute.amazonaws.com&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;836&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVMykw/btraqSEYEDS/6TKfwpvra7sv6C0rRhbknK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVMykw/btraqSEYEDS/6TKfwpvra7sv6C0rRhbknK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVMykw/btraqSEYEDS/6TKfwpvra7sv6C0rRhbknK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVMykw%2FbtraqSEYEDS%2F6TKfwpvra7sv6C0rRhbknK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;836&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;프리티어 서버생성할때 키를 생성했었습니다. 키 생성한 곳으로 이동하여 붙여 넣기 하고 엔터를 입력하면 아래와 같이 서버에 접속합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_2-맥에서-연결하기&quot; data-ke-size=&quot;size26&quot;&gt;Mac 에서 연결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mac 에서 aws 서버 접속하는 방법입니다.&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_1627179903203&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;goodsaem@goodsaemui-iMac goodsaem % ssh -i &quot;goodsaem.pem&quot; ubuntu@ec2-13-209-42-88.ap-northeast-2.compute.amazonaws.com
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1037-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed Mar  3 22:43:18 KST 2021

  System load:  0.0               Processes:           120
  Usage of /:   8.3% of 29.02GB   Users logged in:     0
  Memory usage: 39%               IP address for eth0: 172.31.47.167
  Swap usage:   0%

 * Introducing self-healing high availability clusters in MicroK8s.
   Simple, hardened, Kubernetes for production, from RaspberryPi to DC.

     https://microk8s.io/high-availability

 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

18 packages can be updated.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable


*** System restart required ***
Last login: Mon Mar  1 23:55:26 2021 from 1.247.71.18
ubuntu@ip-172-31-47-167:~$&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;_3-윈도우에서-연결하기&quot; data-ke-size=&quot;size26&quot;&gt;윈도우에서 연결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우에서는 putty 로 접속하며 해당 sw 설치하는 방법 과 ec2 서버에 접속하는 방법에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&quot;&gt;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&lt;/a&gt;설치파일을 다운로드 받고 설치를 진행합니다. default 로 다음 다음 하셔서 설치를 완료해 주세요..&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-origin-width=&quot;800&quot; data-origin-height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pG8La/btranF0Cnz7/H1fdO09RxVYp93wLDP2f71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pG8La/btranF0Cnz7/H1fdO09RxVYp93wLDP2f71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pG8La/btranF0Cnz7/H1fdO09RxVYp93wLDP2f71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpG8La%2FbtranF0Cnz7%2FH1fdO09RxVYp93wLDP2f71%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;putty gen 을 실행 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1244&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baAU57/btrav6vH3Px/oUV26aw707fJH0NFkGpO6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baAU57/btrav6vH3Px/oUV26aw707fJH0NFkGpO6k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baAU57/btrav6vH3Px/oUV26aw707fJH0NFkGpO6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaAU57%2Fbtrav6vH3Px%2FoUV26aw707fJH0NFkGpO6k%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1244&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;load 버튼을 클릭합니다. 모든 파일을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;.&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;선택하고 goodsaem.pem 파일을 불러 옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;793&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PLQFD/btranxWmvts/vwPL6vjujCW38a4RER1KY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PLQFD/btranxWmvts/vwPL6vjujCW38a4RER1KY1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PLQFD/btranxWmvts/vwPL6vjujCW38a4RER1KY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPLQFD%2FbtranxWmvts%2FvwPL6vjujCW38a4RER1KY1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;793&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Save private key 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;788&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcRQx8/btrat3eVHtC/knHkM1Xkni41D4PNiBSjn0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcRQx8/btrat3eVHtC/knHkM1Xkni41D4PNiBSjn0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcRQx8/btrat3eVHtC/knHkM1Xkni41D4PNiBSjn0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcRQx8%2Fbtrat3eVHtC%2FknHkM1Xkni41D4PNiBSjn0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;788&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;goodsaem.ppk 파일로 적당한 위치에 저장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNuAxl/btram92uN1B/8uoKeVvPWl3RnzrptlFRGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNuAxl/btram92uN1B/8uoKeVvPWl3RnzrptlFRGK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNuAxl/btram92uN1B/8uoKeVvPWl3RnzrptlFRGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNuAxl%2Fbtram92uN1B%2F8uoKeVvPWl3RnzrptlFRGK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p 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;putty 를 실행하고 위에서 ubuntu@ 뒤쪽에 있는 문자를 복사해서 호스트에 붙여 넣기 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ec2-13-209-42-88.ap-northeast-2.compute.amazonaws.com&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;ssh 메뉴 아래 Auth를 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;781&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WTpw1/btrao6qcO1v/RxOqS7IG1COe4qYiBH0jT1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WTpw1/btrao6qcO1v/RxOqS7IG1COe4qYiBH0jT1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WTpw1/btrao6qcO1v/RxOqS7IG1COe4qYiBH0jT1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWTpw1%2Fbtrao6qcO1v%2FRxOqS7IG1COe4qYiBH0jT1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;781&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Browse 버튼을 클릭하여 goodsaem.ppk 파일을 불러 옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;781&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wdKbe/btrapGx1n0i/kj8qAWo9xkNFryrlkTeQ40/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wdKbe/btrapGx1n0i/kj8qAWo9xkNFryrlkTeQ40/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wdKbe/btrapGx1n0i/kj8qAWo9xkNFryrlkTeQ40/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwdKbe%2FbtrapGx1n0i%2Fkj8qAWo9xkNFryrlkTeQ40%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;781&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;파일을 불러 왔으면 Open 버튼을 클릭 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;780&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eK9ODi/btrat1VIdug/nFajTkdmdcQlNQ1QbZkYqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eK9ODi/btrat1VIdug/nFajTkdmdcQlNQ1QbZkYqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eK9ODi/btrat1VIdug/nFajTkdmdcQlNQ1QbZkYqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeK9ODi%2Fbtrat1VIdug%2FnFajTkdmdcQlNQ1QbZkYqK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;780&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;login 부분에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ubuntu&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 입력하고 엔터를 클릭하면 아래와 같이 서버에 접속이 정상 완료됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;799&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTRkPs/btrastSvFvS/WyUGbOPSUzkJWuLOYSiuG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTRkPs/btrastSvFvS/WyUGbOPSUzkJWuLOYSiuG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTRkPs/btrastSvFvS/WyUGbOPSUzkJWuLOYSiuG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTRkPs%2FbtrastSvFvS%2FWyUGbOPSUzkJWuLOYSiuG0%2Fimg.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;799&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상 mac 및 윈도우에서 구축한 aws 프리티어 서버에 접속하는 방법에 대해서 알아 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에는&amp;nbsp; 실제 서버 설정을 진행하겠습니다.&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/14</guid>
      <comments>https://goodsaem.tistory.com/14#entry14comment</comments>
      <pubDate>Sun, 25 Jul 2021 11:29:43 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-4/18] AWS 에 EC2 인스턴스 추가</title>
      <link>https://goodsaem.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS&amp;nbsp;에&amp;nbsp;EC2&amp;nbsp;인스턴스&amp;nbsp;추가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;무료로 사용할수 있는 freetier 서버를 추가하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Free Tier 서버를 구축을 위해 가입하신 정보로 로그인한후 aws console 버튼을 클릭하신후 서비스 &amp;gt; 모든 서비스 &amp;gt; 컴퓨팅 &amp;gt; EC2 서버를 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;416&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cacDoz/btraoBxbyVZ/cfUAUpga0DpxPBBRIiSgTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cacDoz/btraoBxbyVZ/cfUAUpga0DpxPBBRIiSgTk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cacDoz/btraoBxbyVZ/cfUAUpga0DpxPBBRIiSgTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcacDoz%2FbtraoBxbyVZ%2FcfUAUpga0DpxPBBRIiSgTk%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;416&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;EC2 좌측메뉴중 인스턴스를 클릭하고 다시 인스턴스 시작 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;288&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vsyhe/btrat19eoKu/Ckb0usrM8kZpa4GkDZPiy1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vsyhe/btrat19eoKu/Ckb0usrM8kZpa4GkDZPiy1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vsyhe/btrat19eoKu/Ckb0usrM8kZpa4GkDZPiy1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvsyhe%2Fbtrat19eoKu%2FCkb0usrM8kZpa4GkDZPiy1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;288&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;프리티어 사용 가능이라고 된 서버가 무료 서버입니다. Ubuntu Server 18.04 LTS(HVM) SSD Volumn type을 선택 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;773&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMsmMa/btranx9Spgd/UsLZOkoPCKWDKV4jeKaSB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMsmMa/btranx9Spgd/UsLZOkoPCKWDKV4jeKaSB1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMsmMa/btranx9Spgd/UsLZOkoPCKWDKV4jeKaSB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMsmMa%2Fbtranx9Spgd%2FUsLZOkoPCKWDKV4jeKaSB1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;773&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;다음 : 인스턴스 세부정보 구성 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;997&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5S5vw/btrat2NRosm/JisN3k1n9Mv9GVjMlbHOP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5S5vw/btrat2NRosm/JisN3k1n9Mv9GVjMlbHOP0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5S5vw/btrat2NRosm/JisN3k1n9Mv9GVjMlbHOP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5S5vw%2Fbtrat2NRosm%2FJisN3k1n9Mv9GVjMlbHOP0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;997&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;변경없이 다음 : 스토리지 추가를 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1005&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uGAnO/btrat2Ajr2A/IjiSLgQlOB6mpu2EohSed0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uGAnO/btrat2Ajr2A/IjiSLgQlOB6mpu2EohSed0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uGAnO/btrat2Ajr2A/IjiSLgQlOB6mpu2EohSed0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuGAnO%2Fbtrat2Ajr2A%2FIjiSLgQlOB6mpu2EohSed0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1005&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;기본값 8 이라고 입력하고 다음 : 태그 추가 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;183&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZQwZ9/btranWBAhIp/zC0cFk5TNeQ4eYt61fbBz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZQwZ9/btranWBAhIp/zC0cFk5TNeQ4eYt61fbBz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZQwZ9/btranWBAhIp/zC0cFk5TNeQ4eYt61fbBz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZQwZ9%2FbtranWBAhIp%2FzC0cFk5TNeQ4eYt61fbBz1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;183&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;무료는 30G 가능&lt;br /&gt;30G 까지 가능하지만 해당 크기만큼 용량을 잡으면 프리티어 사용량에 포함 됩니다.&lt;br /&gt;혹시 비용을 초과할수 있고 30G 만큼 사용하지 않을 계획 이므로 8G 로 설정을 진행합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;태그 추가 버튼을 클릭하여 키와 값에 식별할수 있는 이름을 입력합니다. 그리고 나서 다음 : 보안 그룹 구성 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;324&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfOCMI/btraqRMQGIo/CoVlCqhk17R1iDyamsThMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfOCMI/btraqRMQGIo/CoVlCqhk17R1iDyamsThMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfOCMI/btraqRMQGIo/CoVlCqhk17R1iDyamsThMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfOCMI%2FbtraqRMQGIo%2FCoVlCqhk17R1iDyamsThMK%2Fimg.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;324&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;132&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zoMLJ/btrasuRnlSX/QFssy2svskvGJOZMiY3Ybk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zoMLJ/btrasuRnlSX/QFssy2svskvGJOZMiY3Ybk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zoMLJ/btrasuRnlSX/QFssy2svskvGJOZMiY3Ybk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzoMLJ%2FbtrasuRnlSX%2FQFssy2svskvGJOZMiY3Ybk%2Fimg.png&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;132&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;새 보안 그룹 생성을 선택하고 검토 및 시작 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;842&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cStKm3/btrapFFSXe7/6VIcD5LKzMid5dtlRU0Gd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cStKm3/btrapFFSXe7/6VIcD5LKzMid5dtlRU0Gd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cStKm3/btrapFFSXe7/6VIcD5LKzMid5dtlRU0Gd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcStKm3%2FbtrapFFSXe7%2F6VIcD5LKzMid5dtlRU0Gd0%2Fimg.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;842&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;80&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rhGPI/btranWuP2rY/kWIS7vbZcQxTTHLfTh9qV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rhGPI/btranWuP2rY/kWIS7vbZcQxTTHLfTh9qV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rhGPI/btranWuP2rY/kWIS7vbZcQxTTHLfTh9qV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrhGPI%2FbtranWuP2rY%2FkWIS7vbZcQxTTHLfTh9qV0%2Fimg.png&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;80&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;인스턴스 시작 검토 화면에서 선택한 내용들을 확인합니다. 그리고 나서 시작 하기 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1013&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOYICm/btranxWmmg2/CIXWa0KeSqKcpi8g4bDQ01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOYICm/btranxWmmg2/CIXWa0KeSqKcpi8g4bDQ01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOYICm/btranxWmmg2/CIXWa0KeSqKcpi8g4bDQ01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOYICm%2FbtranxWmmg2%2FCIXWa0KeSqKcpi8g4bDQ01%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1013&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;이렇게 시작하고 나면 키페이 생성 화면이 팝업이 되는데 새 키 페어 생성을 선택하고 키페어 이름을 입력하고 키 페이 다운로드 버튼을 클릭하여 로컬 pc에 저장합니다. 그리고 나서 인서턴스 시작 버튼을 클릭합니다. 여기까지 완료하셨으면 프리티어 서버가 정상 생성되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;565&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8lRFg/btraqSSu9zk/hFoO5CMS6wleKdWnRPne51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8lRFg/btraqSSu9zk/hFoO5CMS6wleKdWnRPne51/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8lRFg/btraqSSu9zk/hFoO5CMS6wleKdWnRPne51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8lRFg%2FbtraqSSu9zk%2FhFoO5CMS6wleKdWnRPne51%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;565&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/13</guid>
      <comments>https://goodsaem.tistory.com/13#entry13comment</comments>
      <pubDate>Sun, 25 Jul 2021 11:19:39 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-3/18] AWS 계정생성</title>
      <link>https://goodsaem.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS 계정 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1년간 사용할 Aws 무료 계정을 생성합니다. (freetier로 생성하고 신용카드만 등록하면 1년간 사용할수 있습니다. 1년이 지나면 또 다른 신용 카드를 이용해서 서버를 setup 하시면 거의 무한정 사용할수 있을것 같네요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_1-계정생성&quot; data-ke-size=&quot;size26&quot;&gt;1.계정생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot;&gt;https://aws.amazon.com/ko/&lt;/a&gt; 여기에 접속하여 우측상단의 AWS 계정생성 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;96&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NrITQ/btrat2mLxCC/aAYaxZa7UF63KCth0lEuzK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NrITQ/btrat2mLxCC/aAYaxZa7UF63KCth0lEuzK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NrITQ/btrat2mLxCC/aAYaxZa7UF63KCth0lEuzK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNrITQ%2Fbtrat2mLxCC%2FaAYaxZa7UF63KCth0lEuzK%2Fimg.jpg&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;96&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;이메일 주소 암호 계정 이름을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;650&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR3ZQO/btraqsTwEvM/dLOW780eYpihFTkItGijQ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR3ZQO/btraqsTwEvM/dLOW780eYpihFTkItGijQ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR3ZQO/btraqsTwEvM/dLOW780eYpihFTkItGijQ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR3ZQO%2FbtraqsTwEvM%2FdLOW780eYpihFTkItGijQ1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;650&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;연락처 정보는 개인,전체이름 및 전화번호 주소 우편 번호를 입력합니다. 주소는 비용이 발생할경우 청구하는 주소가 되므로 정확히 기재해 주시고 영문으로 작성하셔야 됩니다. 영문주소 변환은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.jusoen.com&quot;&gt;https://www.jusoen.com&lt;/a&gt;&lt;a href=&quot;https://www.jusoen.com/&quot;&gt;&lt;span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;여기에서 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmPlc/btrat1BoNsq/MZt9w4nDm6afZkD0OkSnh1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmPlc/btrat1BoNsq/MZt9w4nDm6afZkD0OkSnh1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmPlc/btrat1BoNsq/MZt9w4nDm6afZkD0OkSnh1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpmPlc%2Fbtrat1BoNsq%2FMZt9w4nDm6afZkD0OkSnh1%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1108&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;신용카드 정보와 만료날짜 및 신용카드에 적혀있는 카드 소유자 이름을 정확하게 입력하시고 청구지 주소를 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;976&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b65H7u/btramgtvy7d/bC0HbOll2goORzXyIjFXJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b65H7u/btramgtvy7d/bC0HbOll2goORzXyIjFXJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b65H7u/btramgtvy7d/bC0HbOll2goORzXyIjFXJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb65H7u%2Fbtramgtvy7d%2FbC0HbOll2goORzXyIjFXJk%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;976&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;휴대폰 전화를 입력하여 문자로 확인코드를 받습니다. 보안검사 부분의 보안문자를 보안문자 입력하는 칸에 정확히 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;950&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOSmnO/btranatznkl/gnr9QJ3OCzGukXQB4AKTr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOSmnO/btranatznkl/gnr9QJ3OCzGukXQB4AKTr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOSmnO/btranatznkl/gnr9QJ3OCzGukXQB4AKTr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOSmnO%2Fbtranatznkl%2Fgnr9QJ3OCzGukXQB4AKTr0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;950&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;휴대폰으로 온 문자를 확인하고 코드확인 란에 숫자를 입력하여 다음단계로 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;506&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Jf85/btrapslWATd/xwr41YCk2k1eXaXiYZykZK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Jf85/btrapslWATd/xwr41YCk2k1eXaXiYZykZK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Jf85/btrapslWATd/xwr41YCk2k1eXaXiYZykZK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Jf85%2FbtrapslWATd%2Fxwr41YCk2k1eXaXiYZykZK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;506&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;마지막 단계로 기본지원 - 무료를 선택한후 가입을 완료합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;854&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvymRx/btrao7JmQMt/1aUPwxAduy6dtNWHS4HIy0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvymRx/btrao7JmQMt/1aUPwxAduy6dtNWHS4HIy0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvymRx/btrao7JmQMt/1aUPwxAduy6dtNWHS4HIy0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvymRx%2Fbtrao7JmQMt%2F1aUPwxAduy6dtNWHS4HIy0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;854&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/12</guid>
      <comments>https://goodsaem.tistory.com/12#entry12comment</comments>
      <pubDate>Sun, 25 Jul 2021 10:29:24 +0900</pubDate>
    </item>
    <item>
      <title>[AWS 무료 서버구축-2/18] 무료 도메인 발급</title>
      <link>https://goodsaem.tistory.com/11</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;무료 도메인 발급&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무료 도메인 발급 받는 방법에 대해서 알아 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 대부분의 웹서버는 https 통신을 합니다. 이제는 선택이 아닌 필수 인것 같네요 제가 서버를 구축하게 된 직접적인 원인도 https 설정을 하기 위함입니다. nginx 에 https 서비스를 구성하기 위해서는 도메인이 필요합니다. 도메인이 준비되면 certbot을 통해서 무료 ssl 인증서 적용 및 http/2 적용이 가능한데요 무료 도메인 가입하는 부분에 대해서 아래오 같이 정리했습니다. 서버셋업전 도메인 발급 받으시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_5-freenom&quot; data-ke-size=&quot;size26&quot;&gt;Freenom&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Freenom 에서 무료 도메인 발급 받는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.freenom.com/en/index.html?lang=en&quot;&gt;https://www.freenom.com/en/index.html?lang=en &lt;/a&gt;freenom 이란 사이트에서 무료 도메인을 발급 받을수 있습니다. 회원가입을 후 도메인 등록을 진행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 후 원하는 도메인을 입력하고 엔터키를 클릭한후 사용하고자 하는 도메인에서 Get it now! 버튼을 클릭하여 선택합니다. 그리고 나서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Checkout&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 클릭합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;594&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kXvBe/btraqSrrp73/lS1PO5lD6qC8OgkEqNHGq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kXvBe/btraqSrrp73/lS1PO5lD6qC8OgkEqNHGq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kXvBe/btraqSrrp73/lS1PO5lD6qC8OgkEqNHGq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkXvBe%2FbtraqSrrp73%2FlS1PO5lD6qC8OgkEqNHGq0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;594&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;Use DNS 버튼을 클릭하고 Use Freenom DNS Service를 선택한후 aws free tier의 퍼블릭 ipv4 주소를 입력하고 Continue 버튼을 클릭합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;338&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SCeq8/btranzs7exn/KaTTGekN7FQWCzC4fUGA0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SCeq8/btranzs7exn/KaTTGekN7FQWCzC4fUGA0K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SCeq8/btranzs7exn/KaTTGekN7FQWCzC4fUGA0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSCeq8%2Fbtranzs7exn%2FKaTTGekN7FQWCzC4fUGA0K%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;338&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;도메인 주문이 완료되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;905&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QtswL/btranb0itVC/USOjyKO74mUJfaKwDKFOkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QtswL/btranb0itVC/USOjyKO74mUJfaKwDKFOkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QtswL/btranb0itVC/USOjyKO74mUJfaKwDKFOkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQtswL%2Fbtranb0itVC%2FUSOjyKO74mUJfaKwDKFOkK%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;905&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c3e50;&quot;&gt;My Domain 에서 주문한 도메인 확인이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehOC6H/btraqR66dEM/6AgLJGpVKCOUTQmDcxBQO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehOC6H/btraqR66dEM/6AgLJGpVKCOUTQmDcxBQO0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehOC6H/btraqR66dEM/6AgLJGpVKCOUTQmDcxBQO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehOC6H%2FbtraqR66dEM%2F6AgLJGpVKCOUTQmDcxBQO0%2Fimg.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Setup/aws</category>
      <author>goodsaem</author>
      <guid isPermaLink="true">https://goodsaem.tistory.com/11</guid>
      <comments>https://goodsaem.tistory.com/11#entry11comment</comments>
      <pubDate>Sun, 25 Jul 2021 10:17:09 +0900</pubDate>
    </item>
  </channel>
</rss>